summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--JavaScriptCore/API/JSCallbackObject.h5
-rw-r--r--JavaScriptCore/API/JSCallbackObjectFunctions.h4
-rw-r--r--JavaScriptCore/ChangeLog824
-rw-r--r--JavaScriptCore/Configurations/FeatureDefines.xcconfig5
-rw-r--r--JavaScriptCore/Configurations/JavaScriptCore.xcconfig2
-rw-r--r--JavaScriptCore/GNUmakefile.am10
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops4
-rw-r--r--JavaScriptCore/bytecode/CodeBlock.cpp23
-rw-r--r--JavaScriptCore/bytecode/CodeBlock.h26
-rw-r--r--JavaScriptCore/bytecode/Instruction.h2
-rw-r--r--JavaScriptCore/bytecode/Opcode.h10
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.cpp21
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.h1
-rw-r--r--JavaScriptCore/bytecompiler/NodesCodegen.cpp2
-rw-r--r--JavaScriptCore/interpreter/CallFrame.h5
-rw-r--r--JavaScriptCore/interpreter/Interpreter.cpp273
-rw-r--r--JavaScriptCore/interpreter/Interpreter.h10
-rw-r--r--JavaScriptCore/jit/ExecutableAllocator.cpp36
-rw-r--r--JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp30
-rw-r--r--JavaScriptCore/jit/ExecutableAllocatorPosix.cpp42
-rw-r--r--JavaScriptCore/jit/ExecutableAllocatorSymbian.cpp2
-rw-r--r--JavaScriptCore/jit/ExecutableAllocatorWin.cpp2
-rw-r--r--JavaScriptCore/jit/JIT.h49
-rw-r--r--JavaScriptCore/jit/JITPropertyAccess.cpp20
-rw-r--r--JavaScriptCore/jit/JITPropertyAccess32_64.cpp23
-rw-r--r--JavaScriptCore/jit/JITStubs.cpp63
-rw-r--r--JavaScriptCore/jit/JITStubs.h5
-rw-r--r--JavaScriptCore/parser/ASTBuilder.h37
-rw-r--r--JavaScriptCore/parser/JSParser.cpp349
-rw-r--r--JavaScriptCore/parser/JSParser.h179
-rw-r--r--JavaScriptCore/parser/Lexer.cpp344
-rw-r--r--JavaScriptCore/parser/Lexer.h21
-rw-r--r--JavaScriptCore/parser/Nodes.cpp2
-rw-r--r--JavaScriptCore/parser/Nodes.h3
-rw-r--r--JavaScriptCore/parser/Parser.cpp2
-rw-r--r--JavaScriptCore/parser/ParserArena.cpp5
-rw-r--r--JavaScriptCore/parser/SourceProvider.h5
-rw-r--r--JavaScriptCore/parser/SyntaxChecker.h51
-rw-r--r--JavaScriptCore/qt/ChangeLog97
-rw-r--r--JavaScriptCore/qt/api/qscriptconverter_p.h14
-rw-r--r--JavaScriptCore/qt/api/qscriptengine_p.cpp21
-rw-r--r--JavaScriptCore/qt/api/qscriptengine_p.h12
-rw-r--r--JavaScriptCore/qt/api/qscriptstring_p.h12
-rw-r--r--JavaScriptCore/qt/api/qscriptvalue.cpp112
-rw-r--r--JavaScriptCore/qt/api/qscriptvalue.h30
-rw-r--r--JavaScriptCore/qt/api/qscriptvalue_p.h282
-rw-r--r--JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp33
-rw-r--r--JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp684
-rw-r--r--JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h10
-rw-r--r--JavaScriptCore/runtime/Arguments.h4
-rw-r--r--JavaScriptCore/runtime/ArrayPrototype.cpp12
-rw-r--r--JavaScriptCore/runtime/DatePrototype.cpp2
-rw-r--r--JavaScriptCore/runtime/Executable.cpp64
-rw-r--r--JavaScriptCore/runtime/Executable.h18
-rw-r--r--JavaScriptCore/runtime/JSArray.cpp2
-rw-r--r--JavaScriptCore/runtime/JSFunction.cpp3
-rw-r--r--JavaScriptCore/runtime/JSGlobalData.cpp16
-rw-r--r--JavaScriptCore/runtime/JSGlobalData.h10
-rw-r--r--JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp24
-rw-r--r--JavaScriptCore/runtime/JSGlobalObjectFunctions.h3
-rw-r--r--JavaScriptCore/runtime/JSObject.h12
-rw-r--r--JavaScriptCore/runtime/JSValue.h1
-rw-r--r--JavaScriptCore/runtime/RegExpConstructor.cpp3
-rw-r--r--JavaScriptCore/runtime/RegExpObject.cpp3
-rw-r--r--JavaScriptCore/runtime/RegExpPrototype.cpp4
-rw-r--r--JavaScriptCore/runtime/RegExpPrototype.h6
-rw-r--r--JavaScriptCore/runtime/SmallStrings.cpp9
-rw-r--r--JavaScriptCore/runtime/StringPrototype.cpp34
-rw-r--r--JavaScriptCore/runtime/UString.cpp137
-rw-r--r--JavaScriptCore/wtf/CrossThreadRefCounted.h11
-rw-r--r--JavaScriptCore/wtf/MessageQueue.h6
-rw-r--r--JavaScriptCore/wtf/OwnArrayPtr.h25
-rw-r--r--JavaScriptCore/wtf/OwnPtr.h99
-rw-r--r--JavaScriptCore/wtf/PassOwnPtr.h107
-rw-r--r--JavaScriptCore/wtf/PassRefPtr.h27
-rw-r--r--JavaScriptCore/wtf/Platform.h26
-rw-r--r--JavaScriptCore/wtf/RefCounted.h22
-rw-r--r--JavaScriptCore/wtf/RefPtr.h11
-rw-r--r--JavaScriptCore/wtf/RetainPtr.h2
-rw-r--r--JavaScriptCore/wtf/SizeLimits.cpp3
-rw-r--r--JavaScriptCore/wtf/StringExtras.h4
-rw-r--r--JavaScriptCore/wtf/TCSystemAlloc.cpp1
-rw-r--r--JavaScriptCore/wtf/Vector.h13
-rw-r--r--JavaScriptCore/wtf/gobject/GOwnPtr.h3
-rw-r--r--JavaScriptCore/wtf/gobject/GRefPtr.h5
-rw-r--r--JavaScriptCore/wtf/text/WTFString.cpp2
-rw-r--r--JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp11
-rw-r--r--JavaScriptCore/yarr/RegexInterpreter.cpp13
-rw-r--r--JavaScriptCore/yarr/RegexInterpreter.h7
-rw-r--r--LayoutTests/fast/xpath/substring-nan-position-expected.txt10
-rw-r--r--LayoutTests/fast/xpath/substring-nan-position.html26
-rw-r--r--LayoutTests/fast/xpath/substring-non-positive-postion-expected.txt10
-rw-r--r--LayoutTests/fast/xpath/substring-non-positive-postion.html23
-rw-r--r--LayoutTests/http/tests/appcache/foreign-iframe-main-expected.txt1
-rw-r--r--LayoutTests/http/tests/appcache/progress-counter-expected.txt2
-rw-r--r--LayoutTests/http/tests/appcache/progress-counter.html62
-rw-r--r--LayoutTests/http/tests/appcache/resources/different-https-origin-resource.html8
-rw-r--r--LayoutTests/http/tests/appcache/resources/progress-counter.manifest3
-rw-r--r--LayoutTests/storage/indexeddb/idb-objectstore-request-expected.txt71
-rw-r--r--LayoutTests/storage/indexeddb/script-tests/idb-objectstore-request.js52
-rw-r--r--WebCore/Android.derived.jscbindings.mk1
-rw-r--r--WebCore/Android.derived.v8bindings.mk1
-rw-r--r--WebCore/Android.jscbindings.mk3
-rw-r--r--WebCore/Android.mk4
-rw-r--r--WebCore/Android.v8bindings.mk9
-rw-r--r--WebCore/CMakeLists.txt42
-rw-r--r--WebCore/CMakeListsEfl.txt1
-rw-r--r--WebCore/ChangeLog5851
-rw-r--r--WebCore/Configurations/FeatureDefines.xcconfig5
-rw-r--r--WebCore/DerivedSources.cpp9
-rw-r--r--WebCore/DerivedSources.make178
-rw-r--r--WebCore/English.lproj/localizedStrings.jsbin41044 -> 42592 bytes
-rw-r--r--WebCore/GNUmakefile.am100
-rw-r--r--WebCore/WebCore.3DRendering.exp1
-rw-r--r--WebCore/WebCore.AcceleratedCompositing.exp2
-rw-r--r--WebCore/WebCore.ClientBasedGeolocation.exp2
-rw-r--r--WebCore/WebCore.ContextMenus.exp5
-rw-r--r--WebCore/WebCore.DashboardSupport.exp3
-rw-r--r--WebCore/WebCore.DragSupport.exp9
-rw-r--r--WebCore/WebCore.Geolocation.exp2
-rw-r--r--WebCore/WebCore.Inspector.exp30
-rw-r--r--WebCore/WebCore.JNI.exp10
-rw-r--r--WebCore/WebCore.NPAPI.exp28
-rw-r--r--WebCore/WebCore.OrientationEvents.exp1
-rw-r--r--WebCore/WebCore.PluginHostProcess.exp28
-rw-r--r--WebCore/WebCore.ProtectionSpaceAuthCallback.exp2
-rw-r--r--WebCore/WebCore.SVG.Animation.exp2
-rw-r--r--WebCore/WebCore.SVG.Filters.exp25
-rw-r--r--WebCore/WebCore.SVG.ForeignObject.exp1
-rw-r--r--WebCore/WebCore.SVG.exp95
-rw-r--r--WebCore/WebCore.Tiger.exp13
-rw-r--r--WebCore/WebCore.Video.exp18
-rw-r--r--WebCore/WebCore.VideoProxy.exp4
-rw-r--r--WebCore/WebCore.exp.in (renamed from WebCore/WebCore.base.exp)385
-rw-r--r--WebCore/WebCore.gyp/WebCore.gyp63
-rw-r--r--WebCore/WebCore.gyp/scripts/rule_binding.py10
-rw-r--r--WebCore/WebCore.gypi60
-rw-r--r--WebCore/WebCore.pri74
-rw-r--r--WebCore/WebCore.pro66
-rw-r--r--WebCore/WebCore.vcproj/WebCore.vcproj306
-rw-r--r--WebCore/WebCore.vcproj/WebCoreCommon.vsprops2
-rw-r--r--WebCore/WebCore.xcodeproj/project.pbxproj1097
-rw-r--r--WebCore/accessibility/AXObjectCache.h1
-rw-r--r--WebCore/accessibility/AccessibilityListBox.h3
-rw-r--r--WebCore/accessibility/AccessibilityMenuList.h1
-rw-r--r--WebCore/accessibility/AccessibilityRenderObject.cpp75
-rw-r--r--WebCore/accessibility/AccessibilityTable.cpp18
-rw-r--r--WebCore/accessibility/mac/AccessibilityObjectWrapper.h2
-rw-r--r--WebCore/accessibility/mac/AccessibilityObjectWrapper.mm3
-rw-r--r--WebCore/bindings/ScriptControllerBase.h48
-rw-r--r--WebCore/bindings/generic/RuntimeEnabledFeatures.cpp5
-rw-r--r--WebCore/bindings/generic/RuntimeEnabledFeatures.h1
-rw-r--r--WebCore/bindings/gobject/GObjectEventListener.h1
-rw-r--r--WebCore/bindings/js/IDBBindingUtilities.cpp4
-rw-r--r--WebCore/bindings/js/IDBBindingUtilities.h6
-rw-r--r--WebCore/bindings/js/JSBindingsAllInOne.cpp6
-rw-r--r--WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp (renamed from WebCore/bindings/js/JSMimeTypeArrayCustom.cpp)12
-rw-r--r--WebCore/bindings/js/JSDOMPluginArrayCustom.cpp (renamed from WebCore/bindings/js/JSPluginArrayCustom.cpp)12
-rw-r--r--WebCore/bindings/js/JSDOMPluginCustom.cpp (renamed from WebCore/bindings/js/JSPluginCustom.cpp)12
-rw-r--r--WebCore/bindings/js/JSIDBAnyCustom.cpp7
-rw-r--r--WebCore/bindings/js/JSSharedWorkerCustom.cpp5
-rw-r--r--WebCore/bindings/js/ScriptCallStack.cpp2
-rw-r--r--WebCore/bindings/js/ScriptCallStack.h5
-rw-r--r--WebCore/bindings/js/ScriptController.h12
-rw-r--r--WebCore/bindings/js/ScriptDebugServer.cpp6
-rw-r--r--WebCore/bindings/js/ScriptEventListener.cpp8
-rw-r--r--WebCore/bindings/js/ScriptEventListener.h4
-rw-r--r--WebCore/bindings/scripts/CodeGenerator.pm18
-rw-r--r--WebCore/bindings/scripts/CodeGeneratorJS.pm7
-rw-r--r--WebCore/bindings/scripts/CodeGeneratorV8.pm10
-rw-r--r--WebCore/bindings/scripts/IDLParser.pm2
-rw-r--r--WebCore/bindings/scripts/InFilesParser.pm4
-rwxr-xr-xWebCore/bindings/scripts/generate-bindings.pl12
-rw-r--r--WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp38
-rw-r--r--WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h8
-rw-r--r--WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp97
-rw-r--r--WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h16
-rw-r--r--WebCore/bindings/scripts/test/JS/JSTestObj.cpp44
-rw-r--r--WebCore/bindings/scripts/test/JS/JSTestObj.h8
-rw-r--r--WebCore/bindings/scripts/test/ObjC/DOMTestObj.h8
-rw-r--r--WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm30
-rw-r--r--WebCore/bindings/scripts/test/TestObj.idl7
-rw-r--r--WebCore/bindings/scripts/test/V8/V8TestObj.cpp50
-rw-r--r--WebCore/bindings/v8/IDBBindingUtilities.cpp4
-rw-r--r--WebCore/bindings/v8/IDBBindingUtilities.h6
-rw-r--r--WebCore/bindings/v8/ScriptCallStack.cpp26
-rw-r--r--WebCore/bindings/v8/ScriptCallStack.h5
-rw-r--r--WebCore/bindings/v8/ScriptController.cpp16
-rw-r--r--WebCore/bindings/v8/ScriptController.h12
-rw-r--r--WebCore/bindings/v8/ScriptDebugServer.cpp4
-rw-r--r--WebCore/bindings/v8/ScriptEventListener.cpp16
-rw-r--r--WebCore/bindings/v8/ScriptEventListener.h6
-rw-r--r--WebCore/bindings/v8/ScriptSourceCode.h8
-rw-r--r--WebCore/bindings/v8/V8AbstractEventListener.h4
-rw-r--r--WebCore/bindings/v8/V8DOMWrapper.cpp3
-rw-r--r--WebCore/bindings/v8/V8NodeFilterCondition.h9
-rw-r--r--WebCore/bindings/v8/V8Utilities.cpp25
-rw-r--r--WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp3
-rw-r--r--WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp3
-rw-r--r--WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp14
-rw-r--r--WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp3
-rw-r--r--WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp3
-rw-r--r--WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp6
-rw-r--r--WebCore/bindings/v8/custom/V8NamedNodesCollection.h11
-rw-r--r--WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp24
-rw-r--r--WebCore/bridge/jni/v8/JavaInstanceV8.cpp3
-rw-r--r--WebCore/bridge/qt/qt_instance.cpp28
-rw-r--r--WebCore/css/CSSComputedStyleDeclaration.cpp14
-rw-r--r--WebCore/css/CSSComputedStyleDeclaration.h5
-rw-r--r--WebCore/css/CSSFontFaceSource.cpp8
-rw-r--r--WebCore/css/CSSFontFaceSource.h9
-rw-r--r--WebCore/css/CSSHelper.cpp4
-rw-r--r--WebCore/css/CSSImportRule.idl2
-rw-r--r--WebCore/css/CSSMediaRule.idl2
-rw-r--r--WebCore/css/CSSParser.cpp73
-rw-r--r--WebCore/css/CSSParser.h6
-rw-r--r--WebCore/css/CSSPrimitiveValueMappings.h4
-rw-r--r--WebCore/css/CSSProperty.cpp16
-rw-r--r--WebCore/css/CSSProperty.h3
-rw-r--r--WebCore/css/CSSPropertyNames.in4
-rw-r--r--WebCore/css/CSSSegmentedFontFace.cpp6
-rw-r--r--WebCore/css/CSSSelector.cpp7
-rw-r--r--WebCore/css/CSSSelector.h9
-rw-r--r--WebCore/css/CSSStyleSelector.cpp14
-rw-r--r--WebCore/css/CSSStyleSheet.cpp7
-rw-r--r--WebCore/css/CSSStyleSheet.h2
-rw-r--r--WebCore/css/CSSStyleSheet.idl2
-rw-r--r--WebCore/css/CSSValueKeywords.in1
-rw-r--r--WebCore/css/CSSVariablesRule.idl2
-rw-r--r--WebCore/css/MediaQuery.cpp3
-rw-r--r--WebCore/css/MediaQuery.h6
-rw-r--r--WebCore/css/StyleMedia.h4
-rw-r--r--WebCore/css/mathml.css13
-rw-r--r--WebCore/css/mediaControls.css7
-rw-r--r--WebCore/css/mediaControlsQuickTime.css45
-rw-r--r--WebCore/css/themeWin.css3
-rw-r--r--WebCore/dom/Attribute.h5
-rw-r--r--WebCore/dom/BeforeLoadEvent.h1
-rw-r--r--WebCore/dom/CanvasSurface.h111
-rw-r--r--WebCore/dom/CharacterData.cpp10
-rw-r--r--WebCore/dom/CharacterData.h3
-rw-r--r--WebCore/dom/ContainerNode.cpp5
-rw-r--r--WebCore/dom/ContainerNode.h4
-rw-r--r--WebCore/dom/CustomEvent.h1
-rw-r--r--WebCore/dom/DOMStringMap.h1
-rw-r--r--WebCore/dom/DeviceOrientationController.cpp (renamed from WebCore/dom/DeviceOrientation.cpp)6
-rw-r--r--WebCore/dom/DeviceOrientationController.h (renamed from WebCore/dom/DeviceOrientation.h)10
-rw-r--r--WebCore/dom/DeviceOrientationEvent.h1
-rw-r--r--WebCore/dom/Document.cpp11
-rw-r--r--WebCore/dom/Document.h3
-rw-r--r--WebCore/dom/Element.cpp86
-rw-r--r--WebCore/dom/Element.h25
-rw-r--r--WebCore/dom/EventListener.h1
-rw-r--r--WebCore/dom/MappedAttributeEntry.h4
-rw-r--r--WebCore/dom/MessagePort.h2
-rw-r--r--WebCore/dom/Node.cpp50
-rw-r--r--WebCore/dom/NodeFilter.h1
-rw-r--r--WebCore/dom/NodeRareData.h2
-rw-r--r--WebCore/dom/RegisteredEventListener.h2
-rw-r--r--WebCore/dom/SelectorNodeList.cpp1
-rw-r--r--WebCore/dom/SelectorNodeList.h4
-rw-r--r--WebCore/dom/SpaceSplitString.h7
-rw-r--r--WebCore/dom/StyleElement.cpp12
-rw-r--r--WebCore/dom/StyleElement.h5
-rw-r--r--WebCore/dom/StyledElement.cpp37
-rw-r--r--WebCore/dom/StyledElement.h20
-rw-r--r--WebCore/dom/Traversal.h1
-rwxr-xr-xWebCore/dom/make_names.pl226
-rw-r--r--WebCore/editing/EditingBehavior.h4
-rw-r--r--WebCore/editing/EditorCommand.cpp5
-rw-r--r--WebCore/editing/IndentOutdentCommand.cpp58
-rw-r--r--WebCore/editing/IndentOutdentCommand.h1
-rw-r--r--WebCore/editing/InsertLineBreakCommand.cpp5
-rw-r--r--WebCore/editing/InsertParagraphSeparatorCommand.cpp5
-rw-r--r--WebCore/editing/SelectionController.cpp8
-rw-r--r--WebCore/editing/SelectionController.h6
-rw-r--r--WebCore/history/BackForwardController.cpp51
-rw-r--r--WebCore/history/BackForwardController.h54
-rw-r--r--WebCore/history/BackForwardControllerClient.h48
-rw-r--r--WebCore/history/BackForwardList.h93
-rw-r--r--WebCore/history/BackForwardListChromium.cpp69
-rw-r--r--WebCore/history/BackForwardListImpl.cpp (renamed from WebCore/history/BackForwardList.cpp)52
-rw-r--r--WebCore/history/BackForwardListImpl.h107
-rw-r--r--WebCore/history/CachedFrame.cpp6
-rw-r--r--WebCore/history/CachedFrame.h5
-rw-r--r--WebCore/html/FileReader.cpp9
-rw-r--r--WebCore/html/FileStreamClient.h1
-rw-r--r--WebCore/html/FileStreamProxy.cpp17
-rw-r--r--WebCore/html/FileStreamProxy.h7
-rw-r--r--WebCore/html/HTMLAnchorElement.idl2
-rw-r--r--WebCore/html/HTMLAreaElement.idl2
-rw-r--r--WebCore/html/HTMLCanvasElement.cpp123
-rw-r--r--WebCore/html/HTMLCanvasElement.h58
-rw-r--r--WebCore/html/HTMLConstructionSite.cpp367
-rw-r--r--WebCore/html/HTMLConstructionSite.h141
-rw-r--r--WebCore/html/HTMLDocumentParser.cpp15
-rw-r--r--WebCore/html/HTMLElementStack.cpp83
-rw-r--r--WebCore/html/HTMLElementStack.h15
-rw-r--r--WebCore/html/HTMLEntityNames.json8554
-rw-r--r--WebCore/html/HTMLFormattingElementList.cpp98
-rw-r--r--WebCore/html/HTMLFormattingElementList.h67
-rw-r--r--WebCore/html/HTMLFrameElement.idl2
-rw-r--r--WebCore/html/HTMLImageElement.idl6
-rw-r--r--WebCore/html/HTMLInputElement.cpp2
-rw-r--r--WebCore/html/HTMLInputElement.h6
-rw-r--r--WebCore/html/HTMLInputElement.idl2
-rw-r--r--WebCore/html/HTMLLinkElement.cpp3
-rw-r--r--WebCore/html/HTMLLinkElement.h8
-rw-r--r--WebCore/html/HTMLLinkElement.idl2
-rw-r--r--WebCore/html/HTMLMediaElement.cpp32
-rw-r--r--WebCore/html/HTMLMediaElement.idl2
-rw-r--r--WebCore/html/HTMLObjectElement.cpp6
-rw-r--r--WebCore/html/HTMLObjectElement.idl2
-rw-r--r--WebCore/html/HTMLPlugInElement.cpp17
-rw-r--r--WebCore/html/HTMLPlugInElement.h4
-rw-r--r--WebCore/html/HTMLScriptElement.idl2
-rw-r--r--WebCore/html/HTMLSourceElement.cpp8
-rw-r--r--WebCore/html/HTMLSourceElement.h3
-rw-r--r--WebCore/html/HTMLSourceElement.idl2
-rw-r--r--WebCore/html/HTMLStyleElement.cpp8
-rw-r--r--WebCore/html/HTMLStyleElement.h1
-rw-r--r--WebCore/html/HTMLToken.h49
-rw-r--r--WebCore/html/HTMLTokenizer.cpp11
-rw-r--r--WebCore/html/HTMLTreeBuilder.cpp2515
-rw-r--r--WebCore/html/HTMLTreeBuilder.h123
-rw-r--r--WebCore/html/HTMLVideoElement.cpp2
-rw-r--r--WebCore/html/HTMLVideoElement.idl2
-rw-r--r--WebCore/html/TimeRanges.idl18
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext2D.cpp6
-rw-r--r--WebCore/html/canvas/WebGLBuffer.cpp27
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.cpp30
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.h3
-rw-r--r--WebCore/inspector/CodeGeneratorInspector.pm298
-rw-r--r--WebCore/inspector/InspectorApplicationCacheAgent.cpp168
-rw-r--r--WebCore/inspector/InspectorApplicationCacheAgent.h109
-rw-r--r--WebCore/inspector/InspectorBackend.cpp21
-rw-r--r--WebCore/inspector/InspectorBackend.h8
-rw-r--r--WebCore/inspector/InspectorBackend.idl4
-rw-r--r--WebCore/inspector/InspectorCSSStore.cpp9
-rw-r--r--WebCore/inspector/InspectorController.cpp54
-rw-r--r--WebCore/inspector/InspectorController.h39
-rw-r--r--WebCore/inspector/InspectorDOMAgent.cpp374
-rw-r--r--WebCore/inspector/InspectorDOMAgent.h37
-rw-r--r--WebCore/inspector/InspectorFrontend.cpp263
-rw-r--r--WebCore/inspector/InspectorFrontend.h36
-rw-r--r--WebCore/inspector/InspectorFrontend2.idl39
-rw-r--r--WebCore/inspector/InspectorResource.cpp37
-rw-r--r--WebCore/inspector/InspectorResource.h9
-rw-r--r--WebCore/inspector/InspectorTimelineAgent.cpp123
-rw-r--r--WebCore/inspector/InspectorTimelineAgent.h25
-rw-r--r--WebCore/inspector/TimelineRecordFactory.cpp176
-rw-r--r--WebCore/inspector/TimelineRecordFactory.h36
-rw-r--r--WebCore/inspector/front-end/AbstractTimelinePanel.js4
-rw-r--r--WebCore/inspector/front-end/ApplicationCacheItemsView.js259
-rw-r--r--WebCore/inspector/front-end/AuditsPanel.js6
-rw-r--r--WebCore/inspector/front-end/CallStackSidebarPane.js5
-rw-r--r--WebCore/inspector/front-end/ConsolePanel.js4
-rw-r--r--WebCore/inspector/front-end/DOMAgent.js29
-rw-r--r--WebCore/inspector/front-end/ElementsPanel.js15
-rw-r--r--WebCore/inspector/front-end/Images/applicationCache.pngbin0 -> 1964 bytes
-rw-r--r--WebCore/inspector/front-end/Panel.js36
-rw-r--r--WebCore/inspector/front-end/ProfilesPanel.js5
-rw-r--r--WebCore/inspector/front-end/ResourcesPanel.js62
-rw-r--r--WebCore/inspector/front-end/ScriptsPanel.js14
-rw-r--r--WebCore/inspector/front-end/Settings.js30
-rw-r--r--WebCore/inspector/front-end/SourceCSSTokenizer.js4
-rw-r--r--WebCore/inspector/front-end/StoragePanel.js124
-rw-r--r--WebCore/inspector/front-end/StylesSidebarPane.js16
-rw-r--r--WebCore/inspector/front-end/TimelinePanel.js5
-rw-r--r--WebCore/inspector/front-end/WebKit.qrc2
-rw-r--r--WebCore/inspector/front-end/inspector.css22
-rw-r--r--WebCore/inspector/front-end/inspector.html1
-rw-r--r--WebCore/inspector/front-end/inspector.js41
-rw-r--r--WebCore/loader/CachedResource.cpp4
-rw-r--r--WebCore/loader/CrossOriginAccessControl.cpp16
-rw-r--r--WebCore/loader/CrossOriginAccessControl.h2
-rw-r--r--WebCore/loader/CrossOriginPreflightResultCache.cpp40
-rw-r--r--WebCore/loader/CrossOriginPreflightResultCache.h9
-rw-r--r--WebCore/loader/DocumentThreadableLoader.cpp27
-rw-r--r--WebCore/loader/DocumentThreadableLoader.h3
-rw-r--r--WebCore/loader/FrameLoader.cpp35
-rw-r--r--WebCore/loader/FrameLoader.h3
-rw-r--r--WebCore/loader/FrameLoaderTypes.h15
-rw-r--r--WebCore/loader/ImageLoader.cpp5
-rw-r--r--WebCore/loader/SubresourceLoader.cpp11
-rw-r--r--WebCore/loader/TextResourceDecoder.cpp4
-rw-r--r--WebCore/loader/appcache/ApplicationCacheGroup.cpp140
-rw-r--r--WebCore/loader/appcache/ApplicationCacheGroup.h25
-rw-r--r--WebCore/loader/appcache/ApplicationCacheHost.cpp36
-rw-r--r--WebCore/loader/appcache/ApplicationCacheHost.h23
-rw-r--r--WebCore/loader/appcache/ApplicationCacheStorage.cpp2
-rwxr-xr-xWebCore/make-export-file-generator57
-rw-r--r--WebCore/mathml/MathMLElement.cpp25
-rw-r--r--WebCore/mathml/MathMLElement.h3
-rw-r--r--WebCore/mathml/RenderMathMLFraction.cpp2
-rw-r--r--WebCore/mathml/RenderMathMLSquareRoot.cpp2
-rw-r--r--WebCore/mathml/mathattrs.in2
-rw-r--r--WebCore/mathml/mathtags.in7
-rw-r--r--WebCore/notifications/Notification.cpp4
-rw-r--r--WebCore/notifications/NotificationCenter.cpp10
-rw-r--r--WebCore/notifications/NotificationCenter.h2
-rw-r--r--WebCore/notifications/NotificationPresenter.h11
-rw-r--r--WebCore/page/Chrome.cpp10
-rw-r--r--WebCore/page/Chrome.h3
-rw-r--r--WebCore/page/ChromeClient.h4
-rw-r--r--WebCore/page/DOMTimer.cpp5
-rw-r--r--WebCore/page/DOMWindow.cpp7
-rw-r--r--WebCore/page/DOMWindow.idl10
-rw-r--r--WebCore/page/EventHandler.cpp14
-rw-r--r--WebCore/page/EventSource.cpp36
-rw-r--r--WebCore/page/EventSource.h14
-rw-r--r--WebCore/page/Frame.cpp26
-rw-r--r--WebCore/page/FrameView.cpp15
-rw-r--r--WebCore/page/Navigation.cpp18
-rw-r--r--WebCore/page/Navigation.h7
-rw-r--r--WebCore/page/Navigation.idl10
-rw-r--r--WebCore/page/Navigator.cpp103
-rw-r--r--WebCore/page/Navigator.h20
-rw-r--r--WebCore/page/Navigator.idl9
-rw-r--r--WebCore/page/Page.cpp51
-rw-r--r--WebCore/page/Page.h14
-rw-r--r--WebCore/page/PageGroup.cpp16
-rw-r--r--WebCore/page/PageGroup.h15
-rw-r--r--WebCore/page/Timing.cpp28
-rw-r--r--WebCore/page/Timing.h5
-rw-r--r--WebCore/page/Timing.idl16
-rw-r--r--WebCore/page/UserContentTypes.h38
-rw-r--r--WebCore/page/UserScript.h10
-rw-r--r--WebCore/page/UserStyleSheet.h7
-rw-r--r--WebCore/page/win/EventHandlerWin.cpp7
-rw-r--r--WebCore/page/wince/FrameWince.cpp18
-rw-r--r--WebCore/platform/CrossThreadCopier.h4
-rw-r--r--WebCore/platform/PlatformKeyboardEvent.h6
-rw-r--r--WebCore/platform/PurgeableBuffer.h9
-rw-r--r--WebCore/platform/SharedBuffer.cpp7
-rw-r--r--WebCore/platform/SharedBuffer.h4
-rw-r--r--WebCore/platform/ThemeTypes.h4
-rw-r--r--WebCore/platform/chromium/GLES2Context.h20
-rw-r--r--WebCore/platform/graphics/Color.cpp12
-rw-r--r--WebCore/platform/graphics/Color.h4
-rw-r--r--WebCore/platform/graphics/GlyphMetricsMap.h2
-rw-r--r--WebCore/platform/graphics/GraphicsLayer.h5
-rw-r--r--WebCore/platform/graphics/MediaPlayer.cpp7
-rw-r--r--WebCore/platform/graphics/MediaPlayer.h2
-rw-r--r--WebCore/platform/graphics/SimpleFontData.h3
-rw-r--r--WebCore/platform/graphics/cairo/DrawErrorUnderline.h2
-rw-r--r--WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp4
-rw-r--r--WebCore/platform/graphics/chromium/FontLinux.cpp33
-rw-r--r--WebCore/platform/graphics/chromium/LayerRendererChromium.cpp2
-rw-r--r--WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp9
-rw-r--r--WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp30
-rw-r--r--WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp6
-rw-r--r--WebCore/platform/graphics/mac/GraphicsLayerCA.mm4
-rw-r--r--WebCore/platform/graphics/qt/GraphicsContextQt.cpp3
-rw-r--r--WebCore/platform/graphics/qt/GraphicsLayerQt.cpp41
-rw-r--r--WebCore/platform/graphics/qt/GraphicsLayerQt.h1
-rw-r--r--WebCore/platform/graphics/qt/ImageBufferQt.cpp36
-rw-r--r--WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp1
-rw-r--r--WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp10
-rw-r--r--WebCore/platform/graphics/skia/GradientSkia.cpp14
-rw-r--r--WebCore/platform/graphics/skia/GraphicsContextSkia.cpp4
-rw-r--r--WebCore/platform/graphics/skia/SkiaUtils.cpp4
-rw-r--r--WebCore/platform/graphics/wince/GraphicsContextWince.cpp4
-rw-r--r--WebCore/platform/graphics/wx/GraphicsContextWx.cpp4
-rw-r--r--WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp19
-rw-r--r--WebCore/platform/gtk/ClipboardUtilitiesGtk.h1
-rw-r--r--WebCore/platform/gtk/GtkVersioning.h2
-rw-r--r--WebCore/platform/gtk/PasteboardHelper.cpp82
-rw-r--r--WebCore/platform/gtk/PasteboardHelper.h4
-rw-r--r--WebCore/platform/gtk/ScrollViewGtk.cpp74
-rw-r--r--WebCore/platform/mac/PurgeableBufferMac.cpp10
-rw-r--r--WebCore/platform/network/ResourceErrorBase.cpp2
-rw-r--r--WebCore/platform/network/ResourceErrorBase.h2
-rw-r--r--WebCore/platform/network/ResourceLoadTiming.h86
-rw-r--r--WebCore/platform/network/ResourceRequestBase.h7
-rw-r--r--WebCore/platform/network/ResourceResponseBase.cpp30
-rw-r--r--WebCore/platform/network/ResourceResponseBase.h8
-rw-r--r--WebCore/platform/network/android/ResourceHandleAndroid.cpp6
-rw-r--r--WebCore/platform/network/cf/ResourceHandleCFNet.cpp6
-rw-r--r--WebCore/platform/network/curl/ResourceHandleCurl.cpp4
-rw-r--r--WebCore/platform/network/mac/ResourceHandleMac.mm3
-rw-r--r--WebCore/platform/network/qt/ResourceHandleQt.cpp6
-rw-r--r--WebCore/platform/network/soup/ResourceHandleSoup.cpp8
-rw-r--r--WebCore/platform/qt/ClipboardQt.cpp18
-rw-r--r--WebCore/platform/qt/PlatformKeyboardEventQt.cpp4
-rw-r--r--WebCore/platform/text/TextEncodingRegistry.cpp10
-rw-r--r--WebCore/plugins/DOMMimeType.cpp (renamed from WebCore/plugins/MimeType.cpp)18
-rw-r--r--WebCore/plugins/DOMMimeType.h (renamed from WebCore/plugins/MimeType.h)44
-rw-r--r--WebCore/plugins/DOMMimeType.idl (renamed from WebCore/plugins/MimeType.idl)4
-rw-r--r--WebCore/plugins/DOMMimeTypeArray.cpp (renamed from WebCore/plugins/MimeTypeArray.cpp)22
-rw-r--r--WebCore/plugins/DOMMimeTypeArray.h (renamed from WebCore/plugins/MimeTypeArray.h)40
-rw-r--r--WebCore/plugins/DOMMimeTypeArray.idl (renamed from WebCore/plugins/MimeTypeArray.idl)6
-rw-r--r--WebCore/plugins/DOMPlugin.cpp (renamed from WebCore/plugins/Plugin.cpp)24
-rw-r--r--WebCore/plugins/DOMPlugin.h (renamed from WebCore/plugins/Plugin.h)48
-rw-r--r--WebCore/plugins/DOMPlugin.idl (renamed from WebCore/plugins/Plugin.idl)6
-rw-r--r--WebCore/plugins/DOMPluginArray.cpp (renamed from WebCore/plugins/PluginArray.cpp)24
-rw-r--r--WebCore/plugins/DOMPluginArray.h (renamed from WebCore/plugins/PluginArray.h)42
-rw-r--r--WebCore/plugins/DOMPluginArray.idl (renamed from WebCore/plugins/PluginArray.idl)6
-rw-r--r--WebCore/plugins/PluginView.cpp6
-rw-r--r--WebCore/rendering/InlineFlowBox.cpp19
-rw-r--r--WebCore/rendering/InlineFlowBox.h4
-rw-r--r--WebCore/rendering/MediaControlElements.cpp11
-rw-r--r--WebCore/rendering/MediaControlElements.h8
-rw-r--r--WebCore/rendering/RenderBlock.cpp24
-rw-r--r--WebCore/rendering/RenderBlockLineLayout.cpp2
-rw-r--r--WebCore/rendering/RenderBoxModelObject.cpp2
-rw-r--r--WebCore/rendering/RenderButton.cpp5
-rw-r--r--WebCore/rendering/RenderEmbeddedObject.cpp143
-rw-r--r--WebCore/rendering/RenderEmbeddedObject.h10
-rw-r--r--WebCore/rendering/RenderLayer.cpp1
-rw-r--r--WebCore/rendering/RenderLayerBacking.cpp38
-rw-r--r--WebCore/rendering/RenderLayerBacking.h2
-rw-r--r--WebCore/rendering/RenderLayerCompositor.cpp79
-rw-r--r--WebCore/rendering/RenderLayerCompositor.h12
-rw-r--r--WebCore/rendering/RenderMedia.cpp41
-rw-r--r--WebCore/rendering/RenderMedia.h2
-rw-r--r--WebCore/rendering/RenderMediaControlsChromium.cpp1
-rw-r--r--WebCore/rendering/RenderObject.cpp21
-rw-r--r--WebCore/rendering/RenderObject.h3
-rw-r--r--WebCore/rendering/RenderPath.cpp6
-rw-r--r--WebCore/rendering/RenderSVGContainer.cpp23
-rw-r--r--WebCore/rendering/RenderSVGContainer.h6
-rw-r--r--WebCore/rendering/RenderSVGResourceFilter.cpp6
-rw-r--r--WebCore/rendering/RenderSVGResourceGradient.cpp27
-rw-r--r--WebCore/rendering/RenderSVGRoot.cpp20
-rw-r--r--WebCore/rendering/RenderSVGRoot.h4
-rw-r--r--WebCore/rendering/RenderSVGViewportContainer.cpp19
-rw-r--r--WebCore/rendering/RenderTheme.cpp13
-rw-r--r--WebCore/rendering/RenderTheme.h10
-rw-r--r--WebCore/rendering/RenderThemeMac.h6
-rw-r--r--WebCore/rendering/RenderThemeMac.mm71
-rw-r--r--WebCore/rendering/RenderThemeWin.cpp20
-rw-r--r--WebCore/rendering/RenderThemeWin.h5
-rw-r--r--WebCore/rendering/RenderThemeWince.cpp21
-rw-r--r--WebCore/rendering/RenderThemeWince.h5
-rw-r--r--WebCore/rendering/RenderView.cpp1
-rw-r--r--WebCore/rendering/RenderWidget.cpp10
-rw-r--r--WebCore/rendering/RootInlineBox.h2
-rw-r--r--WebCore/rendering/SVGRenderSupport.cpp37
-rw-r--r--WebCore/rendering/style/RenderStyle.cpp8
-rw-r--r--WebCore/rendering/style/RenderStyle.h4
-rw-r--r--WebCore/rendering/style/RenderStyleConstants.h5
-rw-r--r--WebCore/rendering/style/SVGRenderStyleDefs.h7
-rw-r--r--WebCore/storage/IDBAny.cpp13
-rw-r--r--WebCore/storage/IDBAny.h5
-rw-r--r--WebCore/storage/IDBAny.idl3
-rw-r--r--WebCore/storage/IDBDatabaseRequest.cpp2
-rw-r--r--WebCore/storage/IDBDatabaseRequest.h2
-rw-r--r--WebCore/storage/IDBDatabaseRequest.idl2
-rw-r--r--WebCore/storage/IDBKey.cpp8
-rw-r--r--WebCore/storage/IDBKey.h8
-rw-r--r--WebCore/storage/IDBKeyRange.h3
-rw-r--r--WebCore/storage/IDBKeyTree.h30
-rw-r--r--WebCore/storage/IDBObjectStore.h6
-rwxr-xr-xWebCore/storage/IDBObjectStoreImpl.cpp47
-rw-r--r--WebCore/storage/IDBObjectStoreImpl.h11
-rw-r--r--WebCore/storage/IDBObjectStoreRequest.cpp52
-rw-r--r--WebCore/storage/IDBObjectStoreRequest.h10
-rw-r--r--WebCore/storage/IDBObjectStoreRequest.idl14
-rw-r--r--WebCore/storage/IDBRequest.cpp3
-rw-r--r--WebCore/storage/IndexedDatabaseRequest.cpp3
-rw-r--r--WebCore/storage/StorageAreaSync.cpp22
-rw-r--r--WebCore/storage/StorageAreaSync.h7
-rw-r--r--WebCore/svg/SVGAnimatedString.idl4
-rw-r--r--WebCore/svg/SVGColor.idl14
-rw-r--r--WebCore/svg/SVGDocument.idl6
-rw-r--r--WebCore/svg/SVGDocumentExtensions.cpp7
-rw-r--r--WebCore/svg/SVGFontFaceElement.cpp1
-rw-r--r--WebCore/svg/SVGLangSpace.idl4
-rw-r--r--WebCore/svg/SVGPathSegList.cpp24
-rw-r--r--WebCore/svg/SVGSVGElement.cpp23
-rw-r--r--WebCore/svg/SVGSVGElement.h4
-rw-r--r--WebCore/svg/SVGSVGElement.idl11
-rw-r--r--WebCore/svg/SVGStringList.idl26
-rw-r--r--WebCore/svg/SVGStylable.idl4
-rw-r--r--WebCore/svg/SVGStyleElement.cpp2
-rw-r--r--WebCore/svg/SVGStyleElement.idl6
-rw-r--r--WebCore/svg/SVGStyledElement.cpp43
-rw-r--r--WebCore/svg/SVGStyledElement.h4
-rw-r--r--WebCore/svg/SVGTests.idl2
-rw-r--r--WebCore/svg/SVGUseElement.cpp33
-rw-r--r--WebCore/svg/SVGUseElement.h3
-rw-r--r--WebCore/svg/SVGZoomEvent.idl2
-rw-r--r--WebCore/svg/graphics/SVGImage.cpp2
-rw-r--r--WebCore/websockets/WebSocket.cpp5
-rw-r--r--WebCore/websockets/WorkerThreadableWebSocketChannel.cpp8
-rw-r--r--WebCore/workers/DefaultSharedWorkerRepository.cpp2
-rw-r--r--WebCore/workers/SharedWorker.cpp31
-rw-r--r--WebCore/workers/SharedWorker.h18
-rw-r--r--WebCore/workers/Worker.cpp31
-rw-r--r--WebCore/workers/Worker.h12
-rw-r--r--WebCore/workers/WorkerContext.cpp4
-rw-r--r--WebCore/workers/WorkerContext.h4
-rw-r--r--WebCore/workers/WorkerMessagingProxy.cpp6
-rw-r--r--WebCore/xml/XMLHttpRequest.cpp4
-rw-r--r--WebCore/xml/XPathEvaluator.idl2
-rw-r--r--WebCore/xml/XPathFunctions.cpp10
-rw-r--r--WebCore/xml/XSLTProcessorLibxslt.cpp2
-rw-r--r--WebKit/CMakeLists.txt3
-rw-r--r--WebKit/CMakeListsEfl.txt9
-rw-r--r--WebKit/ChangeLog175
-rw-r--r--WebKit/StringsNotToBeLocalized.txt11
-rw-r--r--WebKit/WebKit.xcodeproj/project.pbxproj16
-rw-r--r--WebKit/chromium/ChangeLog656
-rw-r--r--WebKit/chromium/DEPS2
-rw-r--r--WebKit/chromium/WebKit.gyp5
-rw-r--r--WebKit/chromium/public/WebCommon.h10
-rw-r--r--WebKit/chromium/public/WebDevToolsAgent.h2
-rw-r--r--WebKit/chromium/public/WebGLES2Context.h9
-rw-r--r--WebKit/chromium/public/WebIDBCallbacks.h2
-rw-r--r--WebKit/chromium/public/WebIDBKey.h85
-rwxr-xr-xWebKit/chromium/public/WebIDBObjectStore.h18
-rw-r--r--WebKit/chromium/public/WebInputElement.h5
-rw-r--r--WebKit/chromium/public/WebNode.h12
-rw-r--r--WebKit/chromium/public/WebPlugin.h21
-rw-r--r--WebKit/chromium/public/WebSerializedScriptValue.h3
-rw-r--r--WebKit/chromium/public/WebURLLoadTiming.h108
-rw-r--r--WebKit/chromium/public/WebURLRequest.h7
-rw-r--r--WebKit/chromium/public/WebURLResponse.h11
-rw-r--r--WebKit/chromium/public/WebView.h24
-rw-r--r--WebKit/chromium/public/WebViewClient.h14
-rw-r--r--WebKit/chromium/src/ApplicationCacheHost.cpp35
-rw-r--r--WebKit/chromium/src/ApplicationCacheHostInternal.h12
-rw-r--r--WebKit/chromium/src/AssertMatchingEnums.cpp14
-rw-r--r--WebKit/chromium/src/ContextMenuClientImpl.cpp3
-rw-r--r--WebKit/chromium/src/EditorClientImpl.cpp32
-rw-r--r--WebKit/chromium/src/GLES2Context.cpp49
-rw-r--r--WebKit/chromium/src/IDBCallbacksProxy.cpp7
-rw-r--r--WebKit/chromium/src/IDBCallbacksProxy.h5
-rwxr-xr-xWebKit/chromium/src/IDBObjectStoreProxy.cpp17
-rwxr-xr-xWebKit/chromium/src/IDBObjectStoreProxy.h18
-rw-r--r--WebKit/chromium/src/NotificationPresenterImpl.cpp9
-rw-r--r--WebKit/chromium/src/NotificationPresenterImpl.h5
-rw-r--r--WebKit/chromium/src/SharedWorkerRepository.cpp2
-rw-r--r--WebKit/chromium/src/WebDataSourceImpl.cpp2
-rw-r--r--WebKit/chromium/src/WebDevToolsAgentImpl.cpp9
-rw-r--r--WebKit/chromium/src/WebDevToolsAgentImpl.h2
-rw-r--r--WebKit/chromium/src/WebFrameImpl.cpp41
-rw-r--r--WebKit/chromium/src/WebFrameImpl.h7
-rw-r--r--WebKit/chromium/src/WebIDBCallbacksImpl.cpp8
-rw-r--r--WebKit/chromium/src/WebIDBCallbacksImpl.h1
-rw-r--r--WebKit/chromium/src/WebIDBKey.cpp118
-rwxr-xr-xWebKit/chromium/src/WebIDBObjectStoreImpl.cpp17
-rwxr-xr-xWebKit/chromium/src/WebIDBObjectStoreImpl.h18
-rw-r--r--WebKit/chromium/src/WebInputElement.cpp25
-rw-r--r--WebKit/chromium/src/WebNode.cpp5
-rw-r--r--WebKit/chromium/src/WebPluginContainerImpl.cpp25
-rw-r--r--WebKit/chromium/src/WebPluginContainerImpl.h3
-rw-r--r--WebKit/chromium/src/WebPopupMenuImpl.cpp3
-rw-r--r--WebKit/chromium/src/WebSerializedScriptValue.cpp5
-rw-r--r--WebKit/chromium/src/WebSharedWorkerImpl.cpp2
-rw-r--r--WebKit/chromium/src/WebURLLoadTiming.cpp192
-rw-r--r--WebKit/chromium/src/WebURLRequest.cpp10
-rw-r--r--WebKit/chromium/src/WebURLResponse.cpp35
-rw-r--r--WebKit/chromium/src/WebViewImpl.cpp50
-rw-r--r--WebKit/chromium/src/WebWorkerBase.cpp2
-rw-r--r--WebKit/chromium/src/WebWorkerClientImpl.cpp2
-rw-r--r--WebKit/chromium/src/WebWorkerImpl.cpp2
-rw-r--r--WebKit/chromium/src/js/DebuggerScript.js2
-rw-r--r--WebKit/chromium/src/js/Tests.js56
-rw-r--r--WebKit/chromium/tests/DragImageTest.cpp21
-rw-r--r--WebKit/chromium/tests/PopupMenuTest.cpp15
-rw-r--r--WebKit/efl/EWebLauncher/main.c71
-rw-r--r--WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp10
-rw-r--r--WebKit/efl/WebCoreSupport/ChromeClientEfl.h2
-rw-r--r--WebKit/efl/WebCoreSupport/ContextMenuClientEfl.cpp13
-rw-r--r--WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp74
-rw-r--r--WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h5
-rw-r--r--WebKit/efl/ewk/ewk_frame.cpp117
-rw-r--r--WebKit/efl/ewk/ewk_frame.h25
-rw-r--r--WebKit/efl/ewk/ewk_private.h120
-rw-r--r--WebKit/efl/ewk/ewk_view.cpp215
-rw-r--r--WebKit/efl/ewk/ewk_view.h8
-rw-r--r--WebKit/gtk/ChangeLog75
-rw-r--r--WebKit/gtk/NEWS10
-rw-r--r--WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp2
-rw-r--r--WebKit/gtk/tests/testwebview.c5
-rw-r--r--WebKit/gtk/webkit/webkitprivate.h22
-rw-r--r--WebKit/gtk/webkit/webkitwebview.cpp157
-rw-r--r--WebKit/mac/ChangeLog142
-rw-r--r--WebKit/mac/Configurations/FeatureDefines.xcconfig4
-rw-r--r--WebKit/mac/History/WebBackForwardList.mm10
-rw-r--r--WebKit/mac/Misc/WebCache.mm4
-rw-r--r--WebKit/mac/Misc/WebNSObjectExtras.h1
-rw-r--r--WebKit/mac/Misc/WebNSObjectExtras.mm5
-rw-r--r--WebKit/mac/Misc/WebUserContentURLPattern.h1
-rw-r--r--WebKit/mac/Misc/WebUserContentURLPattern.mm6
-rw-r--r--WebKit/mac/Panels/WebPanelAuthenticationHandler.m4
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginStream.h (renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.h)9
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginStream.mm (renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm)22
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginView.mm2
-rw-r--r--WebKit/mac/WebCoreSupport/WebChromeClient.h1
-rw-r--r--WebKit/mac/WebCoreSupport/WebChromeClient.mm5
-rw-r--r--WebKit/mac/WebView/WebPDFDocumentExtras.mm2
-rw-r--r--WebKit/mac/WebView/WebView.mm26
-rw-r--r--WebKit/mac/WebView/WebViewPrivate.h9
-rw-r--r--WebKit/qt/Api/qwebframe.cpp8
-rw-r--r--WebKit/qt/Api/qwebhistory.cpp13
-rw-r--r--WebKit/qt/Api/qwebpage.cpp7
-rw-r--r--WebKit/qt/Api/qwebsettings.cpp9
-rw-r--r--WebKit/qt/ChangeLog202
-rw-r--r--WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp24
-rw-r--r--WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h7
-rw-r--r--WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp8
-rw-r--r--WebKit/qt/WebCoreSupport/InspectorClientQt.cpp4
-rw-r--r--WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp17
-rw-r--r--WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h7
-rw-r--r--WebKit/qt/declarative/declarative.pro1
-rw-r--r--WebKit/qt/tests/qwebframe/tst_qwebframe.cpp74
-rw-r--r--WebKit/qt/tests/qwebpage/tst_qwebpage.cpp3
-rw-r--r--WebKit/win/ChangeLog113
-rw-r--r--WebKit/win/Interfaces/IWebUserContentURLPattern.idl1
-rw-r--r--WebKit/win/Interfaces/IWebView.idl3
-rw-r--r--WebKit/win/Interfaces/WebKit.idl1
-rw-r--r--WebKit/win/WebCoreSupport/WebChromeClient.cpp12
-rw-r--r--WebKit/win/WebCoreSupport/WebChromeClient.h1
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.def136
-rwxr-xr-xWebKit/win/WebKit.vcproj/WebKit.make2
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.sln2
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.vcproj252
-rw-r--r--WebKit/win/WebKit.vcproj/deleteButton.pngbin2231 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/deleteButtonPressed.pngbin2323 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/fsVideoAudioVolumeHigh.pngbin3026 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/fsVideoAudioVolumeLow.pngbin2913 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/fsVideoExitFullscreen.pngbin2940 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/fsVideoPause.pngbin2832 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/fsVideoPlay.pngbin2906 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/missingImage.pngbin456 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/nullplugin.pngbin1286 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panEastCursor.pngbin123 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/panIcon.pngbin175 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panNorthCursor.pngbin125 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panNorthEastCursor.pngbin209 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panNorthWestCursor.pngbin174 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panSouthCursor.pngbin128 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panSouthEastCursor.pngbin166 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panSouthWestCursor.pngbin177 -> 0 bytes
-rwxr-xr-xWebKit/win/WebKit.vcproj/panWestCursor.pngbin122 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchCancel.pngbin908 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchCancelPressed.pngbin895 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchMagnifier.pngbin1028 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/searchMagnifierResults.pngbin1224 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/textAreaResizeCorner.pngbin195 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/verticalTextCursor.pngbin120 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/zoomInCursor.pngbin199 -> 0 bytes
-rw-r--r--WebKit/win/WebKit.vcproj/zoomOutCursor.pngbin182 -> 0 bytes
-rw-r--r--WebKit/win/WebUserContentURLPattern.cpp12
-rw-r--r--WebKit/win/WebUserContentURLPattern.h1
-rw-r--r--WebKit/win/WebView.cpp9
-rw-r--r--WebKit/wx/ChangeLog7
-rw-r--r--WebKit/wx/WebView.cpp2
-rw-r--r--WebKitLibraries/ChangeLog58
-rw-r--r--WebKitLibraries/libWebKitSystemInterfaceLeopard.abin1578600 -> 1637632 bytes
-rw-r--r--WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.abin1306380 -> 1347700 bytes
-rw-r--r--WebKitLibraries/libWebKitSystemInterfaceTiger.abin605216 -> 605256 bytes
-rw-r--r--WebKitLibraries/win/tools/vsprops/common.vsprops2
-rw-r--r--WebKitLibraries/win/tools/vsprops/release.vsprops1
-rw-r--r--WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json6
-rw-r--r--WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg2
-rw-r--r--WebKitTools/ChangeLog1321
-rw-r--r--WebKitTools/DumpRenderTree/DumpRenderTree.gypi6
-rw-r--r--WebKitTools/DumpRenderTree/DumpRenderTree.sln2
-rw-r--r--WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj17
-rw-r--r--WebKitTools/DumpRenderTree/LayoutTestController.cpp10
-rw-r--r--WebKitTools/DumpRenderTree/LayoutTestController.h4
-rw-r--r--WebKitTools/DumpRenderTree/PixelDumpSupport.cpp2
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp (renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp)9
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.h (renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h)19
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm102
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.cpp (renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp)0
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.h (renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h)0
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/mac/Info.plist (renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist)0
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/main.cpp (renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp)191
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def (renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def)0
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc (renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc)0
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj (renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj)55
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def (renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def)0
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/resource.h (renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/resource.h)0
-rw-r--r--WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp190
-rw-r--r--WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.h8
-rw-r--r--WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp155
-rw-r--r--WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.h87
-rw-r--r--WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp36
-rw-r--r--WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.h72
-rw-r--r--WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.cpp116
-rw-r--r--WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.h79
-rw-r--r--WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp25
-rw-r--r--WebKitTools/DumpRenderTree/chromium/LayoutTestController.h1
-rw-r--r--WebKitTools/DumpRenderTree/chromium/TestShell.cpp41
-rw-r--r--WebKitTools/DumpRenderTree/chromium/TestShell.h23
-rwxr-xr-xWebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.cpp5
-rw-r--r--WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.h1
-rwxr-xr-xWebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp26
-rw-r--r--WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp15
-rw-r--r--WebKitTools/DumpRenderTree/chromium/config.h4
-rw-r--r--WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp15
-rw-r--r--WebKitTools/DumpRenderTree/gtk/ImageDiff.cpp234
-rw-r--r--WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp4
-rw-r--r--WebKitTools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp50
-rw-r--r--WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm4
-rw-r--r--WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm8
-rw-r--r--WebKitTools/DumpRenderTree/mac/ResourceLoadDelegate.mm4
-rw-r--r--WebKitTools/DumpRenderTree/mac/UIDelegate.mm6
-rw-r--r--WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp21
-rw-r--r--WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h4
-rw-r--r--WebKitTools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro11
-rw-r--r--WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp41
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj18
-rw-r--r--WebKitTools/DumpRenderTree/win/ImageDiff.vcproj4
-rw-r--r--WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp4
-rw-r--r--WebKitTools/DumpRenderTree/win/ResourceLoadDelegate.cpp14
-rw-r--r--WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp266
-rwxr-xr-xWebKitTools/DumpRenderTree/win/UIDelegate.cpp26
-rwxr-xr-xWebKitTools/DumpRenderTree/win/UIDelegate.h10
-rw-r--r--WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp7
-rw-r--r--WebKitTools/GNUmakefile.am46
-rw-r--r--WebKitTools/MiniBrowser/Configurations/Base.xcconfig65
-rw-r--r--WebKitTools/MiniBrowser/Configurations/DebugRelease.xcconfig40
-rw-r--r--WebKitTools/MiniBrowser/Configurations/MiniBrowser.xcconfig26
-rw-r--r--WebKitTools/MiniBrowser/Configurations/WebBundle.xcconfig26
-rw-r--r--WebKitTools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj146
-rw-r--r--WebKitTools/MiniBrowser/mac/BrowserStatisticsWindowController.m2
-rw-r--r--WebKitTools/MiniBrowser/mac/BrowserWindow.xib (renamed from WebKitTools/MiniBrowser/mac/English.lproj/BrowserWindow.xib)0
-rw-r--r--WebKitTools/MiniBrowser/mac/BrowserWindowController.m2
-rw-r--r--WebKitTools/MiniBrowser/mac/English.lproj/InfoPlist.strings2
-rw-r--r--WebKitTools/MiniBrowser/mac/Info.plist (renamed from WebKitTools/MiniBrowser/mac/MiniBrowser-Info.plist)0
-rw-r--r--WebKitTools/MiniBrowser/mac/MainMenu.xib (renamed from WebKitTools/MiniBrowser/mac/English.lproj/MainMenu.xib)0
-rw-r--r--WebKitTools/MiniBrowser/mac/WebBundle/Info.plist (renamed from WebKitTools/MiniBrowser/WebBundle-Info.plist)0
-rw-r--r--WebKitTools/MiniBrowser/mac/WebBundle/WebBundleMain.m4
-rw-r--r--WebKitTools/MiniBrowser/qt/BrowserWindow.cpp118
-rw-r--r--WebKitTools/MiniBrowser/qt/BrowserWindow.h72
-rw-r--r--WebKitTools/MiniBrowser/qt/MiniBrowser.pro45
-rw-r--r--WebKitTools/MiniBrowser/qt/main.cpp42
-rw-r--r--WebKitTools/QtTestBrowser/main.cpp1
-rw-r--r--WebKitTools/QtTestBrowser/mainwindow.cpp5
-rw-r--r--WebKitTools/QtTestBrowser/mainwindow.h1
-rw-r--r--WebKitTools/Scripts/VCSUtils.pm75
-rwxr-xr-xWebKitTools/Scripts/build-webkit5
-rwxr-xr-xWebKitTools/Scripts/check-header-includes103
-rwxr-xr-xWebKitTools/Scripts/check-webkit-style2
-rwxr-xr-xWebKitTools/Scripts/ensure-valid-python2
-rwxr-xr-xWebKitTools/Scripts/old-run-webkit-tests87
-rw-r--r--WebKitTools/Scripts/run-qtwebkit-tests358
-rw-r--r--WebKitTools/Scripts/webkitdirs.pm70
-rw-r--r--WebKitTools/Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl27
-rw-r--r--WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl400
-rw-r--r--WebKitTools/Scripts/webkitpy/common/checkout/api.py14
-rw-r--r--WebKitTools/Scripts/webkitpy/common/checkout/api_unittest.py12
-rw-r--r--WebKitTools/Scripts/webkitpy/common/checkout/scm.py141
-rw-r--r--WebKitTools/Scripts/webkitpy/common/checkout/scm_unittest.py168
-rw-r--r--WebKitTools/Scripts/webkitpy/common/config/committers.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/rietveld.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/executive.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/user.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py3
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py52
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py282
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py126
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/base.py5
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/qt.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/test.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py15
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py10
-rwxr-xr-xWebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py4
-rw-r--r--WebKitTools/Scripts/webkitpy/style/optparser.py21
-rw-r--r--WebKitTools/Scripts/webkitpy/style_references.py4
-rw-r--r--WebKitTools/Scripts/webkitpy/thirdparty/__init__.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/commandtest.py5
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/download.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py4
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/queues.py13
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/upload.py9
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/upload_unittest.py6
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/mocktool.py12
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/multicommandtool.py12
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/multicommandtool_unittest.py24
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/abstractstep.py12
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/checkstyle.py6
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/checkstyle_unittest.py46
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py5
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/commit.py40
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/createbug.py6
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/options.py10
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py9
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog_unittest.py5
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/steps_unittest.py9
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer_unittest.py5
-rw-r--r--WebKitTools/WebKitAPITest/TestsController.cpp2
-rw-r--r--WebKitTools/WebKitAPITest/WebKitAPITest.vcproj4
-rw-r--r--WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp6
-rw-r--r--WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.h2
-rw-r--r--WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp66
-rw-r--r--WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h10
-rw-r--r--WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp108
-rw-r--r--WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.h13
-rw-r--r--WebKitTools/WebKitTestRunner/PlatformWebView.h1
-rw-r--r--WebKitTools/WebKitTestRunner/TestInvocation.cpp29
-rw-r--r--WebKitTools/WebKitTestRunner/TestInvocation.h1
-rw-r--r--WebKitTools/WebKitTestRunner/WebKitTestRunnerPrefix.h8
-rw-r--r--WebKitTools/WebKitTestRunner/mac/PlatformWebViewMac.mm5
-rw-r--r--WebKitTools/WebKitTestRunner/win/PlatformWebViewWin.cpp51
-rw-r--r--WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp37
-rw-r--r--WebKitTools/WebKitTestRunner/win/TestInvocationWin.cpp35
-rw-r--r--WebKitTools/WebKitTestRunner/win/WebKitTestRunner.sln26
-rw-r--r--WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj392
-rw-r--r--WebKitTools/WebKitTestRunner/win/main.cpp34
-rw-r--r--WebKitTools/wx/build/settings.py19
914 files changed, 38141 insertions, 7484 deletions
diff --git a/JavaScriptCore/API/JSCallbackObject.h b/JavaScriptCore/API/JSCallbackObject.h
index dfb9fa2..cf42818 100644
--- a/JavaScriptCore/API/JSCallbackObject.h
+++ b/JavaScriptCore/API/JSCallbackObject.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2007 Eric Seidel <eric@webkit.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,7 @@
#include "JSObjectRef.h"
#include "JSValueRef.h"
#include "JSObject.h"
+#include <wtf/PassOwnPtr.h>
namespace JSC {
@@ -56,7 +57,7 @@ struct JSCallbackObjectData {
void setPrivateProperty(const Identifier& propertyName, JSValue value)
{
if (!m_privateProperties)
- m_privateProperties.set(new JSPrivatePropertyMap);
+ m_privateProperties = adoptPtr(new JSPrivatePropertyMap);
m_privateProperties->setPrivateProperty(propertyName, value);
}
diff --git a/JavaScriptCore/API/JSCallbackObjectFunctions.h b/JavaScriptCore/API/JSCallbackObjectFunctions.h
index 3a15bbe..9a3e448 100644
--- a/JavaScriptCore/API/JSCallbackObjectFunctions.h
+++ b/JavaScriptCore/API/JSCallbackObjectFunctions.h
@@ -52,7 +52,7 @@ inline JSCallbackObject<Base>* JSCallbackObject<Base>::asCallbackObject(JSValue
template <class Base>
JSCallbackObject<Base>::JSCallbackObject(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, JSClassRef jsClass, void* data)
: Base(globalObject, structure)
- , m_callbackObjectData(new JSCallbackObjectData(data, jsClass))
+ , m_callbackObjectData(adoptPtr(new JSCallbackObjectData(data, jsClass)))
{
init(exec);
}
@@ -62,7 +62,7 @@ JSCallbackObject<Base>::JSCallbackObject(ExecState* exec, JSGlobalObject* global
template <class Base>
JSCallbackObject<Base>::JSCallbackObject(JSClassRef jsClass, NonNullPassRefPtr<Structure> structure)
: Base(structure)
- , m_callbackObjectData(new JSCallbackObjectData(0, jsClass))
+ , m_callbackObjectData(adoptPtr(new JSCallbackObjectData(0, jsClass)))
{
ASSERT(Base::isGlobalObject());
init(static_cast<JSGlobalObject*>(this)->globalExec());
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index c6cbd6d..0acccc8 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,827 @@
+2010-07-09 Darin Adler <darin@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ String to number coercion is not spec compliant
+ https://bugs.webkit.org/show_bug.cgi?id=31349
+
+ ToNumber should ignore NBSP (\u00a0)
+ https://bugs.webkit.org/show_bug.cgi?id=25490
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::parseIntOverflow): Added a version that works on UChar.
+ * runtime/JSGlobalObjectFunctions.h: Ditto.
+
+ * runtime/UString.cpp:
+ (JSC::isInfinity): Added helper functions.
+ (JSC::UString::toDouble): Use isStrWhiteSpace instead of
+ isSASCIISpace to define what we should skip. Got rid of the
+ code that used CString and UTF8String, instead processing the
+ UChar of the string directly, except for when we call strtod.
+ For strtod, use our own home-grown conversion function that
+ does not try to do any UTF-16 processing. Tidied up the logic
+ a bit as well.
+
+2010-07-12 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] make dist is broken because of missing headers and other miscellaneous reasons
+ https://bugs.webkit.org/show_bug.cgi?id=42107
+
+ * GNUmakefile.am: Add missing header to the sources list.
+
+2010-07-12 Adam Roben <aroben@apple.com>
+
+ Stop generating stripped symbols for Release builds
+
+ It turns out we can strip the symbols after-the-fact using PDBCopy.
+
+ Fixes <http://webkit.org/b/42085>.
+
+ Reviewed by Steve Falkenburg.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ Removed the pre-link event, which just created the public\sym
+ directory.
+
+2010-07-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Add WARN_UNUSED_RETURN to the smart pointer "leak" member functions
+ https://bugs.webkit.org/show_bug.cgi?id=42086
+
+ * wtf/OwnPtr.h:
+ * wtf/PassOwnPtr.h:
+ * wtf/PassRefPtr.h:
+ (WTF::PassRefPtr::releaseRef):
+ (WTF::NonNullPassRefPtr::leakRef):
+ (WTF::NonNullPassRefPtr::releaseRef):
+ * wtf/RetainPtr.h:
+ (WTF::RetainPtr::releaseRef):
+
+2010-07-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ HAVE_COMPUTED_GOTO is dependent on the interpreter being enabled
+ https://bugs.webkit.org/show_bug.cgi?id=42039
+
+ Separate the existence of computed goto support in the compiler
+ from whether or not we are using the interpreter. All the current
+ HAVE(COMPUTED_GOTO) guards are for the interpreter, but I'd like
+ the option of using it elsewhere. The interpreter now uses
+ ENABLE(COMPUTED_GOTO_INTERPRETER)
+
+ * bytecode/Instruction.h:
+ (JSC::Instruction::Instruction):
+ * bytecode/Opcode.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::Interpreter):
+ (JSC::Interpreter::isOpcode):
+ (JSC::Interpreter::privateExecute):
+ * interpreter/Interpreter.h:
+ (JSC::Interpreter::getOpcode):
+ (JSC::Interpreter::getOpcodeID):
+ * wtf/Platform.h:
+
+2010-07-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Remove switches from inner expression loops in the parser
+ https://bugs.webkit.org/show_bug.cgi?id=42035
+
+ Use bitmasks and flags on the token types to identify unary and
+ binary operators, rather than switching on the token type to
+ identify them.
+
+ * parser/JSParser.cpp:
+ (JSC::isUnaryOp):
+ (JSC::JSParser::isBinaryOperator):
+ * parser/JSParser.h:
+ (JSC::):
+
+2010-07-09 Leon Clarke <leonclarke@google.com>
+
+ Reviewed by Adam Barth.
+
+ add support for link prefetching
+ https://bugs.webkit.org/show_bug.cgi?id=3652
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-07-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Tidy up lexer token ids
+ https://bugs.webkit.org/show_bug.cgi?id=42014
+
+ Stop using character literals to identify single character tokens
+ and instead use symbolic names for all tokens.
+
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::makeBinaryNode):
+ * parser/JSParser.cpp:
+ (JSC::JSParser::consume):
+ (JSC::JSParser::match):
+ (JSC::JSParser::autoSemiColon):
+ (JSC::JSParser::JSParser):
+ (JSC::JSParser::parseProgram):
+ (JSC::JSParser::allowAutomaticSemicolon):
+ (JSC::JSParser::parseDoWhileStatement):
+ (JSC::JSParser::parseWhileStatement):
+ (JSC::JSParser::parseVarDeclarationList):
+ (JSC::JSParser::parseConstDeclarationList):
+ (JSC::JSParser::parseForStatement):
+ (JSC::JSParser::parseReturnStatement):
+ (JSC::JSParser::parseWithStatement):
+ (JSC::JSParser::parseSwitchStatement):
+ (JSC::JSParser::parseSwitchClauses):
+ (JSC::JSParser::parseSwitchDefaultClause):
+ (JSC::JSParser::parseTryStatement):
+ (JSC::JSParser::parseDebuggerStatement):
+ (JSC::JSParser::parseStatement):
+ (JSC::JSParser::parseFormalParameters):
+ (JSC::JSParser::parseFunctionInfo):
+ (JSC::JSParser::parseExpressionOrLabelStatement):
+ (JSC::JSParser::parseIfStatement):
+ (JSC::JSParser::parseExpression):
+ (JSC::JSParser::parseAssignmentExpression):
+ (JSC::JSParser::parseConditionalExpression):
+ (JSC::isUnaryOp):
+ (JSC::JSParser::isBinaryOperator):
+ (JSC::JSParser::parseBinaryExpression):
+ (JSC::JSParser::parseProperty):
+ (JSC::JSParser::parseObjectLiteral):
+ (JSC::JSParser::parseStrictObjectLiteral):
+ (JSC::JSParser::parseArrayLiteral):
+ (JSC::JSParser::parsePrimaryExpression):
+ (JSC::JSParser::parseArguments):
+ (JSC::JSParser::parseMemberExpression):
+ (JSC::JSParser::parseUnaryExpression):
+ * parser/JSParser.h:
+ (JSC::):
+ * parser/Lexer.cpp:
+ (JSC::):
+ (JSC::Lexer::lex):
+ * parser/Lexer.h:
+
+2010-07-09 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 42015 - Enable JSValue32_64 on ARMv7
+
+ * Configurations/JavaScriptCore.xcconfig:
+ * jit/JIT.h:
+ * jit/JITStubs.cpp:
+ * wtf/Platform.h:
+
+2010-07-09 Kenneth Russell <kbr@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ Assertion failure in String::utf8() for certain invalid UTF16 inputs
+ https://bugs.webkit.org/show_bug.cgi?id=41983
+
+ * wtf/text/WTFString.cpp:
+ (WebCore::String::utf8):
+ - Fixed assertion when sourceExhausted is returned from convertUTF16ToUTF8.
+
+2010-07-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove a couple of excess writes from the lexer
+ https://bugs.webkit.org/show_bug.cgi?id=41981
+
+ Remove a couple of fields from JSTokenInfo, and rename the remaining ones
+ to something more accurate
+
+ * parser/JSParser.cpp:
+ (JSC::JSParser::next):
+ (JSC::JSParser::tokenStart):
+ (JSC::JSParser::tokenLine):
+ (JSC::JSParser::tokenEnd):
+ * parser/JSParser.h:
+ (JSC::JSTokenInfo::JSTokenInfo):
+ * parser/Lexer.cpp:
+ (JSC::Lexer::lex):
+
+2010-07-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Property declarations in an object literal should not consider the prototype chain when being added to the new object
+ https://bugs.webkit.org/show_bug.cgi?id=41929
+
+ To fix this all we need to do is ensure that all new properties are
+ added with putDirect rather than a fully generic call to put. This
+ is safe as an object literal is by definition going to produce a
+ completely normal object.
+
+ Rather than duplicating all the put_by_id logic we add an additional
+ flag to op_put_by_id to indicate it should be using putDirect. In
+ the interpreter this adds a runtime branch, but in the jit this is
+ essentially free as the branch is taken at compile time. This does
+ actually improve object literal creation time even in the interpreter
+ as we no longer need to walk the prototype chain to verify that the
+ cached put is safe.
+
+ We still emit normal put_by_id code when emitting __proto__ as we want
+ to get the correct handling for changing the prototype.
+
+ Sunspider claims this is a 0.7% speedup which is conceivably real due
+ to the performance improvement in object literals, but I suspect its
+ really just the result of code motion.
+
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitPutById):
+ (JSC::BytecodeGenerator::emitDirectPutById):
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::PropertyListNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.h:
+ (JSC::JIT::compilePutByIdTransition):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::emitSlow_op_put_by_id):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::patchPutByIdReplace):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emitSlow_op_put_by_id):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::patchPutByIdReplace):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSObject.h:
+ (JSC::JSObject::putDirect):
+ (JSC::JSValue::putDirect):
+ * runtime/JSValue.h:
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ String.prototype methods should CheckObjectCoercible (test this is not null or undefined).
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncCharAt):
+ (JSC::stringProtoFuncCharCodeAt):
+ (JSC::stringProtoFuncConcat):
+ (JSC::stringProtoFuncIndexOf):
+ (JSC::stringProtoFuncLastIndexOf):
+ (JSC::stringProtoFuncMatch):
+ (JSC::stringProtoFuncSearch):
+ (JSC::stringProtoFuncSlice):
+ (JSC::stringProtoFuncSplit):
+ (JSC::stringProtoFuncSubstr):
+ (JSC::stringProtoFuncSubstring):
+ (JSC::stringProtoFuncToLowerCase):
+ (JSC::stringProtoFuncToUpperCase):
+ (JSC::stringProtoFuncLocaleCompare):
+ (JSC::trimString):
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Date.prototype.toJSON takes one argument, report this correctly.
+
+ * runtime/DatePrototype.cpp:
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ RegExp's prototype should be an object of type RegExp.
+
+ * runtime/RegExpPrototype.cpp:
+ (JSC::RegExpPrototype::RegExpPrototype):
+ * runtime/RegExpPrototype.h:
+
+2010-07-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ JavaScript parser violates ECMA automatic semicolon insertion rule
+ https://bugs.webkit.org/show_bug.cgi?id=41844
+
+ Remove (very) old and bogus logic that automatically inserted a semicolon
+ at the end of a script's source.
+
+ * parser/Lexer.cpp:
+ (JSC::Lexer::lex):
+
+2010-07-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Anders Carlson.
+
+ Tidy up the lexer
+
+ Remove some of the old yacc/lex-isms still present in the lexer
+
+ * parser/JSParser.h:
+ (JSC::):
+ * parser/Lexer.cpp:
+ (JSC::Lexer::parseString):
+ (JSC::Lexer::lex):
+ * parser/Lexer.h:
+
+2010-07-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Make object-literal parsing conformant with the spec.
+ https://bugs.webkit.org/show_bug.cgi?id=41892
+
+ Bring our parsing of object literals into conformance with the ES5 spec.
+ Basically disallow conflicting accessor vs. normal property definitions
+ The bulk of this patch is just fiddling to maintain performance.
+
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::createGetterOrSetterProperty):
+ (JSC::ASTBuilder::createProperty):
+ (JSC::ASTBuilder::getName):
+ (JSC::ASTBuilder::getType):
+ * parser/JSParser.cpp:
+ (JSC::jsParse):
+ (JSC::JSParser::JSParser):
+ (JSC::JSParser::parseProperty):
+ (JSC::JSParser::parseObjectLiteral):
+ (JSC::JSParser::parseStrictObjectLiteral):
+ * parser/JSParser.h:
+ * parser/Lexer.cpp:
+ (JSC::Lexer::clear):
+ * parser/Lexer.h:
+ (JSC::Lexer::currentOffset):
+ (JSC::Lexer::setOffset):
+ Add logic to allow us to roll the lexer back in the input stream.
+ * parser/Nodes.h:
+ (JSC::PropertyNode::):
+ (JSC::PropertyNode::type):
+ * parser/Parser.cpp:
+ (JSC::Parser::parse):
+ * parser/SourceProvider.h:
+ (JSC::SourceProvider::SourceProvider):
+ (JSC::SourceProvider::isValid):
+ (JSC::SourceProvider::setValid):
+ SourceProvider now records whether the input text
+ has already been validated.
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::SyntaxChecker):
+ (JSC::SyntaxChecker::Property::Property):
+ (JSC::SyntaxChecker::Property::operator!):
+ (JSC::SyntaxChecker::createProperty):
+ (JSC::SyntaxChecker::createPropertyList):
+ (JSC::SyntaxChecker::createGetterOrSetterProperty):
+ The SyntaxChecker mode now needs to maintain a bit more information
+ to ensure that we can validate object literals correctly.
+
+2010-07-08 Darin Adler <darin@apple.com>
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::sharedInstance): Fix typo.
+
+2010-07-08 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fix assertion seen on the Leopard buildbot.
+ The single shared instance of JSGlobalData was not being
+ adopted after creation.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::sharedInstance): Do adoptRef and then leakRef.
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ BOMs are whitespace.
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::isStrWhiteSpace):
+
+2010-07-08 Martin Robinson <mrobinson@igalia.com>
+
+ Unreviewed.
+
+ Try fix the GTK+ build by touching this file.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ GTK build fix take two.
+
+ * GNUmakefile.am:
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ GTK build fix.
+
+ * GNUmakefile.am:
+
+2010-07-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41641
+
+ Update compile flags to allow use of ExecutableAllocatorFixedVMPool on platforms
+ other than x86-64 (this may be useful on 32-bit platforms, too).
+
+ Simplify ifdefs by dividing into thwo broad allocation strategies
+ (ENABLE_EXECUTABLE_ALLOCATOR_FIXED & ENABLE_EXECUTABLE_ALLOCATOR_DEMAND).
+
+ Rename constant used in the code to have names descriptive of their purpose,
+ rather than their specific value on a given platform.
+
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutableAllocator::reprotectRegion):
+ (JSC::ExecutableAllocator::cacheFlush):
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
+ (JSC::FixedVMPoolAllocator::free):
+ (JSC::ExecutablePool::systemAlloc):
+ * jit/ExecutableAllocatorPosix.cpp:
+ * jit/ExecutableAllocatorSymbian.cpp:
+ * jit/ExecutableAllocatorWin.cpp:
+ * wtf/Platform.h:
+
+2010-07-08 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ Silence a few noisy build rules.
+
+ * GNUmakefile.am:
+
+2010-07-08 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62765.
+ http://trac.webkit.org/changeset/62765
+ https://bugs.webkit.org/show_bug.cgi?id=41840
+
+ All jscore and layout tests crash on Qt bot (Requested by Ossy
+ on #webkit).
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::initializeScavenger):
+ (WTF::TCMalloc_PageHeap::signalScavenger):
+ (WTF::TCMalloc_PageHeap::scavengerThread):
+
+2010-07-08 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Oliver Hunt.
+
+ Interpreter: Crash in op_load_varargs on 64-bit
+ https://bugs.webkit.org/show_bug.cgi?id=41795
+
+ Added missing cast of argCount to int32_t in op_load_varargs.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2010-07-08 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Make FastMalloc more portable.
+ https://bugs.webkit.org/show_bug.cgi?id=41790
+
+ Use WTF::Mutex instead of pthread_mutex_t and
+ replace pthread_cond_t with WTF::ThreadCondition.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::initializeScavenger):
+ (WTF::TCMalloc_PageHeap::signalScavenger):
+ (WTF::TCMalloc_PageHeap::scavengerThread):
+
+2010-07-08 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Remove needless #include <fcntl.h> from TCSystemAlloc.cpp.
+ https://bugs.webkit.org/show_bug.cgi?id=41777
+
+ * wtf/TCSystemAlloc.cpp:
+
+2010-07-07 Darin Adler <darin@apple.com>
+
+ Fixed build in configurations like PowerPC.
+
+ * runtime/RegExpConstructor.cpp: Added include of PassOwnPtr.h.
+ * runtime/RegExpObject.cpp: Ditto.
+ * wtf/SizeLimits.cpp: Changed compile time assertion to work
+ even on platforms where two bool members do not end up taking
+ the same size as one int member!
+
+2010-07-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Lazy mode of parser allows invalid syntax in object literals.
+ https://bugs.webkit.org/show_bug.cgi?id=41809
+
+ Make the parser itself validate getter and setter syntax rather
+ than offloading it to the AST builder.
+
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::createGetterOrSetterProperty):
+ * parser/JSParser.cpp:
+ (JSC::JSParser::parseProperty):
+
+2010-07-07 Dumitru Daniliuc <dumi@chromium.org>
+
+ Reviewed by Adam Roben.
+
+ Revert r62689.
+ https://bugs.webkit.org/show_bug.cgi?id=41804
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::freeBlocks):
+
+2010-07-07 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Sam Weinig.
+
+ Add reverseFind to Vector and deploy in HTML5 parser
+ https://bugs.webkit.org/show_bug.cgi?id=41778
+
+ This method seems generally useful. I'm slightly surprised we don't
+ have it already.
+
+ * wtf/Vector.h:
+ (WTF::::reverseFind):
+
+2010-07-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Turn on adoptRef assertion for RefCounted
+ https://bugs.webkit.org/show_bug.cgi?id=41547
+
+ * wtf/CrossThreadRefCounted.h: Fixed include style. Includes of other
+ WTF headers should use "" includes; consistent in most WTF headers.
+ Added a call to relaxAdoptionRequirement.
+
+ * wtf/RefCounted.h: Fixed include style. Removed LOOSE_REF_COUNTED.
+ Added relaxAdoptionRequirement.
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Try to fix the Windows build.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::freeBlocks):
+
+2010-07-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ More OwnPtr work
+ https://bugs.webkit.org/show_bug.cgi?id=41727
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty): Use adoptPtr.
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::JSCallbackObject::JSCallbackObject): Ditto.
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock): Ditto.
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::createRareDataIfNecessary): Ditto.
+ * parser/Nodes.cpp:
+ (JSC::ScopeNode::ScopeNode): Ditto.
+ * parser/ParserArena.cpp:
+ (JSC::ParserArena::ParserArena): Ditto.
+ * runtime/Arguments.h:
+ (JSC::Arguments::Arguments): Ditto.
+ * runtime/Executable.cpp:
+ (JSC::EvalExecutable::compile): Ditto.
+ (JSC::ProgramExecutable::compile): Ditto.
+ (JSC::FunctionExecutable::compileForCall): Ditto.
+ (JSC::FunctionExecutable::compileForConstruct): Ditto.
+ (JSC::FunctionExecutable::reparseExceptionInfo): Ditto.
+ (JSC::EvalExecutable::reparseExceptionInfo): Ditto.
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::sort): Ditto.
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor): Ditto.
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::RegExpObject): Ditto.
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStrings::createSingleCharacterString): Ditto.
+ (JSC::SmallStrings::singleCharacterStringRep): Ditto.
+
+ * wtf/unicode/icu/CollatorICU.cpp:
+ (WTF::Collator::userDefault): Use adoptPtr.
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::ByteCompiler::ByteCompiler): Ditto.
+ (JSC::Yarr::ByteCompiler::compile): Ditto.
+ (JSC::Yarr::ByteCompiler::regexBegin): Ditto.
+ (JSC::Yarr::byteCompileRegex): Ditto.
+ * yarr/RegexInterpreter.h:
+ (JSC::Yarr::BytecodePattern::BytecodePattern): Ditto.
+
+2010-07-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Make clear set the pointer to 0 before deletion
+ https://bugs.webkit.org/show_bug.cgi?id=41727
+
+ * wtf/OwnArrayPtr.h: Changed code so we always set the pointer to its new
+ value before deleting the old one, including in the set function and the
+ clear function. This required changing safeDelete.
+ * wtf/OwnPtr.h: Ditto. Also removed some extra null checks.
+ * wtf/PassOwnPtr.h: Ditto.
+
+ * wtf/PassRefPtr.h: Changed code so we always set the pointer to its new
+ value before deref'ing the old one in the clear function. Also added a
+ leakRef function for NonNullPassRefPtr.
+ * wtf/RefPtr.h: Ditto.
+
+ * wtf/gobject/GOwnPtr.h: More of the same.
+ * wtf/gobject/GRefPtr.h: Ditto.
+
+2010-07-07 Zoltan Herczeg <zherczeg@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Refactored string parsing inside the lexer
+ https://bugs.webkit.org/show_bug.cgi?id=41606
+
+ Does not use goto. Although the last sunspider
+ parse-only tests yields 1.044x speedup, I think the
+ patch can have a slight improvement at most.
+
+ * parser/Lexer.cpp:
+ (JSC::singleEscape):
+ (JSC::Lexer::parseString):
+ (JSC::Lexer::lex):
+ * parser/Lexer.h:
+
+2010-07-06 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Make it possible to have both the JIT and Interpreter available in a single build
+ https://bugs.webkit.org/show_bug.cgi?id=41722
+
+ Separate the concept of !ENABLE(JIT) and ENABLE(INTERPRETER) and make it possible
+ to have both JIT and INTERPRETER enabled at the same time. This doesn't add
+ support for mix mode execution, but it does allow a single build to contain all
+ the code needed to use either the interpreter or the jit.
+
+ If both ENABLE(INTERPRETER) and ENABLE(JIT) are true then setting the environment
+ variable JSC_FORCE_INTERPRETER will force JSC to use the interpreter.
+
+ This patch basically consists of replacing !ENABLE(JIT) with ENABLE(INTERPRETER),
+ or converting #if ENABLE(JIT) ... #else ... into #if ENABLE(JIT) ... #endif
+ #if ENABLE(INTERPRETER), etc. There are also a few functions that need to be
+ renamed to resolve return type ambiguity.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::~CodeBlock):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::returnVPC):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::retrieveLastCaller):
+ * interpreter/Interpreter.h:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::isNumericCompareFunction):
+ * runtime/Executable.cpp:
+ (JSC::EvalExecutable::generateJITCode):
+ (JSC::ProgramExecutable::generateJITCode):
+ (JSC::FunctionExecutable::generateJITCodeForCall):
+ (JSC::FunctionExecutable::generateJITCodeForConstruct):
+ (JSC::FunctionExecutable::reparseExceptionInfo):
+ (JSC::EvalExecutable::reparseExceptionInfo):
+ * runtime/JSFunction.cpp:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSC::JSGlobalData::canUseJIT):
+ * wtf/Platform.h:
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Add adoptPtr and leakPtr functions for OwnPtr and PassOwnPtr
+ https://bugs.webkit.org/show_bug.cgi?id=41320
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Use assignment
+ instead of set since the result of reparseExceptionInfo is now a
+ PassOwnPtr.
+
+ * bytecode/CodeBlock.h: Change extractExceptionInfo to return a
+ PassOwnPtr instead of a raw pointer.
+
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::reparseExceptionInfo): Return a PassOwnPtr.
+ (JSC::EvalExecutable::reparseExceptionInfo): Ditto.
+ (JSC::ProgramExecutable::reparseExceptionInfo): Added. This was
+ in the header before, but it's better to not have it there to reduce
+ header dependencies. Return a PassOwnPtr.
+
+ * runtime/Executable.h: Made reparseExceptionInfo return a PassOwnPtr,
+ and put it in the private sections of classes other than the base class.
+
+ * wtf/MessageQueue.h:
+ (WTF::MessageQueue::append): Use leakPtr instead of release.
+ (WTF::MessageQueue::appendAndCheckEmpty): Ditto.
+ (WTF::MessageQueue::prepend): Ditto.
+
+ * wtf/OwnPtr.h: Tweaked formatting. Changed the release function to return
+ a PassOwnPtr rather than a raw pointer. Added a leakPtr function that
+ returns a raw pointer. Put the constructor that takes a raw pointer and
+ the set function into a section guarded by LOOSE_OWN_PTR. Adapted to the
+ new adoptPtr function from PassOwnPtr.h.
+
+ * wtf/PassOwnPtr.h: Tweaked formatting. Renamed the release function
+ to leakPtr. Added an adoptPtr function that creates a new PassOwnPtr.
+ Put the constructor and assignment operators that take a raw pointer
+ into a section guarded by LOOSE_PASS_OWN_PTR.
+
+2010-07-06 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Darin Adler
+
+ Update comment in StringExtras.h to be more accurate.
+
+ * wtf/StringExtras.h:
+
+2010-07-06 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62511.
+ http://trac.webkit.org/changeset/62511
+ https://bugs.webkit.org/show_bug.cgi?id=41686
+
+ Breaks Linux/64bit compilation (Requested by xan_ on #webkit).
+
+ * jit/ExecutableAllocator.cpp:
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
+ (JSC::FixedVMPoolAllocator::free):
+ (JSC::ExecutablePool::systemAlloc):
+ * jit/ExecutableAllocatorPosix.cpp:
+ (JSC::ExecutableAllocator::reprotectRegion):
+ (JSC::ExecutableAllocator::cacheFlush):
+ * jit/ExecutableAllocatorSymbian.cpp:
+ * jit/ExecutableAllocatorWin.cpp:
+ * wtf/Platform.h:
+
+2010-07-05 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41641
+
+ Update compile flags to allow use of ExecutableAllocatorFixedVMPool on platforms
+ other than x86-64 (this may be useful on 32-bit platforms, too).
+
+ Simplify ifdefs by dividing into thwo broad allocation strategies
+ (ENABLE_EXECUTABLE_ALLOCATOR_FIXED & ENABLE_EXECUTABLE_ALLOCATOR_DEMAND).
+
+ Rename constant used in the code to have names descriptive of their purpose,
+ rather than their specific value on a given platform.
+
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutableAllocator::reprotectRegion):
+ (JSC::ExecutableAllocator::cacheFlush):
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
+ (JSC::FixedVMPoolAllocator::free):
+ (JSC::ExecutablePool::systemAlloc):
+ * jit/ExecutableAllocatorPosix.cpp:
+ * jit/ExecutableAllocatorSymbian.cpp:
+ * jit/ExecutableAllocatorWin.cpp:
+ * wtf/Platform.h:
+
2010-07-05 Steve Block <steveblock@google.com>
Reviewed by Darin Adler.
diff --git a/JavaScriptCore/Configurations/FeatureDefines.xcconfig b/JavaScriptCore/Configurations/FeatureDefines.xcconfig
index 8f86fc3..9a3ec0b 100644
--- a/JavaScriptCore/Configurations/FeatureDefines.xcconfig
+++ b/JavaScriptCore/Configurations/FeatureDefines.xcconfig
@@ -31,6 +31,8 @@
// Set any ENABLE_FEATURE_NAME macro to an empty string to disable that feature.
+ENABLE_LINK_PREFETCH = ;
+
ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(TARGET_MAC_OS_X_VERSION_MAJOR));
ENABLE_3D_CANVAS_1050 = ENABLE_3D_CANVAS;
ENABLE_3D_CANVAS_1060 = ENABLE_3D_CANVAS;
@@ -84,5 +86,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(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_READER) $(ENABLE_FILE_WRITER) $(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_RUBY) $(ENABLE_SANDBOX) $(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);
-
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(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_READER) $(ENABLE_FILE_WRITER) $(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_RUBY) $(ENABLE_SANDBOX) $(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);
diff --git a/JavaScriptCore/Configurations/JavaScriptCore.xcconfig b/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
index 8c2f26d..5db3e00 100644
--- a/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
+++ b/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
@@ -27,7 +27,7 @@
JSVALUE_MODEL = $(JSVALUE_MODEL_$(CURRENT_ARCH));
JSVALUE_MODEL_ = UNKNOWN_JSVALUE_MODEL;
JSVALUE_MODEL_armv6 = 32;
-JSVALUE_MODEL_armv7 = 32;
+JSVALUE_MODEL_armv7 = 32_64;
JSVALUE_MODEL_i386 = 32_64;
JSVALUE_MODEL_ppc = 32_64;
JSVALUE_MODEL_ppc64 = 32;
diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
index aefc4fb..28cff47 100644
--- a/JavaScriptCore/GNUmakefile.am
+++ b/JavaScriptCore/GNUmakefile.am
@@ -423,6 +423,7 @@ javascriptcore_sources += \
JavaScriptCore/wtf/FastAllocBase.h \
JavaScriptCore/wtf/FastMalloc.cpp \
JavaScriptCore/wtf/FastMalloc.h \
+ JavaScriptCore/wtf/FixedArray.h \
JavaScriptCore/wtf/Forward.h \
JavaScriptCore/wtf/GetPtr.h \
JavaScriptCore/wtf/gobject/GOwnPtr.cpp \
@@ -529,6 +530,7 @@ javascriptcore_sources += \
JavaScriptCore/runtime/MarkStackWin.cpp
else
javascriptcore_sources += \
+ JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp \
JavaScriptCore/jit/ExecutableAllocatorPosix.cpp \
JavaScriptCore/runtime/MarkStackPosix.cpp
endif
@@ -553,16 +555,16 @@ javascriptcore_sources += \
endif
JavaScriptCore/Lexer.lut.h: $(CREATE_HASH_TABLE) $(srcdir)/JavaScriptCore/parser/Keywords.table
- $(PERL) $^ > $@
+ $(AM_V_GEN)$(PERL) $^ > $@
JavaScriptCore/%.lut.h: $(CREATE_HASH_TABLE) $(srcdir)/JavaScriptCore/%.cpp
- $(PERL) $^ -i > $@
+ $(AM_V_GEN)$(PERL) $^ -i > $@
JavaScriptCore/RegExpJitTables.h: $(srcdir)/JavaScriptCore/create_regex_tables
- $(PYTHON) $(CREATE_REGEXP_TABLES) > $@
+ $(AM_V_GEN)$(PYTHON) $(CREATE_REGEXP_TABLES) > $@
JavaScriptCore/pcre/chartables.c: $(srcdir)/JavaScriptCore/pcre/dftables
- $(PERL) $^ $@
+ $(AM_V_GEN)$(PERL) $^ $@
bin_PROGRAMS += \
Programs/jsc-@WEBKITGTK_API_MAJOR_VERSION@
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
index e940511..ad81c36 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops
@@ -23,8 +23,4 @@
Name="VCPreBuildEventTool"
CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
- <Tool
- Name="VCPreLinkEventTool"
- CommandLine="if not exist &quot;$(WebKitOutputDir)\public\sym&quot; mkdir &quot;$(WebKitOutputDir)\public\sym&quot;"
- />
</VisualStudioPropertySheet>
diff --git a/JavaScriptCore/bytecode/CodeBlock.cpp b/JavaScriptCore/bytecode/CodeBlock.cpp
index 30d101c..a664719 100644
--- a/JavaScriptCore/bytecode/CodeBlock.cpp
+++ b/JavaScriptCore/bytecode/CodeBlock.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
*
* Redistribution and use in source and binary forms, with or without
@@ -1362,7 +1362,7 @@ CodeBlock::CodeBlock(ScriptExecutable* ownerExecutable, CodeType codeType, PassR
, m_source(sourceProvider)
, m_sourceOffset(sourceOffset)
, m_symbolTable(symTab)
- , m_exceptionInfo(new ExceptionInfo)
+ , m_exceptionInfo(adoptPtr(new ExceptionInfo))
{
ASSERT(m_source);
@@ -1373,13 +1373,14 @@ CodeBlock::CodeBlock(ScriptExecutable* ownerExecutable, CodeType codeType, PassR
CodeBlock::~CodeBlock()
{
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
for (size_t size = m_globalResolveInstructions.size(), i = 0; i < size; ++i)
derefStructures(&m_instructions[m_globalResolveInstructions[i]]);
for (size_t size = m_propertyAccessInstructions.size(), i = 0; i < size; ++i)
derefStructures(&m_instructions[m_propertyAccessInstructions[i]]);
-#else
+#endif
+#if ENABLE(JIT)
for (size_t size = m_globalResolveInfos.size(), i = 0; i < size; ++i) {
if (m_globalResolveInfos[i].structure)
m_globalResolveInfos[i].structure->deref();
@@ -1407,7 +1408,7 @@ CodeBlock::~CodeBlock()
unlinkCallers();
#endif
-#endif // !ENABLE(JIT)
+#endif // ENABLE(JIT)
#if DUMP_CODE_BLOCK_STATISTICS
liveCodeBlockSet.remove(this);
@@ -1538,7 +1539,7 @@ bool CodeBlock::reparseForExceptionInfoIfNecessary(CallFrame* callFrame)
scopeChain = scopeChain->next;
}
- m_exceptionInfo.set(m_ownerExecutable->reparseExceptionInfo(m_globalData, scopeChain, this));
+ m_exceptionInfo = m_ownerExecutable->reparseExceptionInfo(m_globalData, scopeChain, this);
return m_exceptionInfo;
}
@@ -1669,7 +1670,7 @@ bool CodeBlock::functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int&
}
#endif
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
bool CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOffset)
{
if (m_globalResolveInstructions.isEmpty())
@@ -1689,7 +1690,8 @@ bool CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOff
return false;
return true;
}
-#else
+#endif
+#if ENABLE(JIT)
bool CodeBlock::hasGlobalResolveInfoAtBytecodeOffset(unsigned bytecodeOffset)
{
if (m_globalResolveInfos.isEmpty())
@@ -1715,10 +1717,11 @@ void CodeBlock::shrinkToFit()
{
m_instructions.shrinkToFit();
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
m_propertyAccessInstructions.shrinkToFit();
m_globalResolveInstructions.shrinkToFit();
-#else
+#endif
+#if ENABLE(JIT)
m_structureStubInfos.shrinkToFit();
m_globalResolveInfos.shrinkToFit();
m_callLinkInfos.shrinkToFit();
diff --git a/JavaScriptCore/bytecode/CodeBlock.h b/JavaScriptCore/bytecode/CodeBlock.h
index 590fe2e..2f22dd0 100644
--- a/JavaScriptCore/bytecode/CodeBlock.h
+++ b/JavaScriptCore/bytecode/CodeBlock.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
*
* Redistribution and use in source and binary forms, with or without
@@ -39,6 +39,7 @@
#include "RegExp.h"
#include "UString.h"
#include <wtf/FastAllocBase.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
@@ -357,7 +358,8 @@ namespace JSC {
}
bool functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex);
-#else
+#endif
+#if ENABLE(INTERPRETER)
unsigned bytecodeOffset(CallFrame*, Instruction* returnAddress)
{
return static_cast<Instruction*>(returnAddress) - instructions().begin();
@@ -415,11 +417,12 @@ namespace JSC {
unsigned jumpTarget(int index) const { return m_jumpTargets[index]; }
unsigned lastJumpTarget() const { return m_jumpTargets.last(); }
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
void addPropertyAccessInstruction(unsigned propertyAccessInstruction) { m_propertyAccessInstructions.append(propertyAccessInstruction); }
void addGlobalResolveInstruction(unsigned globalResolveInstruction) { m_globalResolveInstructions.append(globalResolveInstruction); }
bool hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOffset);
-#else
+#endif
+#if ENABLE(JIT)
size_t numberOfStructureStubInfos() const { return m_structureStubInfos.size(); }
void addStructureStubInfo(const StructureStubInfo& stubInfo) { m_structureStubInfos.append(stubInfo); }
StructureStubInfo& structureStubInfo(int index) { return m_structureStubInfos[index]; }
@@ -446,7 +449,7 @@ namespace JSC {
bool hasExceptionInfo() const { return m_exceptionInfo; }
void clearExceptionInfo() { m_exceptionInfo.clear(); }
- ExceptionInfo* extractExceptionInfo() { ASSERT(m_exceptionInfo); return m_exceptionInfo.release(); }
+ PassOwnPtr<ExceptionInfo> extractExceptionInfo();
void addExpressionInfo(const ExpressionRangeInfo& expressionInfo) { ASSERT(m_exceptionInfo); m_exceptionInfo->m_expressionInfo.append(expressionInfo); }
void addGetByIdExceptionInfo(const GetByIdExceptionInfo& info) { ASSERT(m_exceptionInfo); m_exceptionInfo->m_getByIdExceptionInfo.append(info); }
@@ -527,7 +530,7 @@ namespace JSC {
void createRareDataIfNecessary()
{
if (!m_rareData)
- m_rareData.set(new RareData);
+ m_rareData = adoptPtr(new RareData);
}
ScriptExecutable* m_ownerExecutable;
@@ -550,10 +553,11 @@ namespace JSC {
RefPtr<SourceProvider> m_source;
unsigned m_sourceOffset;
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
Vector<unsigned> m_propertyAccessInstructions;
Vector<unsigned> m_globalResolveInstructions;
-#else
+#endif
+#if ENABLE(JIT)
Vector<StructureStubInfo> m_structureStubInfos;
Vector<GlobalResolveInfo> m_globalResolveInfos;
Vector<CallLinkInfo> m_callLinkInfos;
@@ -665,6 +669,12 @@ namespace JSC {
}
};
+ inline PassOwnPtr<ExceptionInfo> CodeBlock::extractExceptionInfo()
+ {
+ ASSERT(m_exceptionInfo);
+ return m_exceptionInfo.release();
+ }
+
inline Register& ExecState::r(int index)
{
CodeBlock* codeBlock = this->codeBlock();
diff --git a/JavaScriptCore/bytecode/Instruction.h b/JavaScriptCore/bytecode/Instruction.h
index ab6659f..c6468a5 100644
--- a/JavaScriptCore/bytecode/Instruction.h
+++ b/JavaScriptCore/bytecode/Instruction.h
@@ -125,7 +125,7 @@ namespace JSC {
struct Instruction {
Instruction(Opcode opcode)
{
-#if !HAVE(COMPUTED_GOTO)
+#if !ENABLE(COMPUTED_GOTO_INTERPRETER)
// We have to initialize one of the pointer members to ensure that
// the entire struct is initialized, when opcode is not a pointer.
u.jsCell = 0;
diff --git a/JavaScriptCore/bytecode/Opcode.h b/JavaScriptCore/bytecode/Opcode.h
index f845a34..ca5feeb 100644
--- a/JavaScriptCore/bytecode/Opcode.h
+++ b/JavaScriptCore/bytecode/Opcode.h
@@ -120,10 +120,10 @@ namespace JSC {
macro(op_get_by_id_generic, 8) \
macro(op_get_array_length, 8) \
macro(op_get_string_length, 8) \
- macro(op_put_by_id, 8) \
- macro(op_put_by_id_transition, 8) \
- macro(op_put_by_id_replace, 8) \
- macro(op_put_by_id_generic, 8) \
+ macro(op_put_by_id, 9) \
+ macro(op_put_by_id_transition, 9) \
+ macro(op_put_by_id_replace, 9) \
+ macro(op_put_by_id_generic, 9) \
macro(op_del_by_id, 4) \
macro(op_get_by_val, 4) \
macro(op_get_by_pname, 7) \
@@ -210,7 +210,7 @@ namespace JSC {
FOR_EACH_OPCODE_ID(VERIFY_OPCODE_ID);
#undef VERIFY_OPCODE_ID
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
#if COMPILER(RVCT) || COMPILER(INTEL)
typedef void* Opcode;
#else
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index 16ef357..8ff1b5d 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -1280,6 +1280,27 @@ RegisterID* BytecodeGenerator::emitPutById(RegisterID* base, const Identifier& p
instructions().append(0);
instructions().append(0);
instructions().append(0);
+ instructions().append(0);
+ return value;
+}
+
+RegisterID* BytecodeGenerator::emitDirectPutById(RegisterID* base, const Identifier& property, RegisterID* value)
+{
+#if ENABLE(JIT)
+ m_codeBlock->addStructureStubInfo(StructureStubInfo(access_put_by_id));
+#else
+ m_codeBlock->addPropertyAccessInstruction(instructions().size());
+#endif
+
+ emitOpcode(op_put_by_id);
+ instructions().append(base->index());
+ instructions().append(addConstant(property));
+ instructions().append(value->index());
+ instructions().append(0);
+ instructions().append(0);
+ instructions().append(0);
+ instructions().append(0);
+ instructions().append(property != m_globalData->propertyNames->underscoreProto);
return value;
}
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
index 8b6ab77..2b231a7 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.h
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
@@ -328,6 +328,7 @@ namespace JSC {
RegisterID* emitGetById(RegisterID* dst, RegisterID* base, const Identifier& property);
RegisterID* emitPutById(RegisterID* base, const Identifier& property, RegisterID* value);
+ RegisterID* emitDirectPutById(RegisterID* base, const Identifier& property, RegisterID* value);
RegisterID* emitDeleteById(RegisterID* dst, RegisterID* base, const Identifier&);
RegisterID* emitGetByVal(RegisterID* dst, RegisterID* base, RegisterID* property);
RegisterID* emitPutByVal(RegisterID* base, RegisterID* property, RegisterID* value);
diff --git a/JavaScriptCore/bytecompiler/NodesCodegen.cpp b/JavaScriptCore/bytecompiler/NodesCodegen.cpp
index cdf3e49..e50ce2d 100644
--- a/JavaScriptCore/bytecompiler/NodesCodegen.cpp
+++ b/JavaScriptCore/bytecompiler/NodesCodegen.cpp
@@ -266,7 +266,7 @@ RegisterID* PropertyListNode::emitBytecode(BytecodeGenerator& generator, Registe
switch (p->m_node->m_type) {
case PropertyNode::Constant: {
- generator.emitPutById(newObj.get(), p->m_node->name(), value);
+ generator.emitDirectPutById(newObj.get(), p->m_node->name(), value);
break;
}
case PropertyNode::Getter: {
diff --git a/JavaScriptCore/interpreter/CallFrame.h b/JavaScriptCore/interpreter/CallFrame.h
index 7ea59fb..bde9786 100644
--- a/JavaScriptCore/interpreter/CallFrame.h
+++ b/JavaScriptCore/interpreter/CallFrame.h
@@ -106,8 +106,9 @@ namespace JSC {
CallFrame* callerFrame() const { return this[RegisterFile::CallerFrame].callFrame(); }
#if ENABLE(JIT)
ReturnAddressPtr returnPC() const { return ReturnAddressPtr(this[RegisterFile::ReturnPC].vPC()); }
-#else
- Instruction* returnPC() const { return this[RegisterFile::ReturnPC].vPC(); }
+#endif
+#if ENABLE(INTERPRETER)
+ Instruction* returnVPC() const { return this[RegisterFile::ReturnPC].vPC(); }
#endif
void setCallerFrame(CallFrame* callerFrame) { static_cast<Register*>(this)[RegisterFile::CallerFrame] = callerFrame; }
diff --git a/JavaScriptCore/interpreter/Interpreter.cpp b/JavaScriptCore/interpreter/Interpreter.cpp
index 8160249..26f7a6b 100644
--- a/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/JavaScriptCore/interpreter/Interpreter.cpp
@@ -79,7 +79,7 @@ static int depth(CodeBlock* codeBlock, ScopeChain& sc)
return sc.localDepth();
}
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
NEVER_INLINE bool Interpreter::resolve(CallFrame* callFrame, Instruction* vPC, JSValue& exceptionValue)
{
int dst = vPC[1].u.operand;
@@ -294,7 +294,7 @@ NEVER_INLINE bool Interpreter::resolveBaseAndProperty(CallFrame* callFrame, Inst
return false;
}
-#endif // !ENABLE(JIT)
+#endif // ENABLE(INTERPRETER)
ALWAYS_INLINE CallFrame* Interpreter::slideRegisterWindowForCall(CodeBlock* newCodeBlock, RegisterFile* registerFile, CallFrame* callFrame, size_t registerOffset, int argc)
{
@@ -333,7 +333,7 @@ ALWAYS_INLINE CallFrame* Interpreter::slideRegisterWindowForCall(CodeBlock* newC
return CallFrame::create(r);
}
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
static NEVER_INLINE bool isInvalidParamForIn(CallFrame* callFrame, CodeBlock* codeBlock, const Instruction* vPC, JSValue value, JSValue& exceptionData)
{
if (value.isObject())
@@ -384,12 +384,12 @@ Interpreter::Interpreter()
: m_sampleEntryDepth(0)
, m_reentryDepth(0)
{
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
privateExecute(InitializeAndReturn, 0, 0, 0);
for (int i = 0; i < numOpcodeIDs; ++i)
m_opcodeIDTable.add(m_opcodeTable[i], static_cast<OpcodeID>(i));
-#endif // HAVE(COMPUTED_GOTO)
+#endif // ENABLE(COMPUTED_GOTO_INTERPRETER)
#if ENABLE(OPCODE_SAMPLING)
enableSampler();
@@ -497,7 +497,7 @@ void Interpreter::dumpRegisters(CallFrame* callFrame)
bool Interpreter::isOpcode(Opcode opcode)
{
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
return opcode != HashTraits<Opcode>::emptyValue()
&& !HashTraits<Opcode>::isDeletedValue(opcode)
&& m_opcodeIDTable.contains(opcode);
@@ -547,7 +547,18 @@ NEVER_INLINE bool Interpreter::unwindCallFrame(CallFrame*& callFrame, JSValue ex
return false;
codeBlock = callerFrame->codeBlock();
- bytecodeOffset = codeBlock->bytecodeOffset(callerFrame, callFrame->returnPC());
+#if ENABLE(JIT)
+#if ENABLE(INTERPRETER)
+ if (callerFrame->globalData().canUseJIT())
+#endif
+ bytecodeOffset = codeBlock->bytecodeOffset(callerFrame, callFrame->returnPC());
+#if ENABLE(INTERPRETER)
+ else
+ bytecodeOffset = codeBlock->bytecodeOffset(callerFrame, callFrame->returnVPC());
+#endif
+#else
+ bytecodeOffset = codeBlock->bytecodeOffset(callerFrame, callFrame->returnVPC());
+#endif
callFrame = callerFrame;
return true;
}
@@ -594,16 +605,24 @@ NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSV
// the profiler manually that the call instruction has returned, since
// we'll never reach the relevant op_profile_did_call.
if (Profiler* profiler = *Profiler::enabledProfilerReference()) {
-#if !ENABLE(JIT)
- // FIXME: Why 8? - work out what this magic value is, replace the constant with something more helpful.
- if (isCallBytecode(codeBlock->instructions()[bytecodeOffset].u.opcode))
- profiler->didExecute(callFrame, callFrame->r(codeBlock->instructions()[bytecodeOffset + 1].u.operand).jsValue());
- else if (codeBlock->instructions().size() > (bytecodeOffset + 8) && codeBlock->instructions()[bytecodeOffset + 8].u.opcode == getOpcode(op_construct))
- profiler->didExecute(callFrame, callFrame->r(codeBlock->instructions()[bytecodeOffset + 9].u.operand).jsValue());
-#else
- int functionRegisterIndex;
- if (codeBlock->functionRegisterForBytecodeOffset(bytecodeOffset, functionRegisterIndex))
- profiler->didExecute(callFrame, callFrame->r(functionRegisterIndex).jsValue());
+#if ENABLE(INTERPRETER)
+ if (!callFrame->globalData().canUseJIT()) {
+ // FIXME: Why 8? - work out what this magic value is, replace the constant with something more helpful.
+ if (isCallBytecode(codeBlock->instructions()[bytecodeOffset].u.opcode))
+ profiler->didExecute(callFrame, callFrame->r(codeBlock->instructions()[bytecodeOffset + 1].u.operand).jsValue());
+ else if (codeBlock->instructions().size() > (bytecodeOffset + 8) && codeBlock->instructions()[bytecodeOffset + 8].u.opcode == getOpcode(op_construct))
+ profiler->didExecute(callFrame, callFrame->r(codeBlock->instructions()[bytecodeOffset + 9].u.operand).jsValue());
+ }
+#if ENABLE(JIT)
+ else
+#endif
+#endif
+#if ENABLE(JIT)
+ {
+ int functionRegisterIndex;
+ if (codeBlock->functionRegisterForBytecodeOffset(bytecodeOffset, functionRegisterIndex))
+ profiler->didExecute(callFrame, callFrame->r(functionRegisterIndex).jsValue());
+ }
#endif
}
@@ -676,12 +695,20 @@ JSValue Interpreter::execute(ProgramExecutable* program, CallFrame* callFrame, S
{
SamplingTool::CallRecord callRecord(m_sampler.get());
- m_reentryDepth++;
+ m_reentryDepth++;
#if ENABLE(JIT)
- result = program->jitCode(newCallFrame, scopeChain).execute(&m_registerFile, newCallFrame, scopeChain->globalData, exception);
-#else
- result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
+#if ENABLE(INTERPRETER)
+ if (callFrame->globalData().canUseJIT())
#endif
+ result = program->jitCode(newCallFrame, scopeChain).execute(&m_registerFile, newCallFrame, scopeChain->globalData, exception);
+#if ENABLE(INTERPRETER)
+ else
+#endif
+#endif
+#if ENABLE(INTERPRETER)
+ result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
+#endif
+
m_reentryDepth--;
}
@@ -749,12 +776,19 @@ JSValue Interpreter::executeCall(CallFrame* callFrame, JSObject* function, CallT
{
SamplingTool::CallRecord callRecord(m_sampler.get());
- m_reentryDepth++;
- #if ENABLE(JIT)
- result = callData.js.functionExecutable->jitCodeForCall(newCallFrame, callDataScopeChain).execute(&m_registerFile, newCallFrame, callDataScopeChain->globalData, exception);
- #else
- result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
- #endif
+ m_reentryDepth++;
+#if ENABLE(JIT)
+#if ENABLE(INTERPRETER)
+ if (callFrame->globalData().canUseJIT())
+#endif
+ result = callData.js.functionExecutable->jitCodeForCall(newCallFrame, callDataScopeChain).execute(&m_registerFile, newCallFrame, callDataScopeChain->globalData, exception);
+#if ENABLE(INTERPRETER)
+ else
+#endif
+#endif
+#if ENABLE(INTERPRETER)
+ result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
+#endif
m_reentryDepth--;
}
@@ -841,12 +875,19 @@ JSObject* Interpreter::executeConstruct(CallFrame* callFrame, JSObject* construc
{
SamplingTool::CallRecord callRecord(m_sampler.get());
- m_reentryDepth++;
- #if ENABLE(JIT)
- result = constructData.js.functionExecutable->jitCodeForConstruct(newCallFrame, constructDataScopeChain).execute(&m_registerFile, newCallFrame, constructDataScopeChain->globalData, exception);
- #else
- result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
- #endif
+ m_reentryDepth++;
+#if ENABLE(JIT)
+#if ENABLE(INTERPRETER)
+ if (callFrame->globalData().canUseJIT())
+#endif
+ result = constructData.js.functionExecutable->jitCodeForConstruct(newCallFrame, constructDataScopeChain).execute(&m_registerFile, newCallFrame, constructDataScopeChain->globalData, exception);
+#if ENABLE(INTERPRETER)
+ else
+#endif
+#endif
+#if ENABLE(INTERPRETER)
+ result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
+#endif
m_reentryDepth--;
}
@@ -922,11 +963,13 @@ CallFrameClosure Interpreter::prepareForRepeatCall(FunctionExecutable* FunctionE
return CallFrameClosure();
}
// a 0 codeBlock indicates a built-in caller
- newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), argc, function);
+ newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), argc, function);
#if ENABLE(JIT)
- FunctionExecutable->jitCodeForCall(newCallFrame, scopeChain);
+#if ENABLE(INTERPRETER)
+ if (callFrame->globalData().canUseJIT())
+#endif
+ FunctionExecutable->jitCodeForCall(newCallFrame, scopeChain);
#endif
-
CallFrameClosure result = { callFrame, newCallFrame, function, FunctionExecutable, scopeChain->globalData, oldEnd, scopeChain, codeBlock->m_numParameters, argc };
return result;
}
@@ -942,11 +985,18 @@ JSValue Interpreter::execute(CallFrameClosure& closure, JSValue* exception)
{
SamplingTool::CallRecord callRecord(m_sampler.get());
- m_reentryDepth++;
+ m_reentryDepth++;
#if ENABLE(JIT)
- result = closure.functionExecutable->generatedJITCodeForCall().execute(&m_registerFile, closure.newCallFrame, closure.globalData, exception);
-#else
- result = privateExecute(Normal, &m_registerFile, closure.newCallFrame, exception);
+#if ENABLE(INTERPRETER)
+ if (closure.newCallFrame->globalData().canUseJIT())
+#endif
+ result = closure.functionExecutable->generatedJITCodeForCall().execute(&m_registerFile, closure.newCallFrame, closure.globalData, exception);
+#if ENABLE(INTERPRETER)
+ else
+#endif
+#endif
+#if ENABLE(INTERPRETER)
+ result = privateExecute(Normal, &m_registerFile, closure.newCallFrame, exception);
#endif
m_reentryDepth--;
}
@@ -1041,10 +1091,18 @@ JSValue Interpreter::execute(EvalExecutable* eval, CallFrame* callFrame, JSObjec
SamplingTool::CallRecord callRecord(m_sampler.get());
m_reentryDepth++;
+
#if ENABLE(JIT)
- result = eval->jitCode(newCallFrame, scopeChain).execute(&m_registerFile, newCallFrame, scopeChain->globalData, exception);
-#else
- result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
+#if ENABLE(INTERPRETER)
+ if (callFrame->globalData().canUseJIT())
+#endif
+ result = eval->jitCode(newCallFrame, scopeChain).execute(&m_registerFile, newCallFrame, scopeChain->globalData, exception);
+#if ENABLE(INTERPRETER)
+ else
+#endif
+#endif
+#if ENABLE(INTERPRETER)
+ result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
#endif
m_reentryDepth--;
}
@@ -1084,7 +1142,7 @@ NEVER_INLINE void Interpreter::debug(CallFrame* callFrame, DebugHookID debugHook
}
}
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
NEVER_INLINE ScopeChainNode* Interpreter::createExceptionScope(CallFrame* callFrame, const Instruction* vPC)
{
int dst = vPC[1].u.operand;
@@ -1320,28 +1378,32 @@ NEVER_INLINE void Interpreter::uncacheGetByID(CodeBlock* codeBlock, Instruction*
vPC[4] = 0;
}
-#endif // !ENABLE(JIT)
+#endif // ENABLE(INTERPRETER)
JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFile, CallFrame* callFrame, JSValue* exception)
{
// One-time initialization of our address tables. We have to put this code
// here because our labels are only in scope inside this function.
if (UNLIKELY(flag == InitializeAndReturn)) {
- #if HAVE(COMPUTED_GOTO)
+ #if ENABLE(COMPUTED_GOTO_INTERPRETER)
#define LIST_OPCODE_LABEL(id, length) &&id,
static Opcode labels[] = { FOR_EACH_OPCODE_ID(LIST_OPCODE_LABEL) };
for (size_t i = 0; i < sizeof(labels) / sizeof(Opcode); ++i)
m_opcodeTable[i] = labels[i];
#undef LIST_OPCODE_LABEL
- #endif // HAVE(COMPUTED_GOTO)
+ #endif // ENABLE(COMPUTED_GOTO_INTERPRETER)
return JSValue();
}
-
+
#if ENABLE(JIT)
+#if ENABLE(INTERPRETER)
// Mixing Interpreter + JIT is not supported.
- ASSERT_NOT_REACHED();
+ if (callFrame->globalData().canUseJIT())
+#endif
+ ASSERT_NOT_REACHED();
#endif
-#if !!ENABLE(JIT)
+
+#if !ENABLE(INTERPRETER)
UNUSED_PARAM(registerFile);
UNUSED_PARAM(callFrame);
UNUSED_PARAM(exception);
@@ -1385,7 +1447,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
#define SAMPLE(codeBlock, vPC)
#endif
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
#define NEXT_INSTRUCTION() SAMPLE(codeBlock, vPC); goto *vPC->u.opcode
#if ENABLE(OPCODE_STATS)
#define DEFINE_OPCODE(opcode) opcode: OpcodeStats::recordInstruction(opcode);
@@ -2417,7 +2479,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
goto *(&&skip_id_getter_proto);
#endif
DEFINE_OPCODE(op_get_by_id_getter_proto) {
@@ -2459,10 +2521,10 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_id_getter_proto:
#endif
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
goto *(&&skip_id_custom_proto);
#endif
DEFINE_OPCODE(op_get_by_id_custom_proto) {
@@ -2501,7 +2563,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_id_custom_proto:
#endif
DEFINE_OPCODE(op_get_by_id_self_list) {
@@ -2592,7 +2654,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
goto *(&&skip_id_getter_self);
#endif
DEFINE_OPCODE(op_get_by_id_getter_self) {
@@ -2632,10 +2694,10 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_id_getter_self:
#endif
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
goto *(&&skip_id_custom_self);
#endif
DEFINE_OPCODE(op_get_by_id_custom_self) {
@@ -2669,7 +2731,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_id_custom_self:
#endif
DEFINE_OPCODE(op_get_by_id_generic) {
@@ -2692,7 +2754,7 @@ skip_id_custom_self:
vPC += OPCODE_LENGTH(op_get_by_id_generic);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
goto *(&&skip_id_getter_chain);
#endif
DEFINE_OPCODE(op_get_by_id_getter_chain) {
@@ -2744,10 +2806,10 @@ skip_id_custom_self:
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_id_getter_chain:
#endif
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
goto *(&&skip_id_custom_chain);
#endif
DEFINE_OPCODE(op_get_by_id_custom_chain) {
@@ -2796,7 +2858,7 @@ skip_id_custom_self:
uncacheGetByID(codeBlock, vPC);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_id_custom_chain:
#endif
DEFINE_OPCODE(op_get_array_length) {
@@ -2840,23 +2902,31 @@ skip_id_custom_self:
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(op_put_by_id) {
- /* put_by_id base(r) property(id) value(r) nop(n) nop(n) nop(n) nop(n)
+ /* put_by_id base(r) property(id) value(r) nop(n) nop(n) nop(n) nop(n) direct(b)
Generic property access: Sets the property named by identifier
property, belonging to register base, to register value.
Unlike many opcodes, this one does not write any output to
the register file.
+
+ The "direct" flag should only be set this put_by_id is to initialize
+ an object literal.
*/
int base = vPC[1].u.operand;
int property = vPC[2].u.operand;
int value = vPC[3].u.operand;
+ int direct = vPC[8].u.operand;
JSValue baseValue = callFrame->r(base).jsValue();
Identifier& ident = codeBlock->identifier(property);
PutPropertySlot slot;
- baseValue.put(callFrame, ident, callFrame->r(value).jsValue(), slot);
+ if (direct) {
+ baseValue.putDirect(callFrame, ident, callFrame->r(value).jsValue(), slot);
+ ASSERT(slot.base() == baseValue);
+ } else
+ baseValue.put(callFrame, ident, callFrame->r(value).jsValue(), slot);
CHECK_FOR_EXCEPTION();
tryCachePutByID(callFrame, codeBlock, vPC, baseValue, slot);
@@ -2865,7 +2935,7 @@ skip_id_custom_self:
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(op_put_by_id_transition) {
- /* op_put_by_id_transition base(r) property(id) value(r) oldStructure(sID) newStructure(sID) structureChain(chain) offset(n)
+ /* op_put_by_id_transition base(r) property(id) value(r) oldStructure(sID) newStructure(sID) structureChain(chain) offset(n) direct(b)
Cached property access: Attempts to set a new property with a cached transition
property named by identifier property, belonging to register base,
@@ -2886,19 +2956,21 @@ skip_id_custom_self:
if (LIKELY(baseCell->structure() == oldStructure)) {
ASSERT(baseCell->isObject());
JSObject* baseObject = asObject(baseCell);
-
- RefPtr<Structure>* it = vPC[6].u.structureChain->head();
-
- JSValue proto = baseObject->structure()->prototypeForLookup(callFrame);
- while (!proto.isNull()) {
- if (UNLIKELY(asObject(proto)->structure() != (*it).get())) {
- uncachePutByID(codeBlock, vPC);
- NEXT_INSTRUCTION();
+ int direct = vPC[8].u.operand;
+
+ if (direct) {
+ RefPtr<Structure>* it = vPC[6].u.structureChain->head();
+
+ JSValue proto = baseObject->structure()->prototypeForLookup(callFrame);
+ while (!proto.isNull()) {
+ if (UNLIKELY(asObject(proto)->structure() != (*it).get())) {
+ uncachePutByID(codeBlock, vPC);
+ NEXT_INSTRUCTION();
+ }
+ ++it;
+ proto = asObject(proto)->structure()->prototypeForLookup(callFrame);
}
- ++it;
- proto = asObject(proto)->structure()->prototypeForLookup(callFrame);
}
-
baseObject->transitionTo(newStructure);
int value = vPC[3].u.operand;
@@ -2915,7 +2987,7 @@ skip_id_custom_self:
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(op_put_by_id_replace) {
- /* op_put_by_id_replace base(r) property(id) value(r) structure(sID) offset(n) nop(n) nop(n)
+ /* op_put_by_id_replace base(r) property(id) value(r) structure(sID) offset(n) nop(n) nop(n) direct(b)
Cached property access: Attempts to set a pre-existing, cached
property named by identifier property, belonging to register base,
@@ -2950,7 +3022,7 @@ skip_id_custom_self:
NEXT_INSTRUCTION();
}
DEFINE_OPCODE(op_put_by_id_generic) {
- /* op_put_by_id_generic base(r) property(id) value(r) nop(n) nop(n) nop(n) nop(n)
+ /* op_put_by_id_generic base(r) property(id) value(r) nop(n) nop(n) nop(n) nop(n) direct(b)
Generic property access: Sets the property named by identifier
property, belonging to register base, to register value.
@@ -2961,11 +3033,16 @@ skip_id_custom_self:
int base = vPC[1].u.operand;
int property = vPC[2].u.operand;
int value = vPC[3].u.operand;
+ int direct = vPC[8].u.operand;
JSValue baseValue = callFrame->r(base).jsValue();
Identifier& ident = codeBlock->identifier(property);
PutPropertySlot slot;
- baseValue.put(callFrame, ident, callFrame->r(value).jsValue(), slot);
+ if (direct) {
+ baseValue.putDirect(callFrame, ident, callFrame->r(value).jsValue(), slot);
+ ASSERT(slot.base() == baseValue);
+ } else
+ baseValue.put(callFrame, ident, callFrame->r(value).jsValue(), slot);
CHECK_FOR_EXCEPTION();
vPC += OPCODE_LENGTH(op_put_by_id_generic);
@@ -3704,17 +3781,17 @@ skip_id_custom_self:
goto vm_throw;
}
ASSERT(!asFunction(callFrame->callee())->isHostFunction());
- uint32_t expectedParams = asFunction(callFrame->callee())->jsExecutable()->parameterCount();
- uint32_t inplaceArgs = min(argCount, expectedParams);
- uint32_t i = 0;
+ int32_t expectedParams = asFunction(callFrame->callee())->jsExecutable()->parameterCount();
+ int32_t inplaceArgs = min(static_cast<int32_t>(argCount), expectedParams);
+ int32_t i = 0;
Register* argStore = callFrame->registers() + argsOffset;
// First step is to copy the "expected" parameters from their normal location relative to the callframe
for (; i < inplaceArgs; i++)
argStore[i] = callFrame->registers()[i - RegisterFile::CallFrameHeaderSize - expectedParams];
// Then we copy any additional arguments that may be further up the stack ('-1' to account for 'this')
- for (; i < argCount; i++)
- argStore[i] = callFrame->registers()[i - RegisterFile::CallFrameHeaderSize - expectedParams - argCount - 1];
+ for (; i < static_cast<int32_t>(argCount); i++)
+ argStore[i] = callFrame->registers()[i - RegisterFile::CallFrameHeaderSize - expectedParams - static_cast<int32_t>(argCount) - 1];
} else if (!arguments.isUndefinedOrNull()) {
if (!arguments.isObject()) {
exceptionValue = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPC - codeBlock->instructions().begin(), codeBlock);
@@ -3907,7 +3984,7 @@ skip_id_custom_self:
JSValue returnValue = callFrame->r(result).jsValue();
- vPC = callFrame->returnPC();
+ vPC = callFrame->returnVPC();
callFrame = callFrame->callerFrame();
if (callFrame->hasHostCallFrameFlag())
@@ -3951,7 +4028,7 @@ skip_id_custom_self:
if (UNLIKELY(!returnValue.isObject()))
returnValue = callFrame->r(vPC[2].u.operand).jsValue();
- vPC = callFrame->returnPC();
+ vPC = callFrame->returnVPC();
callFrame = callFrame->callerFrame();
if (callFrame->hasHostCallFrameFlag())
@@ -4136,7 +4213,6 @@ skip_id_custom_self:
callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_construct), callDataScopeChain, previousCallFrame, argCount, asFunction(v));
codeBlock = newCodeBlock;
vPC = newCodeBlock->instructions().begin();
-
#if ENABLE(OPCODE_STATS)
OpcodeStats::resetLastInstruction();
#endif
@@ -4299,7 +4375,7 @@ skip_id_custom_self:
vPC += target;
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
// Appease GCC
goto *(&&skip_new_scope);
#endif
@@ -4315,7 +4391,7 @@ skip_id_custom_self:
vPC += OPCODE_LENGTH(op_push_new_scope);
NEXT_INSTRUCTION();
}
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
skip_new_scope:
#endif
DEFINE_OPCODE(op_catch) {
@@ -4529,14 +4605,14 @@ skip_id_custom_self:
NEXT_INSTRUCTION();
}
}
-#if !HAVE(COMPUTED_GOTO)
+#if !ENABLE(COMPUTED_GOTO_INTERPRETER)
} // iterator loop ends
#endif
#undef NEXT_INSTRUCTION
#undef DEFINE_OPCODE
#undef CHECK_FOR_EXCEPTION
#undef CHECK_FOR_TIMEOUT
-#endif // !ENABLE(JIT)
+#endif // ENABLE(INTERPRETER)
}
JSValue Interpreter::retrieveArguments(CallFrame* callFrame, JSFunction* function) const
@@ -4592,8 +4668,17 @@ void Interpreter::retrieveLastCaller(CallFrame* callFrame, int& lineNumber, intp
CodeBlock* callerCodeBlock = callerFrame->codeBlock();
if (!callerCodeBlock)
return;
-
- unsigned bytecodeOffset = callerCodeBlock->bytecodeOffset(callerFrame, callFrame->returnPC());
+ unsigned bytecodeOffset = 0;
+#if ENABLE(INTERPRETER)
+ if (!callerFrame->globalData().canUseJIT())
+ bytecodeOffset = callerCodeBlock->bytecodeOffset(callerFrame, callFrame->returnVPC());
+#if ENABLE(JIT)
+ else
+ bytecodeOffset = callerCodeBlock->bytecodeOffset(callerFrame, callFrame->returnPC());
+#endif
+#else
+ bytecodeOffset = callerCodeBlock->bytecodeOffset(callerFrame, callFrame->returnPC());
+#endif
lineNumber = callerCodeBlock->lineNumberForBytecodeOffset(callerFrame, bytecodeOffset - 1);
sourceID = callerCodeBlock->ownerExecutable()->sourceID();
sourceURL = callerCodeBlock->ownerExecutable()->sourceURL();
diff --git a/JavaScriptCore/interpreter/Interpreter.h b/JavaScriptCore/interpreter/Interpreter.h
index 555bbf9..50f07b3 100644
--- a/JavaScriptCore/interpreter/Interpreter.h
+++ b/JavaScriptCore/interpreter/Interpreter.h
@@ -75,7 +75,7 @@ namespace JSC {
Opcode getOpcode(OpcodeID id)
{
- #if HAVE(COMPUTED_GOTO)
+ #if ENABLE(COMPUTED_GOTO_INTERPRETER)
return m_opcodeTable[id];
#else
return id;
@@ -84,7 +84,7 @@ namespace JSC {
OpcodeID getOpcodeID(Opcode opcode)
{
- #if HAVE(COMPUTED_GOTO)
+ #if ENABLE(COMPUTED_GOTO_INTERPRETER)
ASSERT(isOpcode(opcode));
return m_opcodeIDTable.get(opcode);
#else
@@ -123,7 +123,7 @@ namespace JSC {
JSValue execute(EvalExecutable*, CallFrame*, JSObject* thisObject, int globalRegisterOffset, ScopeChainNode*, JSValue* exception);
-#if !ENABLE(JIT)
+#if ENABLE(INTERPRETER)
NEVER_INLINE bool resolve(CallFrame*, Instruction*, JSValue& exceptionValue);
NEVER_INLINE bool resolveSkip(CallFrame*, Instruction*, JSValue& exceptionValue);
NEVER_INLINE bool resolveGlobal(CallFrame*, Instruction*, JSValue& exceptionValue);
@@ -136,7 +136,7 @@ namespace JSC {
void uncacheGetByID(CodeBlock*, Instruction* vPC);
void tryCachePutByID(CallFrame*, CodeBlock*, Instruction*, JSValue baseValue, const PutPropertySlot&);
void uncachePutByID(CodeBlock*, Instruction* vPC);
-#endif // !ENABLE(JIT)
+#endif // ENABLE(INTERPRETER)
NEVER_INLINE bool unwindCallFrame(CallFrame*&, JSValue, unsigned& bytecodeOffset, CodeBlock*&);
@@ -159,7 +159,7 @@ namespace JSC {
RegisterFile m_registerFile;
-#if HAVE(COMPUTED_GOTO)
+#if ENABLE(COMPUTED_GOTO_INTERPRETER)
Opcode m_opcodeTable[numOpcodeIDs]; // Maps OpcodeID => Opcode for compiling
HashMap<Opcode, OpcodeID> m_opcodeIDTable; // Maps Opcode => OpcodeID for decompiling
#endif
diff --git a/JavaScriptCore/jit/ExecutableAllocator.cpp b/JavaScriptCore/jit/ExecutableAllocator.cpp
index f6b27ec..5e10e86 100644
--- a/JavaScriptCore/jit/ExecutableAllocator.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocator.cpp
@@ -33,6 +33,42 @@ namespace JSC {
size_t ExecutableAllocator::pageSize = 0;
+#if ENABLE(ASSEMBLER_WX_EXCLUSIVE)
+void ExecutableAllocator::reprotectRegion(void* start, size_t size, ProtectionSeting setting)
+{
+ if (!pageSize)
+ intializePageSize();
+
+ // Calculate the start of the page containing this region,
+ // and account for this extra memory within size.
+ intptr_t startPtr = reinterpret_cast<intptr_t>(start);
+ intptr_t pageStartPtr = startPtr & ~(pageSize - 1);
+ void* pageStart = reinterpret_cast<void*>(pageStartPtr);
+ size += (startPtr - pageStartPtr);
+
+ // Round size up
+ size += (pageSize - 1);
+ size &= ~(pageSize - 1);
+
+ mprotect(pageStart, size, (setting == Writable) ? PROTECTION_FLAGS_RW : PROTECTION_FLAGS_RX);
+}
+#endif
+
+#if CPU(ARM_TRADITIONAL) && OS(LINUX) && COMPILER(RVCT)
+__asm void ExecutableAllocator::cacheFlush(void* code, size_t size)
+{
+ ARM
+ push {r7}
+ add r1, r1, r0
+ mov r7, #0xf0000
+ add r7, r7, #0x2
+ mov r2, #0x0
+ svc #0x0
+ pop {r7}
+ bx lr
+}
+#endif
+
}
#endif // HAVE(ASSEMBLER)
diff --git a/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp b/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
index 4d3c847..7846a25 100644
--- a/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
@@ -27,25 +27,33 @@
#include "ExecutableAllocator.h"
-#if ENABLE(ASSEMBLER) && OS(DARWIN) && CPU(X86_64)
+#if ENABLE(EXECUTABLE_ALLOCATOR_FIXED)
#include <errno.h>
#include "TCSpinLock.h"
-#include <mach/mach_init.h>
-#include <mach/vm_map.h>
#include <sys/mman.h>
#include <unistd.h>
#include <wtf/AVLTree.h>
#include <wtf/VMTags.h>
+#if CPU(X86_64)
+ // These limits suitable on 64-bit platforms (particularly x86-64, where we require all jumps to have a 2Gb max range).
+ #define VM_POOL_SIZE (2u * 1024u * 1024u * 1024u) // 2Gb
+ #define COALESCE_LIMIT (16u * 1024u * 1024u) // 16Mb
+#else
+ // These limits are hopefully sensible on embedded platforms.
+ #define VM_POOL_SIZE (32u * 1024u * 1024u) // 32Mb
+ #define COALESCE_LIMIT (4u * 1024u * 1024u) // 4Mb
+#endif
+
+// ASLR currently only works on darwin (due to arc4random) & 64-bit (due to address space size).
+#define VM_POOL_ASLR (OS(DARWIN) && CPU(X86_64))
+
using namespace WTF;
namespace JSC {
-#define TWO_GB (2u * 1024u * 1024u * 1024u)
-#define SIXTEEN_MB (16u * 1024u * 1024u)
-
// FreeListEntry describes a free chunk of memory, stored in the freeList.
struct FreeListEntry {
FreeListEntry(void* pointer, size_t size)
@@ -291,9 +299,12 @@ public:
// for now instead of 2^26 bits of ASLR lets stick with 25 bits of randomization plus
// 2^24, which should put up somewhere in the middle of usespace (in the address range
// 0x200000000000 .. 0x5fffffffffff).
- intptr_t randomLocation = arc4random() & ((1 << 25) - 1);
+ intptr_t randomLocation = 0;
+#if VM_POOL_ASLR
+ randomLocation = arc4random() & ((1 << 25) - 1);
randomLocation += (1 << 24);
randomLocation <<= 21;
+#endif
m_base = mmap(reinterpret_cast<void*>(randomLocation), m_totalHeapSize, INITIAL_PROTECTION_FLAGS, MAP_PRIVATE | MAP_ANON, VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY, 0);
if (!m_base)
CRASH();
@@ -387,7 +398,7 @@ public:
// 16MB of allocations have been freed, sweep m_freeList
// coalescing any neighboring fragments.
m_countFreedSinceLastCoalesce += size;
- if (m_countFreedSinceLastCoalesce >= SIXTEEN_MB) {
+ if (m_countFreedSinceLastCoalesce >= COALESCE_LIMIT) {
m_countFreedSinceLastCoalesce = 0;
coalesceFreeSpace();
}
@@ -429,7 +440,7 @@ ExecutablePool::Allocation ExecutablePool::systemAlloc(size_t size)
SpinLockHolder lock_holder(&spinlock);
if (!allocator)
- allocator = new FixedVMPoolAllocator(JIT_ALLOCATOR_LARGE_ALLOC_SIZE, TWO_GB);
+ allocator = new FixedVMPoolAllocator(JIT_ALLOCATOR_LARGE_ALLOC_SIZE, VM_POOL_SIZE);
ExecutablePool::Allocation alloc = {reinterpret_cast<char*>(allocator->alloc(size)), size};
return alloc;
}
@@ -444,4 +455,5 @@ void ExecutablePool::systemRelease(const ExecutablePool::Allocation& allocation)
}
+
#endif // HAVE(ASSEMBLER)
diff --git a/JavaScriptCore/jit/ExecutableAllocatorPosix.cpp b/JavaScriptCore/jit/ExecutableAllocatorPosix.cpp
index eee8a7e..b04049c 100644
--- a/JavaScriptCore/jit/ExecutableAllocatorPosix.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocatorPosix.cpp
@@ -27,7 +27,7 @@
#include "ExecutableAllocator.h"
-#if ENABLE(ASSEMBLER) && OS(UNIX) && !OS(SYMBIAN)
+#if ENABLE(EXECUTABLE_ALLOCATOR_DEMAND) && !OS(WINDOWS) && !OS(SYMBIAN)
#include <sys/mman.h>
#include <unistd.h>
@@ -35,8 +35,6 @@
namespace JSC {
-#if !(OS(DARWIN) && CPU(X86_64))
-
void ExecutableAllocator::intializePageSize()
{
ExecutableAllocator::pageSize = getpagesize();
@@ -57,44 +55,6 @@ void ExecutablePool::systemRelease(const ExecutablePool::Allocation& alloc)
ASSERT_UNUSED(result, !result);
}
-#endif // !(OS(DARWIN) && CPU(X86_64))
-
-#if ENABLE(ASSEMBLER_WX_EXCLUSIVE)
-void ExecutableAllocator::reprotectRegion(void* start, size_t size, ProtectionSeting setting)
-{
- if (!pageSize)
- intializePageSize();
-
- // Calculate the start of the page containing this region,
- // and account for this extra memory within size.
- intptr_t startPtr = reinterpret_cast<intptr_t>(start);
- intptr_t pageStartPtr = startPtr & ~(pageSize - 1);
- void* pageStart = reinterpret_cast<void*>(pageStartPtr);
- size += (startPtr - pageStartPtr);
-
- // Round size up
- size += (pageSize - 1);
- size &= ~(pageSize - 1);
-
- mprotect(pageStart, size, (setting == Writable) ? PROTECTION_FLAGS_RW : PROTECTION_FLAGS_RX);
}
-#endif
-#if CPU(ARM_TRADITIONAL) && OS(LINUX) && COMPILER(RVCT)
-__asm void ExecutableAllocator::cacheFlush(void* code, size_t size)
-{
- ARM
- push {r7}
- add r1, r1, r0
- mov r7, #0xf0000
- add r7, r7, #0x2
- mov r2, #0x0
- svc #0x0
- pop {r7}
- bx lr
-}
#endif
-
-}
-
-#endif // HAVE(ASSEMBLER)
diff --git a/JavaScriptCore/jit/ExecutableAllocatorSymbian.cpp b/JavaScriptCore/jit/ExecutableAllocatorSymbian.cpp
index e82975c..9028f50 100644
--- a/JavaScriptCore/jit/ExecutableAllocatorSymbian.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocatorSymbian.cpp
@@ -22,7 +22,7 @@
#include "ExecutableAllocator.h"
-#if ENABLE(ASSEMBLER) && OS(SYMBIAN)
+#if ENABLE(EXECUTABLE_ALLOCATOR_DEMAND) && OS(SYMBIAN)
#include <e32hal.h>
#include <e32std.h>
diff --git a/JavaScriptCore/jit/ExecutableAllocatorWin.cpp b/JavaScriptCore/jit/ExecutableAllocatorWin.cpp
index e38323c..72a1d5f 100644
--- a/JavaScriptCore/jit/ExecutableAllocatorWin.cpp
+++ b/JavaScriptCore/jit/ExecutableAllocatorWin.cpp
@@ -27,7 +27,7 @@
#include "ExecutableAllocator.h"
-#if ENABLE(ASSEMBLER) && OS(WINDOWS)
+#if ENABLE(EXECUTABLE_ALLOCATOR_DEMAND) && OS(WINDOWS)
#include "windows.h"
diff --git a/JavaScriptCore/jit/JIT.h b/JavaScriptCore/jit/JIT.h
index 529a1d6..0980be2 100644
--- a/JavaScriptCore/jit/JIT.h
+++ b/JavaScriptCore/jit/JIT.h
@@ -211,10 +211,10 @@ namespace JSC {
jit.privateCompileGetByIdChain(stubInfo, structure, chain, count, ident, slot, cachedOffset, returnAddress, callFrame);
}
- static void compilePutByIdTransition(JSGlobalData* globalData, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress)
+ static void compilePutByIdTransition(JSGlobalData* globalData, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress, bool direct)
{
JIT jit(globalData, codeBlock);
- jit.privateCompilePutByIdTransition(stubInfo, oldStructure, newStructure, cachedOffset, chain, returnAddress);
+ jit.privateCompilePutByIdTransition(stubInfo, oldStructure, newStructure, cachedOffset, chain, returnAddress, direct);
}
static void compileCTIMachineTrampolines(JSGlobalData* globalData, RefPtr<ExecutablePool>* executablePool, TrampolineStructure *trampolines)
@@ -230,7 +230,7 @@ namespace JSC {
}
static void patchGetByIdSelf(CodeBlock* codeblock, StructureStubInfo*, Structure*, size_t cachedOffset, ReturnAddressPtr returnAddress);
- static void patchPutByIdReplace(CodeBlock* codeblock, StructureStubInfo*, Structure*, size_t cachedOffset, ReturnAddressPtr returnAddress);
+ static void patchPutByIdReplace(CodeBlock* codeblock, StructureStubInfo*, Structure*, size_t cachedOffset, ReturnAddressPtr returnAddress, bool direct);
static void patchMethodCallProto(CodeBlock* codeblock, MethodCallLinkInfo&, JSFunction*, Structure*, JSObject*, ReturnAddressPtr);
static void compilePatchGetArrayLength(JSGlobalData* globalData, CodeBlock* codeBlock, ReturnAddressPtr returnAddress)
@@ -266,7 +266,7 @@ namespace JSC {
void privateCompileGetByIdProtoList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, Structure* prototypeStructure, const Identifier&, const PropertySlot&, size_t cachedOffset, CallFrame* callFrame);
void privateCompileGetByIdChainList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, StructureChain* chain, size_t count, const Identifier&, const PropertySlot&, size_t cachedOffset, CallFrame* callFrame);
void privateCompileGetByIdChain(StructureStubInfo*, Structure*, StructureChain*, size_t count, const Identifier&, const PropertySlot&, size_t cachedOffset, ReturnAddressPtr returnAddress, CallFrame* callFrame);
- void privateCompilePutByIdTransition(StructureStubInfo*, Structure*, Structure*, size_t cachedOffset, StructureChain*, ReturnAddressPtr returnAddress);
+ void privateCompilePutByIdTransition(StructureStubInfo*, Structure*, Structure*, size_t cachedOffset, StructureChain*, ReturnAddressPtr returnAddress, bool direct);
void privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* data, TrampolineStructure *trampolines);
Label privateCompileCTINativeCall(JSGlobalData*, bool isConstruct = false);
@@ -407,6 +407,47 @@ namespace JSC {
// sequencePutById
static const int sequencePutByIdInstructionSpace = 36;
static const int sequencePutByIdConstantSpace = 4;
+#elif CPU(ARM_THUMB2)
+ // These architecture specific value are used to enable patching - see comment on op_put_by_id.
+ static const int patchOffsetPutByIdStructure = 10;
+ static const int patchOffsetPutByIdExternalLoad = 26;
+ static const int patchLengthPutByIdExternalLoad = 12;
+ static const int patchOffsetPutByIdPropertyMapOffset1 = 46;
+ static const int patchOffsetPutByIdPropertyMapOffset2 = 58;
+ // These architecture specific value are used to enable patching - see comment on op_get_by_id.
+ static const int patchOffsetGetByIdStructure = 10;
+ static const int patchOffsetGetByIdBranchToSlowCase = 26;
+ static const int patchOffsetGetByIdExternalLoad = 26;
+ static const int patchLengthGetByIdExternalLoad = 12;
+ static const int patchOffsetGetByIdPropertyMapOffset1 = 46;
+ static const int patchOffsetGetByIdPropertyMapOffset2 = 58;
+ static const int patchOffsetGetByIdPutResult = 62;
+#if ENABLE(OPCODE_SAMPLING)
+ #error "OPCODE_SAMPLING is not yet supported"
+#else
+ static const int patchOffsetGetByIdSlowCaseCall = 30;
+#endif
+ static const int patchOffsetOpCallCompareToJump = 16;
+
+ static const int patchOffsetMethodCheckProtoObj = 24;
+ static const int patchOffsetMethodCheckProtoStruct = 34;
+ static const int patchOffsetMethodCheckPutFunction = 58;
+
+ // sequenceOpCall
+ static const int sequenceOpCallInstructionSpace = 12;
+ static const int sequenceOpCallConstantSpace = 2;
+ // sequenceMethodCheck
+ static const int sequenceMethodCheckInstructionSpace = 40;
+ static const int sequenceMethodCheckConstantSpace = 6;
+ // sequenceGetByIdHotPath
+ static const int sequenceGetByIdHotPathInstructionSpace = 36;
+ static const int sequenceGetByIdHotPathConstantSpace = 4;
+ // sequenceGetByIdSlowCase
+ static const int sequenceGetByIdSlowCaseInstructionSpace = 40;
+ static const int sequenceGetByIdSlowCaseConstantSpace = 2;
+ // sequencePutById
+ static const int sequencePutByIdInstructionSpace = 36;
+ static const int sequencePutByIdConstantSpace = 4;
#else
#error "JSVALUE32_64 not supported on this platform."
#endif
diff --git a/JavaScriptCore/jit/JITPropertyAccess.cpp b/JavaScriptCore/jit/JITPropertyAccess.cpp
index 4d36cfa..580e73f 100644
--- a/JavaScriptCore/jit/JITPropertyAccess.cpp
+++ b/JavaScriptCore/jit/JITPropertyAccess.cpp
@@ -307,10 +307,11 @@ void JIT::emit_op_put_by_id(Instruction* currentInstruction)
unsigned baseVReg = currentInstruction[1].u.operand;
Identifier* ident = &(m_codeBlock->identifier(currentInstruction[2].u.operand));
unsigned valueVReg = currentInstruction[3].u.operand;
+ unsigned direct = currentInstruction[8].u.operand;
emitGetVirtualRegisters(baseVReg, regT0, valueVReg, regT1);
- JITStubCall stubCall(this, cti_op_put_by_id_generic);
+ JITStubCall stubCall(this, direct ? cti_op_put_by_id_direct_generic, cti_op_put_by_id_generic);
stubCall.addArgument(regT0);
stubCall.addArgument(ImmPtr(ident));
stubCall.addArgument(regT1);
@@ -530,13 +531,14 @@ void JIT::emitSlow_op_put_by_id(Instruction* currentInstruction, Vector<SlowCase
{
unsigned baseVReg = currentInstruction[1].u.operand;
Identifier* ident = &(m_codeBlock->identifier(currentInstruction[2].u.operand));
+ unsigned direct = currentInstruction[8].u.operand;
unsigned propertyAccessInstructionIndex = m_propertyAccessInstructionIndex++;
linkSlowCaseIfNotJSCell(iter, baseVReg);
linkSlowCase(iter);
- JITStubCall stubCall(this, cti_op_put_by_id);
+ JITStubCall stubCall(this, direct ? cti_op_put_by_id_direct : cti_op_put_by_id);
stubCall.addArgument(regT0);
stubCall.addArgument(ImmPtr(ident));
stubCall.addArgument(regT1);
@@ -590,7 +592,7 @@ void JIT::testPrototype(Structure* structure, JumpList& failureCases)
failureCases.append(branchPtr(NotEqual, Address(regT2), regT3));
}
-void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress)
+void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress, bool direct)
{
JumpList failureCases;
// Check eax is an object of the right Structure.
@@ -599,8 +601,10 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure
testPrototype(oldStructure, failureCases);
// ecx = baseObject->m_structure
- for (RefPtr<Structure>* it = chain->head(); *it; ++it)
- testPrototype(it->get(), failureCases);
+ if (!direct) {
+ for (RefPtr<Structure>* it = chain->head(); *it; ++it)
+ testPrototype(it->get(), failureCases);
+ }
Call callTarget;
@@ -641,7 +645,7 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure
LinkBuffer patchBuffer(this, m_codeBlock->executablePool());
- patchBuffer.link(failureCall, FunctionPtr(cti_op_put_by_id_fail));
+ patchBuffer.link(failureCall, FunctionPtr(direct ? cti_op_put_by_id_direct_fail : cti_op_put_by_id_fail));
if (willNeedStorageRealloc) {
ASSERT(m_calls.size() == 1);
@@ -694,13 +698,13 @@ void JIT::patchMethodCallProto(CodeBlock* codeBlock, MethodCallLinkInfo& methodC
repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(cti_op_get_by_id));
}
-void JIT::patchPutByIdReplace(CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress)
+void JIT::patchPutByIdReplace(CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress, bool direct)
{
RepatchBuffer repatchBuffer(codeBlock);
// We don't want to patch more than once - in future go to cti_op_put_by_id_generic.
// Should probably go to cti_op_put_by_id_fail, but that doesn't do anything interesting right now.
- repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(cti_op_put_by_id_generic));
+ repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic));
int offset = sizeof(JSValue) * cachedOffset;
diff --git a/JavaScriptCore/jit/JITPropertyAccess32_64.cpp b/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
index 16cf84a..6234842 100644
--- a/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
+++ b/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
@@ -531,11 +531,12 @@ void JIT::emitSlow_op_put_by_id(Instruction* currentInstruction, Vector<SlowCase
{
int base = currentInstruction[1].u.operand;
int ident = currentInstruction[2].u.operand;
-
+ int direct = currentInstruction[8].u.operand;
+
linkSlowCaseIfNotJSCell(iter, base);
linkSlowCase(iter);
- JITStubCall stubCall(this, cti_op_put_by_id);
+ JITStubCall stubCall(this, direct ? cti_op_put_by_id_direct : cti_op_put_by_id);
stubCall.addArgument(regT1, regT0);
stubCall.addArgument(ImmPtr(&(m_codeBlock->identifier(ident))));
stubCall.addArgument(regT3, regT2);
@@ -592,7 +593,7 @@ void JIT::testPrototype(Structure* structure, JumpList& failureCases)
failureCases.append(branchPtr(NotEqual, AbsoluteAddress(&asCell(structure->m_prototype)->m_structure), ImmPtr(asCell(structure->m_prototype)->m_structure)));
}
-void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress)
+void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress, bool direct)
{
// It is assumed that regT0 contains the basePayload and regT1 contains the baseTag. The value can be found on the stack.
@@ -601,10 +602,12 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure
failureCases.append(branchPtr(NotEqual, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), ImmPtr(oldStructure)));
testPrototype(oldStructure, failureCases);
- // Verify that nothing in the prototype chain has a setter for this property.
- for (RefPtr<Structure>* it = chain->head(); *it; ++it)
- testPrototype(it->get(), failureCases);
-
+ if (!direct) {
+ // Verify that nothing in the prototype chain has a setter for this property.
+ for (RefPtr<Structure>* it = chain->head(); *it; ++it)
+ testPrototype(it->get(), failureCases);
+ }
+
// Reallocate property storage if needed.
Call callTarget;
bool willNeedStorageRealloc = oldStructure->propertyStorageCapacity() != newStructure->propertyStorageCapacity();
@@ -643,7 +646,7 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure
LinkBuffer patchBuffer(this, m_codeBlock->executablePool());
- patchBuffer.link(failureCall, FunctionPtr(cti_op_put_by_id_fail));
+ patchBuffer.link(failureCall, FunctionPtr(direct ? cti_op_put_by_id_direct_fail : cti_op_put_by_id_fail));
if (willNeedStorageRealloc) {
ASSERT(m_calls.size() == 1);
@@ -697,13 +700,13 @@ void JIT::patchMethodCallProto(CodeBlock* codeBlock, MethodCallLinkInfo& methodC
repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(cti_op_get_by_id));
}
-void JIT::patchPutByIdReplace(CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress)
+void JIT::patchPutByIdReplace(CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress, bool direct)
{
RepatchBuffer repatchBuffer(codeBlock);
// We don't want to patch more than once - in future go to cti_op_put_by_id_generic.
// Should probably go to cti_op_put_by_id_fail, but that doesn't do anything interesting right now.
- repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(cti_op_put_by_id_generic));
+ repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic));
int offset = sizeof(JSValue) * cachedOffset;
diff --git a/JavaScriptCore/jit/JITStubs.cpp b/JavaScriptCore/jit/JITStubs.cpp
index 30a9898..85bd54f 100644
--- a/JavaScriptCore/jit/JITStubs.cpp
+++ b/JavaScriptCore/jit/JITStubs.cpp
@@ -247,7 +247,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
#define REGISTER_FILE_OFFSET 0x50
#define CALLFRAME_OFFSET 0x54
#define EXCEPTION_OFFSET 0x58
-#define ENABLE_PROFILER_REFERENCE_OFFSET 0x64
+#define ENABLE_PROFILER_REFERENCE_OFFSET 0x60
#elif COMPILER(GCC) && CPU(ARM_TRADITIONAL)
@@ -844,7 +844,7 @@ JITThunks::~JITThunks()
#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
-NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot& slot, StructureStubInfo* stubInfo)
+NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot& slot, StructureStubInfo* stubInfo, bool direct)
{
// The interpreter checks for recursion here; I do not believe this can occur in CTI.
@@ -853,7 +853,7 @@ NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* co
// Uncacheable: give up.
if (!slot.isCacheable()) {
- ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(cti_op_put_by_id_generic));
+ ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic));
return;
}
@@ -861,13 +861,13 @@ NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* co
Structure* structure = baseCell->structure();
if (structure->isUncacheableDictionary()) {
- ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(cti_op_put_by_id_generic));
+ ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic));
return;
}
// If baseCell != base, then baseCell must be a proxy for another object.
if (baseCell != slot.base()) {
- ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(cti_op_put_by_id_generic));
+ ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic));
return;
}
@@ -876,7 +876,7 @@ NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* co
// Structure transition, cache transition info
if (slot.type() == PutPropertySlot::NewProperty) {
if (structure->isDictionary()) {
- ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(cti_op_put_by_id_generic));
+ ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(direct ? cti_op_put_by_id_direct_generic : cti_op_put_by_id_generic));
return;
}
@@ -885,13 +885,13 @@ NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* co
StructureChain* prototypeChain = structure->prototypeChain(callFrame);
stubInfo->initPutByIdTransition(structure->previousID(), structure, prototypeChain);
- JIT::compilePutByIdTransition(callFrame->scopeChain()->globalData, codeBlock, stubInfo, structure->previousID(), structure, slot.cachedOffset(), prototypeChain, returnAddress);
+ JIT::compilePutByIdTransition(callFrame->scopeChain()->globalData, codeBlock, stubInfo, structure->previousID(), structure, slot.cachedOffset(), prototypeChain, returnAddress, direct);
return;
}
stubInfo->initPutByIdReplace(structure);
- JIT::patchPutByIdReplace(codeBlock, stubInfo, structure, slot.cachedOffset(), returnAddress);
+ JIT::patchPutByIdReplace(codeBlock, stubInfo, structure, slot.cachedOffset(), returnAddress, direct);
}
NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo* stubInfo)
@@ -1344,6 +1344,15 @@ DEFINE_STUB_FUNCTION(void, op_put_by_id_generic)
CHECK_FOR_EXCEPTION_AT_END();
}
+DEFINE_STUB_FUNCTION(void, op_put_by_id_direct_generic)
+{
+ STUB_INIT_STACK_FRAME(stackFrame);
+
+ PutPropertySlot slot;
+ stackFrame.args[0].jsValue().putDirect(stackFrame.callFrame, stackFrame.args[1].identifier(), stackFrame.args[2].jsValue(), slot);
+ CHECK_FOR_EXCEPTION_AT_END();
+}
+
DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_generic)
{
STUB_INIT_STACK_FRAME(stackFrame);
@@ -1366,17 +1375,36 @@ DEFINE_STUB_FUNCTION(void, op_put_by_id)
STUB_INIT_STACK_FRAME(stackFrame);
CallFrame* callFrame = stackFrame.callFrame;
Identifier& ident = stackFrame.args[1].identifier();
-
+
PutPropertySlot slot;
stackFrame.args[0].jsValue().put(callFrame, ident, stackFrame.args[2].jsValue(), slot);
-
+
CodeBlock* codeBlock = stackFrame.callFrame->codeBlock();
StructureStubInfo* stubInfo = &codeBlock->getStubInfo(STUB_RETURN_ADDRESS);
if (!stubInfo->seenOnce())
stubInfo->setSeen();
else
- JITThunks::tryCachePutByID(callFrame, codeBlock, STUB_RETURN_ADDRESS, stackFrame.args[0].jsValue(), slot, stubInfo);
+ JITThunks::tryCachePutByID(callFrame, codeBlock, STUB_RETURN_ADDRESS, stackFrame.args[0].jsValue(), slot, stubInfo, false);
+
+ CHECK_FOR_EXCEPTION_AT_END();
+}
+DEFINE_STUB_FUNCTION(void, op_put_by_id_direct)
+{
+ STUB_INIT_STACK_FRAME(stackFrame);
+ CallFrame* callFrame = stackFrame.callFrame;
+ Identifier& ident = stackFrame.args[1].identifier();
+
+ PutPropertySlot slot;
+ stackFrame.args[0].jsValue().putDirect(callFrame, ident, stackFrame.args[2].jsValue(), slot);
+
+ CodeBlock* codeBlock = stackFrame.callFrame->codeBlock();
+ StructureStubInfo* stubInfo = &codeBlock->getStubInfo(STUB_RETURN_ADDRESS);
+ if (!stubInfo->seenOnce())
+ stubInfo->setSeen();
+ else
+ JITThunks::tryCachePutByID(callFrame, codeBlock, STUB_RETURN_ADDRESS, stackFrame.args[0].jsValue(), slot, stubInfo, true);
+
CHECK_FOR_EXCEPTION_AT_END();
}
@@ -1393,6 +1421,19 @@ DEFINE_STUB_FUNCTION(void, op_put_by_id_fail)
CHECK_FOR_EXCEPTION_AT_END();
}
+DEFINE_STUB_FUNCTION(void, op_put_by_id_direct_fail)
+{
+ STUB_INIT_STACK_FRAME(stackFrame);
+
+ CallFrame* callFrame = stackFrame.callFrame;
+ Identifier& ident = stackFrame.args[1].identifier();
+
+ PutPropertySlot slot;
+ stackFrame.args[0].jsValue().putDirect(callFrame, ident, stackFrame.args[2].jsValue(), slot);
+
+ CHECK_FOR_EXCEPTION_AT_END();
+}
+
DEFINE_STUB_FUNCTION(JSObject*, op_put_by_id_transition_realloc)
{
STUB_INIT_STACK_FRAME(stackFrame);
diff --git a/JavaScriptCore/jit/JITStubs.h b/JavaScriptCore/jit/JITStubs.h
index 6d627a1..a5b21e5 100644
--- a/JavaScriptCore/jit/JITStubs.h
+++ b/JavaScriptCore/jit/JITStubs.h
@@ -257,7 +257,7 @@ namespace JSC {
~JITThunks();
static void tryCacheGetByID(CallFrame*, CodeBlock*, ReturnAddressPtr returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot&, StructureStubInfo* stubInfo);
- static void tryCachePutByID(CallFrame*, CodeBlock*, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot&, StructureStubInfo* stubInfo);
+ static void tryCachePutByID(CallFrame*, CodeBlock*, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot&, StructureStubInfo* stubInfo, bool direct);
MacroAssemblerCodePtr ctiStringLengthTrampoline() { return m_trampolineStructure.ctiStringLengthTrampoline; }
MacroAssemblerCodePtr ctiVirtualCallLink() { return m_trampolineStructure.ctiVirtualCallLink; }
@@ -378,6 +378,9 @@ extern "C" {
void JIT_STUB cti_op_put_by_id(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_put_by_id_fail(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_put_by_id_generic(STUB_ARGS_DECLARATION);
+ void JIT_STUB cti_op_put_by_id_direct(STUB_ARGS_DECLARATION);
+ void JIT_STUB cti_op_put_by_id_direct_fail(STUB_ARGS_DECLARATION);
+ void JIT_STUB cti_op_put_by_id_direct_generic(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_put_by_index(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_put_by_val(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_put_by_val_byte_array(STUB_ARGS_DECLARATION);
diff --git a/JavaScriptCore/parser/ASTBuilder.h b/JavaScriptCore/parser/ASTBuilder.h
index 7dcdff0..3b7ffb5 100644
--- a/JavaScriptCore/parser/ASTBuilder.h
+++ b/JavaScriptCore/parser/ASTBuilder.h
@@ -249,16 +249,9 @@ public:
return FunctionBodyNode::create(m_globalData);
}
- PropertyNode* createGetterOrSetterProperty(const Identifier* getOrSet, const Identifier* name, ParameterNode* params, FunctionBodyNode* body, int openBracePos, int closeBracePos, int bodyStartLine, int bodyEndLine)
+ template <bool> PropertyNode* createGetterOrSetterProperty(PropertyNode::Type type, const Identifier* name, ParameterNode* params, FunctionBodyNode* body, int openBracePos, int closeBracePos, int bodyStartLine, int bodyEndLine)
{
ASSERT(name);
- PropertyNode::Type type;
- if (*getOrSet == "get")
- type = PropertyNode::Getter;
- else if (*getOrSet == "set")
- type = PropertyNode::Setter;
- else
- return 0;
body->setLoc(bodyStartLine, bodyEndLine);
return new (m_globalData) PropertyNode(m_globalData, *name, new (m_globalData) FuncExprNode(m_globalData, m_globalData->propertyNames->nullIdentifier, body, m_lexer->sourceCode(openBracePos, closeBracePos, bodyStartLine), params), type);
}
@@ -269,8 +262,8 @@ public:
ArgumentListNode* createArgumentsList(ExpressionNode* arg) { return new (m_globalData) ArgumentListNode(m_globalData, arg); }
ArgumentListNode* createArgumentsList(ArgumentListNode* args, ExpressionNode* arg) { return new (m_globalData) ArgumentListNode(m_globalData, args, arg); }
- PropertyNode* createProperty(const Identifier* propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, *propertyName, node, type); }
- PropertyNode* createProperty(double propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, propertyName, node, type); }
+ template <bool> PropertyNode* createProperty(const Identifier* propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, *propertyName, node, type); }
+ template <bool> PropertyNode* createProperty(JSGlobalData*, double propertyName, ExpressionNode* node, PropertyNode::Type type) { return new (m_globalData) PropertyNode(m_globalData, propertyName, node, type); }
PropertyListNode* createPropertyList(PropertyNode* property) { return new (m_globalData) PropertyListNode(m_globalData, property); }
PropertyListNode* createPropertyList(PropertyNode* property, PropertyListNode* tail) { return new (m_globalData) PropertyListNode(m_globalData, property, tail); }
@@ -576,7 +569,9 @@ public:
assignmentStackDepth--;
return result;
}
-
+
+ const Identifier& getName(Property property) { return property->name(); }
+ PropertyNode::Type getType(Property property) { return property->type(); }
private:
struct Scope {
Scope(JSGlobalData* globalData)
@@ -767,13 +762,13 @@ ExpressionNode* ASTBuilder::makeBinaryNode(int token, pair<ExpressionNode*, Bina
case AND:
return new (m_globalData) LogicalOpNode(m_globalData, lhs.first, rhs.first, OpLogicalAnd);
- case '|':
+ case BITOR:
return new (m_globalData) BitOrNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
- case '^':
+ case BITXOR:
return new (m_globalData) BitXOrNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
- case '&':
+ case BITAND:
return new (m_globalData) BitAndNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
case EQEQ:
@@ -788,10 +783,10 @@ ExpressionNode* ASTBuilder::makeBinaryNode(int token, pair<ExpressionNode*, Bina
case STRNEQ:
return new (m_globalData) NotStrictEqualNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
- case '<':
+ case LT:
return new (m_globalData) LessNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
- case '>':
+ case GT:
return new (m_globalData) GreaterNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
case LE:
@@ -821,19 +816,19 @@ ExpressionNode* ASTBuilder::makeBinaryNode(int token, pair<ExpressionNode*, Bina
case URSHIFT:
return new (m_globalData) UnsignedRightShiftNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
- case '+':
+ case PLUS:
return makeAddNode(lhs.first, rhs.first, rhs.second.hasAssignment);
- case '-':
+ case MINUS:
return makeSubNode(lhs.first, rhs.first, rhs.second.hasAssignment);
- case '*':
+ case TIMES:
return makeMultNode(lhs.first, rhs.first, rhs.second.hasAssignment);
- case '/':
+ case DIVIDE:
return makeDivNode(lhs.first, rhs.first, rhs.second.hasAssignment);
- case '%':
+ case MOD:
return new (m_globalData) ModNode(m_globalData, lhs.first, rhs.first, rhs.second.hasAssignment);
}
CRASH();
diff --git a/JavaScriptCore/parser/JSParser.cpp b/JavaScriptCore/parser/JSParser.cpp
index 5825270..1fb1a9187 100644
--- a/JavaScriptCore/parser/JSParser.cpp
+++ b/JavaScriptCore/parser/JSParser.cpp
@@ -32,6 +32,7 @@ using namespace JSC;
#include "JSGlobalData.h"
#include "NodeInfo.h"
#include "ASTBuilder.h"
+#include <wtf/HashFunctions.h>
#include <utility>
using namespace std;
@@ -58,12 +59,14 @@ namespace JSC {
#define TreeProperty typename TreeBuilder::Property
#define TreePropertyList typename TreeBuilder::PropertyList
+COMPILE_ASSERT(LastUntaggedToken < 64, LessThan64UntaggedTokens);
+
// This matches v8
static const ptrdiff_t kMaxParserStackUsage = 128 * sizeof(void*) * 1024;
class JSParser {
public:
- JSParser(Lexer*, JSGlobalData*);
+ JSParser(Lexer*, JSGlobalData*, SourceProvider*);
bool parseProgram();
private:
struct AllowInOverride {
@@ -84,14 +87,14 @@ private:
const JSToken& token() { return m_token; }
void next()
{
- m_lastLine = token().m_info.last_line;
- m_lastTokenEnd = token().m_info.last_column;
+ m_lastLine = token().m_info.line;
+ m_lastTokenEnd = token().m_info.endOffset;
m_lexer->setLastLineNumber(m_lastLine);
m_token.m_type = m_lexer->lex(&m_token.m_data, &m_token.m_info);
m_tokenCount++;
}
- bool consume(int expected)
+ bool consume(JSTokenType expected)
{
bool result = m_token.m_type == expected;
failIfFalse(result);
@@ -99,24 +102,24 @@ private:
return result;
}
- bool match(int expected)
+ bool match(JSTokenType expected)
{
return m_token.m_type == expected;
}
int tokenStart()
{
- return token().m_info.first_column;
+ return token().m_info.startOffset;
}
int tokenLine()
{
- return token().m_info.first_line;
+ return token().m_info.line;
}
int tokenEnd()
{
- return token().m_info.last_column;
+ return token().m_info.endOffset;
}
template <class TreeBuilder> TreeSourceElements parseSourceElements(TreeBuilder&);
@@ -150,20 +153,21 @@ private:
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parsePrimaryExpression(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseArrayLiteral(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseObjectLiteral(TreeBuilder&);
+ template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseStrictObjectLiteral(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeArguments parseArguments(TreeBuilder&);
- template <class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(TreeBuilder&);
+ template <bool strict, class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&, bool& usesArguments);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseVarDeclarationList(TreeBuilder&, int& declarations, const Identifier*& lastIdent, TreeExpression& lastInitializer, int& identStart, int& initStart, int& initEnd);
template <class TreeBuilder> ALWAYS_INLINE TreeConstDeclList parseConstDeclarationList(TreeBuilder& context);
enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName };
template <FunctionRequirements, class TreeBuilder> bool parseFunctionInfo(TreeBuilder&, const Identifier*&, TreeFormalParameterList&, TreeFunctionBody&, int& openBrace, int& closeBrace, int& bodyStartLine);
- int isBinaryOperator(int token);
+ ALWAYS_INLINE int isBinaryOperator(JSTokenType token);
bool allowAutomaticSemicolon();
bool autoSemiColon()
{
- if (token().m_type == ';') {
+ if (token().m_type == SEMICOLON) {
next();
return true;
}
@@ -194,15 +198,16 @@ private:
int m_lastTokenEnd;
int m_assignmentCount;
int m_nonLHSCount;
+ bool m_syntaxAlreadyValidated;
};
-int jsParse(JSGlobalData* globalData)
+int jsParse(JSGlobalData* globalData, const SourceCode* source)
{
- JSParser parser(globalData->lexer, globalData);
+ JSParser parser(globalData->lexer, globalData, source->provider());
return parser.parseProgram();
}
-JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData)
+JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData, SourceProvider* provider)
: m_lexer(lexer)
, m_endAddress(0)
, m_error(false)
@@ -213,6 +218,7 @@ JSParser::JSParser(Lexer* lexer, JSGlobalData* globalData)
, m_lastTokenEnd(0)
, m_assignmentCount(0)
, m_nonLHSCount(0)
+ , m_syntaxAlreadyValidated(provider->isValid())
{
m_endAddress = *(globalData->stackGuards);
if (!m_endAddress) {
@@ -228,7 +234,7 @@ bool JSParser::parseProgram()
{
ASTBuilder context(m_globalData, m_lexer);
SourceElements* sourceElements = parseSourceElements<ASTBuilder>(context);
- if (!sourceElements || !consume(0))
+ if (!sourceElements || !consume(EOFTOK))
return true;
m_globalData->parser->didFinishParsing(sourceElements, context.varDeclarations(), context.funcDeclarations(), context.features(),
m_lastLine, context.numConstants());
@@ -237,7 +243,7 @@ bool JSParser::parseProgram()
bool JSParser::allowAutomaticSemicolon()
{
- return match(CLOSEBRACE) || match(0) || m_lexer->prevTerminator();
+ return match(CLOSEBRACE) || match(EOFTOK) || m_lexer->prevTerminator();
}
template <class TreeBuilder> TreeSourceElements JSParser::parseSourceElements(TreeBuilder& context)
@@ -288,11 +294,11 @@ template <class TreeBuilder> TreeStatement JSParser::parseDoWhileStatement(TreeB
failIfFalse(statement);
int endLine = tokenLine();
consumeOrFail(WHILE);
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
TreeExpression expr = parseExpression(context);
failIfFalse(expr);
- consumeOrFail(')');
- if (match(';'))
+ consumeOrFail(CLOSEPAREN);
+ if (match(SEMICOLON))
next(); // Always performs automatic semicolon insertion.
return context.createDoWhileStatement(statement, expr, startLine, endLine);
}
@@ -302,11 +308,11 @@ template <class TreeBuilder> TreeStatement JSParser::parseWhileStatement(TreeBui
ASSERT(match(WHILE));
int startLine = tokenLine();
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
TreeExpression expr = parseExpression(context);
failIfFalse(expr);
int endLine = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement statement = parseStatement(context);
failIfFalse(statement);
return context.createWhileStatement(expr, statement, startLine, endLine);
@@ -325,7 +331,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseVarDeclarationList(Tr
const Identifier* name = token().m_data.ident;
lastIdent = name;
next();
- bool hasInitializer = match('=');
+ bool hasInitializer = match(EQUAL);
context.addVar(name, (hasInitializer || (!m_allowsIn && match(INTOKEN))) ? DeclarationStacks::HasInitializer : 0);
if (hasInitializer) {
int varDivot = tokenStart() + 1;
@@ -343,7 +349,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseVarDeclarationList(Tr
else
varDecls = context.combineCommaNodes(varDecls, node);
}
- } while (match(','));
+ } while (match(COMMA));
return varDecls;
}
@@ -356,7 +362,7 @@ template <class TreeBuilder> TreeConstDeclList JSParser::parseConstDeclarationLi
matchOrFail(IDENT);
const Identifier* name = token().m_data.ident;
next();
- bool hasInitializer = match('=');
+ bool hasInitializer = match(EQUAL);
context.addVar(name, DeclarationStacks::IsConstant | (hasInitializer ? DeclarationStacks::HasInitializer : 0));
TreeExpression initializer = 0;
if (hasInitializer) {
@@ -366,7 +372,7 @@ template <class TreeBuilder> TreeConstDeclList JSParser::parseConstDeclarationLi
tail = context.appendConstDecl(tail, name, initializer);
if (!constDecls)
constDecls = tail;
- } while (match(','));
+ } while (match(COMMA));
return constDecls;
}
@@ -375,7 +381,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseForStatement(TreeBuild
ASSERT(match(FOR));
int startLine = tokenLine();
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
int nonLHSCount = m_nonLHSCount;
int declarations = 0;
int declsStart = 0;
@@ -400,7 +406,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseForStatement(TreeBuild
fail();
// Remainder of a standard for loop is handled identically
- if (declarations > 1 || match(';'))
+ if (declarations > 1 || match(SEMICOLON))
goto standardForLoop;
// Handle for-in with var declaration
@@ -413,7 +419,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseForStatement(TreeBuild
int exprEnd = lastTokenEnd();
int endLine = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement statement = parseStatement(context);
failIfFalse(statement);
@@ -421,7 +427,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseForStatement(TreeBuild
return context.createForInLoop(forInTarget, forInInitializer, expr, statement, declsStart, inLocation, exprEnd, initStart, initEnd, startLine, endLine);
}
- if (!match(';')) {
+ if (!match(SEMICOLON)) {
m_allowsIn = false;
declsStart = tokenStart();
decls = parseExpression(context);
@@ -430,25 +436,25 @@ template <class TreeBuilder> TreeStatement JSParser::parseForStatement(TreeBuild
failIfFalse(decls);
}
- if (match(';')) {
+ if (match(SEMICOLON)) {
standardForLoop:
// Standard for loop
next();
TreeExpression condition = 0;
- if (!match(';')) {
+ if (!match(SEMICOLON)) {
condition = parseExpression(context);
failIfFalse(condition);
}
- consumeOrFail(';');
+ consumeOrFail(SEMICOLON);
TreeExpression increment = 0;
- if (!match(')')) {
+ if (!match(CLOSEPAREN)) {
increment = parseExpression(context);
failIfFalse(increment);
}
int endLine = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement statement = parseStatement(context);
failIfFalse(statement);
return context.createForLoop(decls, condition, increment, statement, hasDeclaration, startLine, endLine);
@@ -461,7 +467,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseForStatement(TreeBuild
failIfFalse(expr);
int exprEnd = lastTokenEnd();
int endLine = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement statement = parseStatement(context);
failIfFalse(statement);
@@ -519,14 +525,14 @@ template <class TreeBuilder> TreeStatement JSParser::parseReturnStatement(TreeBu
// We do the auto semicolon check before attempting to parse an expression
// as we need to ensure the a line break after the return correctly terminates
// the statement
- if (match(';'))
+ if (match(SEMICOLON))
endLine = tokenLine();
if (autoSemiColon())
return context.createReturnStatement(0, start, end, startLine, endLine);
TreeExpression expr = parseExpression(context);
failIfFalse(expr);
end = lastTokenEnd();
- if (match(';'))
+ if (match(SEMICOLON))
endLine = tokenLine();
failIfFalse(autoSemiColon());
return context.createReturnStatement(expr, start, end, startLine, endLine);
@@ -553,14 +559,14 @@ template <class TreeBuilder> TreeStatement JSParser::parseWithStatement(TreeBuil
ASSERT(match(WITH));
int startLine = tokenLine();
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
int start = tokenStart();
TreeExpression expr = parseExpression(context);
failIfFalse(expr);
int end = lastTokenEnd();
int endLine = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement statement = parseStatement(context);
failIfFalse(statement);
@@ -573,11 +579,11 @@ template <class TreeBuilder> TreeStatement JSParser::parseSwitchStatement(TreeBu
ASSERT(match(SWITCH));
int startLine = tokenLine();
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
TreeExpression expr = parseExpression(context);
failIfFalse(expr);
int endLine = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
consumeOrFail(OPENBRACE);
TreeClauseList firstClauses = parseSwitchClauses(context);
@@ -601,7 +607,7 @@ template <class TreeBuilder> TreeClauseList JSParser::parseSwitchClauses(TreeBui
next();
TreeExpression condition = parseExpression(context);
failIfFalse(condition);
- consumeOrFail(':');
+ consumeOrFail(COLON);
TreeSourceElements statements = parseSourceElements(context);
failIfFalse(statements);
TreeClause clause = context.createClause(condition, statements);
@@ -612,7 +618,7 @@ template <class TreeBuilder> TreeClauseList JSParser::parseSwitchClauses(TreeBui
next();
TreeExpression condition = parseExpression(context);
failIfFalse(condition);
- consumeOrFail(':');
+ consumeOrFail(COLON);
TreeSourceElements statements = parseSourceElements(context);
failIfFalse(statements);
clause = context.createClause(condition, statements);
@@ -626,7 +632,7 @@ template <class TreeBuilder> TreeClause JSParser::parseSwitchDefaultClause(TreeB
if (!match(DEFAULT))
return 0;
next();
- consumeOrFail(':');
+ consumeOrFail(COLON);
TreeSourceElements statements = parseSourceElements(context);
failIfFalse(statements);
return context.createClause(0, statements);
@@ -650,11 +656,11 @@ template <class TreeBuilder> TreeStatement JSParser::parseTryStatement(TreeBuild
if (match(CATCH)) {
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
matchOrFail(IDENT);
ident = token().m_data.ident;
next();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
matchOrFail(OPENBRACE);
int initialEvalCount = context.evalCount();
catchBlock = parseBlockStatement(context);
@@ -678,7 +684,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseDebuggerStatement(Tree
int startLine = tokenLine();
int endLine = startLine;
next();
- if (match(';'))
+ if (match(SEMICOLON))
startLine = tokenLine();
failIfFalse(autoSemiColon());
return context.createDebugger(startLine, endLine);
@@ -712,7 +718,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseStatement(TreeBuilder&
return parseConstDeclaration(context);
case FUNCTION:
return parseFunctionDeclaration(context);
- case ';':
+ case SEMICOLON:
next();
return context.createEmptyStatement();
case IF:
@@ -739,7 +745,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseStatement(TreeBuilder&
return parseTryStatement(context);
case DEBUGGER:
return parseDebuggerStatement(context);
- case 0:
+ case EOFTOK:
case CASE:
case CLOSEBRACE:
case DEFAULT:
@@ -759,7 +765,7 @@ template <class TreeBuilder> TreeFormalParameterList JSParser::parseFormalParame
TreeFormalParameterList list = context.createFormalParameterList(*token().m_data.ident);
TreeFormalParameterList tail = list;
next();
- while (match(',')) {
+ while (match(COMMA)) {
next();
matchOrFail(IDENT);
const Identifier* ident = token().m_data.ident;
@@ -786,13 +792,13 @@ template <JSParser::FunctionRequirements requirements, class TreeBuilder> bool J
next();
} else if (requirements == FunctionNeedsName)
return false;
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
bool usesArguments = false;
- if (!match(')')) {
+ if (!match(CLOSEPAREN)) {
parameters = parseFormalParameters(context, usesArguments);
failIfFalse(parameters);
}
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
matchOrFail(OPENBRACE);
openBracePos = token().m_data.intValue;
@@ -843,7 +849,7 @@ template <class TreeBuilder> TreeStatement JSParser::parseExpressionOrLabelState
return context.createExprStatement(expression, startLine, m_lastLine);
failIfFalse(currentToken + 1 == m_tokenCount);
int end = tokenEnd();
- consumeOrFail(':');
+ consumeOrFail(COLON);
TreeStatement statement = parseStatement(context);
failIfFalse(statement);
return context.createLabelStatement(ident, statement, start, end);
@@ -865,12 +871,12 @@ template <class TreeBuilder> TreeStatement JSParser::parseIfStatement(TreeBuilde
int start = tokenLine();
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
TreeExpression condition = parseExpression(context);
failIfFalse(condition);
int end = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement trueBlock = parseStatement(context);
failIfFalse(trueBlock);
@@ -894,12 +900,12 @@ template <class TreeBuilder> TreeStatement JSParser::parseIfStatement(TreeBuilde
int innerStart = tokenLine();
next();
- consumeOrFail('(');
+ consumeOrFail(OPENPAREN);
TreeExpression innerCondition = parseExpression(context);
failIfFalse(innerCondition);
int innerEnd = tokenLine();
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
TreeStatement innerTrueBlock = parseStatement(context);
failIfFalse(innerTrueBlock);
@@ -938,14 +944,14 @@ template <class TreeBuilder> TreeExpression JSParser::parseExpression(TreeBuilde
failIfStackOverflow();
TreeExpression node = parseAssignmentExpression(context);
failIfFalse(node);
- if (!match(','))
+ if (!match(COMMA))
return node;
next();
m_nonLHSCount++;
TreeExpression right = parseAssignmentExpression(context);
failIfFalse(right);
typename TreeBuilder::Comma commaNode = context.createCommaExpr(node, right);
- while (match(',')) {
+ while (match(COMMA)) {
next();
right = parseAssignmentExpression(context);
failIfFalse(right);
@@ -971,7 +977,7 @@ template <typename TreeBuilder> TreeExpression JSParser::parseAssignmentExpressi
bool hadAssignment = false;
while (true) {
switch (token().m_type) {
- case '=': op = OpEqual; break;
+ case EQUAL: op = OpEqual; break;
case PLUSEQUAL: op = OpPlusEq; break;
case MINUSEQUAL: op = OpMinusEq; break;
case MULTEQUAL: op = OpMultEq; break;
@@ -1013,92 +1019,28 @@ template <class TreeBuilder> TreeExpression JSParser::parseConditionalExpression
{
TreeExpression cond = parseBinaryExpression(context);
failIfFalse(cond);
- if (!match('?'))
+ if (!match(QUESTION))
return cond;
m_nonLHSCount++;
next();
TreeExpression lhs = parseAssignmentExpression(context);
- consumeOrFail(':');
+ consumeOrFail(COLON);
TreeExpression rhs = parseAssignmentExpression(context);
failIfFalse(rhs);
return context.createConditionalExpr(cond, lhs, rhs);
}
-static bool isUnaryOp(int token)
+ALWAYS_INLINE static bool isUnaryOp(JSTokenType token)
{
- switch (token) {
- case '!':
- case '~':
- case '-':
- case '+':
- case PLUSPLUS:
- case AUTOPLUSPLUS:
- case MINUSMINUS:
- case AUTOMINUSMINUS:
- case TYPEOF:
- case VOIDTOKEN:
- case DELETETOKEN:
- return true;
- default:
- return false;
- }
+ return token & UnaryOpTokenFlag;
}
-int JSParser::isBinaryOperator(int token)
+int JSParser::isBinaryOperator(JSTokenType token)
{
- switch (token) {
- case OR:
- return 1;
-
- case AND:
- return 2;
-
- case '|':
- return 3;
-
- case '^':
- return 4;
-
- case '&':
- return 5;
-
- case EQEQ:
- case NE:
- case STREQ:
- case STRNEQ:
- return 6;
-
- case '<':
- case '>':
- case LE:
- case GE:
- case INSTANCEOF:
- return 7;
-
- case INTOKEN:
- // same precedence as the above but needs a validity check
- if (m_allowsIn)
- return 7;
- return 0;
-
- case LSHIFT:
- case RSHIFT:
- case URSHIFT:
- return 8;
-
- case '+':
- case '-':
- return 9;
-
- case '*':
- case '/':
- case '%':
- return 10;
-
- default:
- return 0;
- }
+ if (m_allowsIn)
+ return token & (BinaryOpTokenPrecedenceMask << BinaryOpTokenAllowsInPrecedenceAdditionalShift);
+ return token & BinaryOpTokenPrecedenceMask;
}
template <class TreeBuilder> TreeExpression JSParser::parseBinaryExpression(TreeBuilder& context)
@@ -1145,7 +1087,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseBinaryExpression(Tree
}
-template <class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& context)
+template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& context)
{
bool wasIdent = false;
switch (token().m_type) {
@@ -1154,11 +1096,11 @@ template <class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& c
case STRING: {
const Identifier* ident = token().m_data.ident;
next();
- if (match(':')) {
+ if (match(COLON)) {
next();
TreeExpression node = parseAssignmentExpression(context);
failIfFalse(node);
- return context.createProperty(ident, node, PropertyNode::Constant);
+ return context.template createProperty<complete>(ident, node, PropertyNode::Constant);
}
failIfFalse(wasIdent);
matchOrFail(IDENT);
@@ -1168,23 +1110,32 @@ template <class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& c
int openBracePos = 0;
int closeBracePos = 0;
int bodyStartLine = 0;
+ PropertyNode::Type type;
+ if (*ident == m_globalData->propertyNames->get)
+ type = PropertyNode::Getter;
+ else if (*ident == m_globalData->propertyNames->set)
+ type = PropertyNode::Setter;
+ else
+ fail();
failIfFalse(parseFunctionInfo<FunctionNeedsName>(context, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine));
- return context.createGetterOrSetterProperty(ident, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine);
+ return context.template createGetterOrSetterProperty<complete>(type, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine);
}
case NUMBER: {
double propertyName = token().m_data.doubleValue;
next();
- consumeOrFail(':');
+ consumeOrFail(COLON);
TreeExpression node = parseAssignmentExpression(context);
failIfFalse(node);
- return context.createProperty(propertyName, node, PropertyNode::Constant);
+ return context.template createProperty<complete>(m_globalData, propertyName, node, PropertyNode::Constant);
}
+ default:
+ fail();
}
- fail();
}
template <class TreeBuilder> TreeExpression JSParser::parseObjectLiteral(TreeBuilder& context)
{
+ int startOffset = token().m_data.intValue;
consumeOrFail(OPENBRACE);
if (match(CLOSEBRACE)) {
@@ -1192,20 +1143,27 @@ template <class TreeBuilder> TreeExpression JSParser::parseObjectLiteral(TreeBui
return context.createObjectLiteral();
}
- TreeProperty property = parseProperty(context);
+ TreeProperty property = parseProperty<false>(context);
failIfFalse(property);
-
+ if (!m_syntaxAlreadyValidated && context.getType(property) != PropertyNode::Constant) {
+ m_lexer->setOffset(startOffset);
+ next();
+ return parseStrictObjectLiteral(context);
+ }
TreePropertyList propertyList = context.createPropertyList(property);
TreePropertyList tail = propertyList;
-
- while (match(',')) {
+ while (match(COMMA)) {
next();
// allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939
if (match(CLOSEBRACE))
break;
- property = parseProperty(context);
+ property = parseProperty<false>(context);
failIfFalse(property);
-
+ if (!m_syntaxAlreadyValidated && context.getType(property) != PropertyNode::Constant) {
+ m_lexer->setOffset(startOffset);
+ next();
+ return parseStrictObjectLiteral(context);
+ }
tail = context.createPropertyList(property, tail);
}
@@ -1214,16 +1172,62 @@ template <class TreeBuilder> TreeExpression JSParser::parseObjectLiteral(TreeBui
return context.createObjectLiteral(propertyList);
}
+template <class TreeBuilder> TreeExpression JSParser::parseStrictObjectLiteral(TreeBuilder& context)
+{
+ consumeOrFail(OPENBRACE);
+
+ if (match(CLOSEBRACE)) {
+ next();
+ return context.createObjectLiteral();
+ }
+
+ TreeProperty property = parseProperty<true>(context);
+ failIfFalse(property);
+
+ typedef HashMap<RefPtr<UString::Rep>, unsigned, IdentifierRepHash> ObjectValidationMap;
+ ObjectValidationMap objectValidator;
+ // Add the first property
+ if (!m_syntaxAlreadyValidated)
+ objectValidator.add(context.getName(property).ustring().rep(), context.getType(property));
+
+ TreePropertyList propertyList = context.createPropertyList(property);
+ TreePropertyList tail = propertyList;
+ while (match(COMMA)) {
+ next();
+ // allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939
+ if (match(CLOSEBRACE))
+ break;
+ property = parseProperty<true>(context);
+ failIfFalse(property);
+ if (!m_syntaxAlreadyValidated) {
+ std::pair<ObjectValidationMap::iterator, bool> propertyEntryIter = objectValidator.add(context.getName(property).ustring().rep(), context.getType(property));
+ if (!propertyEntryIter.second) {
+ if ((context.getType(property) & propertyEntryIter.first->second) != PropertyNode::Constant) {
+ // Can't have multiple getters or setters with the same name, nor can we define
+ // a property as both an accessor and a constant value
+ failIfTrue(context.getType(property) & propertyEntryIter.first->second);
+ failIfTrue((context.getType(property) | propertyEntryIter.first->second) & PropertyNode::Constant);
+ }
+ }
+ }
+ tail = context.createPropertyList(property, tail);
+ }
+
+ consumeOrFail(CLOSEBRACE);
+
+ return context.createObjectLiteral(propertyList);
+}
+
template <class TreeBuilder> TreeExpression JSParser::parseArrayLiteral(TreeBuilder& context)
{
- consumeOrFail('[');
+ consumeOrFail(OPENBRACKET);
int elisions = 0;
- while (match(',')) {
+ while (match(COMMA)) {
next();
elisions++;
}
- if (match(']')) {
+ if (match(CLOSEBRACKET)) {
next();
return context.createArray(elisions);
}
@@ -1233,16 +1237,16 @@ template <class TreeBuilder> TreeExpression JSParser::parseArrayLiteral(TreeBuil
typename TreeBuilder::ElementList elementList = context.createElementList(elisions, elem);
typename TreeBuilder::ElementList tail = elementList;
elisions = 0;
- while (match(',')) {
+ while (match(COMMA)) {
next();
elisions = 0;
- while (match(',')) {
+ while (match(COMMA)) {
next();
elisions++;
}
- if (match(']')) {
+ if (match(CLOSEBRACKET)) {
next();
return context.createArray(elisions, elementList);
}
@@ -1251,7 +1255,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseArrayLiteral(TreeBuil
tail = context.createElementList(tail, elisions, elem);
}
- consumeOrFail(']');
+ consumeOrFail(CLOSEBRACKET);
return context.createArray(elementList);
}
@@ -1261,14 +1265,14 @@ template <class TreeBuilder> TreeExpression JSParser::parsePrimaryExpression(Tre
switch (token().m_type) {
case OPENBRACE:
return parseObjectLiteral(context);
- case '[':
+ case OPENBRACKET:
return parseArrayLiteral(context);
- case '(': {
+ case OPENPAREN: {
next();
int oldNonLHSCount = m_nonLHSCount;
TreeExpression result = parseExpression(context);
m_nonLHSCount = oldNonLHSCount;
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
return result;
}
@@ -1305,7 +1309,7 @@ template <class TreeBuilder> TreeExpression JSParser::parsePrimaryExpression(Tre
return context.createBoolean(false);
}
case DIVEQUAL:
- case '/': {
+ case DIVIDE: {
/* regexp */
const Identifier* pattern;
const Identifier* flags;
@@ -1318,14 +1322,15 @@ template <class TreeBuilder> TreeExpression JSParser::parsePrimaryExpression(Tre
next();
return context.createRegex(*pattern, *flags, start);
}
+ default:
+ fail();
}
- fail();
}
template <class TreeBuilder> TreeArguments JSParser::parseArguments(TreeBuilder& context)
{
- consumeOrFail('(');
- if (match(')')) {
+ consumeOrFail(OPENPAREN);
+ if (match(CLOSEPAREN)) {
next();
return context.createArguments();
}
@@ -1334,13 +1339,13 @@ template <class TreeBuilder> TreeArguments JSParser::parseArguments(TreeBuilder&
TreeArgumentsList argList = context.createArgumentsList(firstArg);
TreeArgumentsList tail = argList;
- while (match(',')) {
+ while (match(COMMA)) {
next();
TreeExpression arg = parseAssignmentExpression(context);
failIfFalse(arg);
tail = context.createArgumentsList(tail, arg);
}
- consumeOrFail(')');
+ consumeOrFail(CLOSEPAREN);
return context.createArguments(argList);
}
@@ -1370,7 +1375,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseMemberExpression(Tree
failIfFalse(base);
while (true) {
switch (token().m_type) {
- case '[': {
+ case OPENBRACKET: {
int expressionEnd = lastTokenEnd();
next();
int nonLHSCount = m_nonLHSCount;
@@ -1378,15 +1383,15 @@ template <class TreeBuilder> TreeExpression JSParser::parseMemberExpression(Tree
TreeExpression property = parseExpression(context);
failIfFalse(property);
base = context.createBracketAccess(base, property, initialAssignments != m_assignmentCount, expressionStart, expressionEnd, tokenEnd());
- if (!consume(']'))
+ if (!consume(CLOSEBRACKET))
fail();
m_nonLHSCount = nonLHSCount;
break;
}
- case '(': {
+ case OPENPAREN: {
if (newCount) {
newCount--;
- if (match('(')) {
+ if (match(OPENPAREN)) {
int exprEnd = lastTokenEnd();
TreeArguments arguments = parseArguments(context);
failIfFalse(arguments);
@@ -1403,7 +1408,7 @@ template <class TreeBuilder> TreeExpression JSParser::parseMemberExpression(Tree
}
break;
}
- case '.': {
+ case DOT: {
int expressionEnd = lastTokenEnd();
next();
matchOrFail(IDENT);
@@ -1446,6 +1451,8 @@ template <class TreeBuilder> TreeExpression JSParser::parseUnaryExpression(TreeB
m_assignmentCount++;
next();
break;
+ default:
+ break;
}
int end = lastTokenEnd();
@@ -1455,16 +1462,16 @@ template <class TreeBuilder> TreeExpression JSParser::parseUnaryExpression(TreeB
while (tokenStackDepth) {
switch (context.unaryTokenStackLastType(tokenStackDepth)) {
- case '!':
+ case EXCLAMATION:
expr = context.createLogicalNot(expr);
break;
- case '~':
+ case TILDE:
expr = context.makeBitwiseNotNode(expr);
break;
- case '-':
+ case MINUS:
expr = context.makeNegateNode(expr);
break;
- case '+':
+ case PLUS:
expr = context.createUnaryPlus(expr);
break;
case PLUSPLUS:
diff --git a/JavaScriptCore/parser/JSParser.h b/JavaScriptCore/parser/JSParser.h
index 554556f..60f284c 100644
--- a/JavaScriptCore/parser/JSParser.h
+++ b/JavaScriptCore/parser/JSParser.h
@@ -30,71 +30,108 @@ namespace JSC {
class Identifier;
class JSGlobalData;
+class SourceCode;
+
+enum {
+ UnaryOpTokenFlag = 64,
+ BinaryOpTokenPrecedenceShift = 7,
+ BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4,
+ BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift
+};
+
+#define BINARY_OP_PRECEDENCE(prec) (((prec) << BinaryOpTokenPrecedenceShift) | ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift)))
+#define IN_OP_PRECEDENCE(prec) ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift))
enum JSTokenType {
- NULLTOKEN = 258,
- TRUETOKEN = 259,
- FALSETOKEN = 260,
- BREAK = 261,
- CASE = 262,
- DEFAULT = 263,
- FOR = 264,
- NEW = 265,
- VAR = 266,
- CONSTTOKEN = 267,
- CONTINUE = 268,
- FUNCTION = 269,
- RETURN = 270,
- VOIDTOKEN = 271,
- DELETETOKEN = 272,
- IF = 273,
- THISTOKEN = 274,
- DO = 275,
- WHILE = 276,
- INTOKEN = 277,
- INSTANCEOF = 278,
- TYPEOF = 279,
- SWITCH = 280,
- WITH = 281,
- RESERVED = 282,
- THROW = 283,
- TRY = 284,
- CATCH = 285,
- FINALLY = 286,
- DEBUGGER = 287,
- IF_WITHOUT_ELSE = 288,
- ELSE = 289,
- EQEQ = 290,
- NE = 291,
- STREQ = 292,
- STRNEQ = 293,
- LE = 294,
- GE = 295,
- OR = 296,
- AND = 297,
- PLUSPLUS = 298,
- MINUSMINUS = 299,
- LSHIFT = 300,
- RSHIFT = 301,
- URSHIFT = 302,
- PLUSEQUAL = 303,
- MINUSEQUAL = 304,
- MULTEQUAL = 305,
- DIVEQUAL = 306,
- LSHIFTEQUAL = 307,
- RSHIFTEQUAL = 308,
- URSHIFTEQUAL = 309,
- ANDEQUAL = 310,
- MODEQUAL = 311,
- XOREQUAL = 312,
- OREQUAL = 313,
- OPENBRACE = 314,
- CLOSEBRACE = 315,
- NUMBER = 316,
- IDENT = 317,
- STRING = 318,
- AUTOPLUSPLUS = 319,
- AUTOMINUSMINUS = 320
+ NULLTOKEN,
+ TRUETOKEN,
+ FALSETOKEN,
+ BREAK,
+ CASE,
+ DEFAULT,
+ FOR,
+ NEW,
+ VAR,
+ CONSTTOKEN,
+ CONTINUE,
+ FUNCTION,
+ RETURN,
+ IF,
+ THISTOKEN,
+ DO,
+ WHILE,
+ SWITCH,
+ WITH,
+ RESERVED,
+ THROW,
+ TRY,
+ CATCH,
+ FINALLY,
+ DEBUGGER,
+ ELSE,
+ OPENBRACE,
+ CLOSEBRACE,
+ OPENPAREN,
+ CLOSEPAREN,
+ OPENBRACKET,
+ CLOSEBRACKET,
+ COMMA,
+ QUESTION,
+ NUMBER,
+ IDENT,
+ STRING,
+ SEMICOLON,
+ COLON,
+ DOT,
+ ERRORTOK,
+ EOFTOK,
+ EQUAL,
+ PLUSEQUAL,
+ MINUSEQUAL,
+ MULTEQUAL,
+ DIVEQUAL,
+ LSHIFTEQUAL,
+ RSHIFTEQUAL,
+ URSHIFTEQUAL,
+ ANDEQUAL,
+ MODEQUAL,
+ XOREQUAL,
+ OREQUAL,
+ LastUntaggedToken,
+
+ // Begin tagged tokens
+ PLUSPLUS = 0 | UnaryOpTokenFlag,
+ MINUSMINUS = 1 | UnaryOpTokenFlag,
+ EXCLAMATION = 2 | UnaryOpTokenFlag,
+ TILDE = 3 | UnaryOpTokenFlag,
+ AUTOPLUSPLUS = 4 | UnaryOpTokenFlag,
+ AUTOMINUSMINUS = 5 | UnaryOpTokenFlag,
+ TYPEOF = 6 | UnaryOpTokenFlag,
+ VOIDTOKEN = 7 | UnaryOpTokenFlag,
+ DELETETOKEN = 8 | UnaryOpTokenFlag,
+ OR = 0 | BINARY_OP_PRECEDENCE(1),
+ AND = 1 | BINARY_OP_PRECEDENCE(2),
+ BITOR = 2 | BINARY_OP_PRECEDENCE(3),
+ BITXOR = 3 | BINARY_OP_PRECEDENCE(4),
+ BITAND = 4 | BINARY_OP_PRECEDENCE(5),
+ EQEQ = 5 | BINARY_OP_PRECEDENCE(6),
+ NE = 6 | BINARY_OP_PRECEDENCE(6),
+ STREQ = 7 | BINARY_OP_PRECEDENCE(6),
+ STRNEQ = 8 | BINARY_OP_PRECEDENCE(6),
+ LT = 9 | BINARY_OP_PRECEDENCE(7),
+ GT = 10 | BINARY_OP_PRECEDENCE(7),
+ LE = 11 | BINARY_OP_PRECEDENCE(7),
+ GE = 12 | BINARY_OP_PRECEDENCE(7),
+ INSTANCEOF = 13 | BINARY_OP_PRECEDENCE(7),
+ INTOKEN = 14 | IN_OP_PRECEDENCE(7),
+ LSHIFT = 15 | BINARY_OP_PRECEDENCE(8),
+ RSHIFT = 16 | BINARY_OP_PRECEDENCE(8),
+ URSHIFT = 17 | BINARY_OP_PRECEDENCE(8),
+ PLUS = 18 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag,
+ MINUS = 19 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag,
+ TIMES = 20 | BINARY_OP_PRECEDENCE(10),
+ DIVIDE = 21 | BINARY_OP_PRECEDENCE(10),
+ MOD = 22 | BINARY_OP_PRECEDENCE(10)
};
union JSTokenData {
@@ -102,22 +139,20 @@ union JSTokenData {
double doubleValue;
const Identifier* ident;
};
-typedef JSTokenData YYSTYPE;
struct JSTokenInfo {
- JSTokenInfo() : last_line(0) {}
- int first_line;
- int last_line;
- int first_column;
- int last_column;
+ JSTokenInfo() : line(0) {}
+ int line;
+ int startOffset;
+ int endOffset;
};
-typedef JSTokenInfo YYLTYPE;
+
struct JSToken {
- int m_type;
+ JSTokenType m_type;
JSTokenData m_data;
JSTokenInfo m_info;
};
-int jsParse(JSGlobalData*);
+int jsParse(JSGlobalData*, const SourceCode*);
}
#endif // JSParser_h
diff --git a/JavaScriptCore/parser/Lexer.cpp b/JavaScriptCore/parser/Lexer.cpp
index 660b1a4..45fe007 100644
--- a/JavaScriptCore/parser/Lexer.cpp
+++ b/JavaScriptCore/parser/Lexer.cpp
@@ -56,7 +56,14 @@ enum CharacterTypes {
CharacterLineTerminator,
CharacterExclamationMark,
- CharacterSimple,
+ CharacterOpenParen,
+ CharacterCloseParen,
+ CharacterOpenBracket,
+ CharacterCloseBracket,
+ CharacterComma,
+ CharacterColon,
+ CharacterQuestion,
+ CharacterTilde,
CharacterQuote,
CharacterDot,
CharacterSlash,
@@ -81,7 +88,7 @@ enum CharacterTypes {
};
// 128 ascii codes
-static unsigned char AsciiCharacters[128] = {
+static unsigned short AsciiCharacters[128] = {
/* 0 - Null */ CharacterInvalid,
/* 1 - Start of Heading */ CharacterInvalid,
/* 2 - Start of Text */ CharacterInvalid,
@@ -122,11 +129,11 @@ static unsigned char AsciiCharacters[128] = {
/* 37 - % */ CharacterModulo,
/* 38 - & */ CharacterAnd,
/* 39 - ' */ CharacterQuote,
-/* 40 - ( */ CharacterSimple,
-/* 41 - ) */ CharacterSimple,
+/* 40 - ( */ CharacterOpenParen,
+/* 41 - ) */ CharacterCloseParen,
/* 42 - * */ CharacterMultiply,
/* 43 - + */ CharacterAdd,
-/* 44 - , */ CharacterSimple,
+/* 44 - , */ CharacterComma,
/* 45 - - */ CharacterSub,
/* 46 - . */ CharacterDot,
/* 47 - / */ CharacterSlash,
@@ -140,12 +147,12 @@ static unsigned char AsciiCharacters[128] = {
/* 55 - 7 */ CharacterNumber,
/* 56 - 8 */ CharacterNumber,
/* 57 - 9 */ CharacterNumber,
-/* 58 - : */ CharacterSimple,
+/* 58 - : */ CharacterColon,
/* 59 - ; */ CharacterSemicolon,
/* 60 - < */ CharacterLess,
/* 61 - = */ CharacterEqual,
/* 62 - > */ CharacterGreater,
-/* 63 - ? */ CharacterSimple,
+/* 63 - ? */ CharacterQuestion,
/* 64 - @ */ CharacterInvalid,
/* 65 - A */ CharacterAlpha,
/* 66 - B */ CharacterAlpha,
@@ -173,9 +180,9 @@ static unsigned char AsciiCharacters[128] = {
/* 88 - X */ CharacterAlpha,
/* 89 - Y */ CharacterAlpha,
/* 90 - Z */ CharacterAlpha,
-/* 91 - [ */ CharacterSimple,
+/* 91 - [ */ CharacterOpenBracket,
/* 92 - \ */ CharacterBackSlash,
-/* 93 - ] */ CharacterSimple,
+/* 93 - ] */ CharacterCloseBracket,
/* 94 - ^ */ CharacterXor,
/* 95 - _ */ CharacterAlpha,
/* 96 - ` */ CharacterInvalid,
@@ -208,7 +215,7 @@ static unsigned char AsciiCharacters[128] = {
/* 123 - { */ CharacterOpenBrace,
/* 124 - | */ CharacterOr,
/* 125 - } */ CharacterCloseBrace,
-/* 126 - ~ */ CharacterSimple,
+/* 126 - ~ */ CharacterTilde,
/* 127 - Delete */ CharacterInvalid,
};
@@ -357,8 +364,14 @@ static inline int singleEscape(int c)
return 0x0C;
case 'r':
return 0x0D;
+ case '\\':
+ return '\\';
+ case '\'':
+ return '\'';
+ case '"':
+ return '"';
default:
- return c;
+ return 0;
}
}
@@ -381,15 +394,92 @@ inline void Lexer::record16(int c)
record16(UChar(static_cast<unsigned short>(c)));
}
-int Lexer::lex(void* p1, void* p2)
+ALWAYS_INLINE bool Lexer::parseString(JSTokenData* lvalp)
+{
+ int stringQuoteCharacter = m_current;
+ shift();
+
+ const UChar* stringStart = currentCharacter();
+
+ while (m_current != stringQuoteCharacter) {
+ if (UNLIKELY(m_current == '\\')) {
+ if (stringStart != currentCharacter())
+ m_buffer16.append(stringStart, currentCharacter() - stringStart);
+ shift();
+
+ int escape = singleEscape(m_current);
+
+ // Most common escape sequences first
+ if (escape) {
+ record16(escape);
+ shift();
+ } else if (UNLIKELY(isLineTerminator(m_current)))
+ shiftLineTerminator();
+ else if (m_current == 'x') {
+ shift();
+ if (isASCIIHexDigit(m_current) && isASCIIHexDigit(peek(1))) {
+ int prev = m_current;
+ shift();
+ record16(convertHex(prev, m_current));
+ shift();
+ } else
+ record16('x');
+ } else if (m_current == 'u') {
+ shift();
+ int character = getUnicodeCharacter();
+ if (character != -1)
+ record16(character);
+ else if (m_current == stringQuoteCharacter)
+ record16('u');
+ else // Only stringQuoteCharacter allowed after \u
+ return false;
+ } else if (isASCIIOctalDigit(m_current)) {
+ // Octal character sequences
+ int character1 = m_current;
+ shift();
+ if (isASCIIOctalDigit(m_current)) {
+ // Two octal characters
+ int character2 = m_current;
+ shift();
+ if (character1 >= '0' && character1 <= '3' && isASCIIOctalDigit(m_current)) {
+ record16((character1 - '0') * 64 + (character2 - '0') * 8 + m_current - '0');
+ shift();
+ } else
+ record16((character1 - '0') * 8 + character2 - '0');
+ } else
+ record16(character1 - '0');
+ } else if (m_current != -1) {
+ record16(m_current);
+ shift();
+ } else
+ return false;
+
+ stringStart = currentCharacter();
+ continue;
+ } else if (UNLIKELY(((static_cast<unsigned>(m_current) - 0xE) & 0x2000))) {
+ // New-line or end of input is not allowed
+ if (UNLIKELY(isLineTerminator(m_current)) || UNLIKELY(m_current == -1))
+ return false;
+ // Anything else is just a normal character
+ }
+ shift();
+ }
+
+ if (currentCharacter() != stringStart)
+ m_buffer16.append(stringStart, currentCharacter() - stringStart);
+ lvalp->ident = makeIdentifier(m_buffer16.data(), m_buffer16.size());
+ m_buffer16.resize(0);
+ return true;
+}
+
+JSTokenType Lexer::lex(JSTokenData* lvalp, JSTokenInfo* llocp)
{
ASSERT(!m_error);
ASSERT(m_buffer8.isEmpty());
ASSERT(m_buffer16.isEmpty());
- YYSTYPE* lvalp = static_cast<YYSTYPE*>(p1);
- YYLTYPE* llocp = static_cast<YYLTYPE*>(p2);
- int token = 0;
+ JSTokenType token = ERRORTOK;
+ int identChar = 0;
m_terminator = false;
start:
@@ -398,20 +488,13 @@ start:
int startOffset = currentOffset();
- if (UNLIKELY(m_current == -1)) {
- if (!m_terminator && !m_delimited && !m_isReparsing) {
- // automatic semicolon insertion if program incomplete
- token = ';';
- goto doneSemicolon;
- }
- return 0;
- }
+ if (UNLIKELY(m_current == -1))
+ return EOFTOK;
m_delimited = false;
- ASSERT(m_current >= 0);
- if (m_current < 128) {
- ASSERT(isASCII(m_current));
+ if (isASCII(m_current)) {
+ ASSERT(m_current >= 0 && m_current < 128);
switch (AsciiCharacters[m_current]) {
case CharacterGreater:
@@ -441,7 +524,7 @@ start:
token = GE;
break;
}
- token = '>';
+ token = GT;
break;
case CharacterEqual:
shift();
@@ -455,7 +538,7 @@ start:
token = EQEQ;
break;
}
- token = '=';
+ token = EQUAL;
break;
case CharacterLess:
shift();
@@ -478,7 +561,7 @@ start:
token = LE;
break;
}
- token = '<';
+ token = LT;
break;
case CharacterExclamationMark:
shift();
@@ -492,7 +575,7 @@ start:
token = NE;
break;
}
- token = '!';
+ token = EXCLAMATION;
break;
case CharacterAdd:
shift();
@@ -506,7 +589,7 @@ start:
token = PLUSEQUAL;
break;
}
- token = '+';
+ token = PLUS;
break;
case CharacterSub:
shift();
@@ -524,7 +607,7 @@ start:
token = MINUSEQUAL;
break;
}
- token = '-';
+ token = MINUS;
break;
case CharacterMultiply:
shift();
@@ -533,7 +616,7 @@ start:
token = MULTEQUAL;
break;
}
- token = '*';
+ token = TIMES;
break;
case CharacterSlash:
shift();
@@ -550,7 +633,7 @@ start:
token = DIVEQUAL;
break;
}
- token = '/';
+ token = DIVIDE;
break;
case CharacterAnd:
shift();
@@ -564,7 +647,7 @@ start:
token = ANDEQUAL;
break;
}
- token = '&';
+ token = BITAND;
break;
case CharacterXor:
shift();
@@ -573,7 +656,7 @@ start:
token = XOREQUAL;
break;
}
- token = '^';
+ token = BITXOR;
break;
case CharacterModulo:
shift();
@@ -582,7 +665,7 @@ start:
token = MODEQUAL;
break;
}
- token = '%';
+ token = MOD;
break;
case CharacterOr:
shift();
@@ -596,7 +679,7 @@ start:
token = OR;
break;
}
- token = '|';
+ token = BITOR;
break;
case CharacterDot:
shift();
@@ -604,16 +687,44 @@ start:
record8('.');
goto inNumberAfterDecimalPoint;
}
- token = '.';
+ token = DOT;
+ break;
+ case CharacterOpenParen:
+ token = OPENPAREN;
+ shift();
+ break;
+ case CharacterCloseParen:
+ token = CLOSEPAREN;
+ shift();
+ break;
+ case CharacterOpenBracket:
+ token = OPENBRACKET;
+ shift();
break;
- case CharacterSimple:
- token = m_current;
+ case CharacterCloseBracket:
+ token = CLOSEBRACKET;
+ shift();
+ break;
+ case CharacterComma:
+ token = COMMA;
+ shift();
+ break;
+ case CharacterColon:
+ token = COLON;
+ shift();
+ break;
+ case CharacterQuestion:
+ token = QUESTION;
+ shift();
+ break;
+ case CharacterTilde:
+ token = TILDE;
shift();
break;
case CharacterSemicolon:
m_delimited = true;
shift();
- token = ';';
+ token = SEMICOLON;
break;
case CharacterOpenBrace:
lvalp->intValue = currentOffset();
@@ -633,7 +744,12 @@ start:
case CharacterNumber:
goto startNumber;
case CharacterQuote:
- goto startString;
+ if (UNLIKELY(!parseString(lvalp)))
+ goto returnError;
+ shift();
+ m_delimited = false;
+ token = STRING;
+ break;
case CharacterAlpha:
ASSERT(isIdentStart(m_current));
goto startIdentifierOrKeyword;
@@ -643,7 +759,7 @@ start:
m_atLineStart = true;
m_terminator = true;
if (lastTokenWasRestrKeyword()) {
- token = ';';
+ token = SEMICOLON;
goto doneSemicolon;
}
goto start;
@@ -655,7 +771,6 @@ start:
}
} else {
// Rare characters
- ASSERT(!isASCII(m_current));
if (isNonASCIIIdentStart(m_current))
goto startIdentifierOrKeyword;
@@ -663,10 +778,8 @@ start:
shiftLineTerminator();
m_atLineStart = true;
m_terminator = true;
- if (lastTokenWasRestrKeyword()) {
- token = ';';
+ if (lastTokenWasRestrKeyword())
goto doneSemicolon;
- }
goto start;
}
goto returnError;
@@ -675,109 +788,16 @@ start:
m_atLineStart = false;
goto returnToken;
-startString: {
- int stringQuoteCharacter = m_current;
- shift();
-
- const UChar* stringStart = currentCharacter();
- while (m_current != stringQuoteCharacter) {
- // Fast check for characters that require special handling.
- // Catches -1, \n, \r, \, 0x2028, and 0x2029 as efficiently
- // as possible, and lets through all common ASCII characters.
- if (UNLIKELY(m_current == '\\') || UNLIKELY(((static_cast<unsigned>(m_current) - 0xE) & 0x2000))) {
- m_buffer16.append(stringStart, currentCharacter() - stringStart);
- goto inString;
- }
- shift();
- }
- lvalp->ident = makeIdentifier(stringStart, currentCharacter() - stringStart);
- shift();
- m_atLineStart = false;
- m_delimited = false;
- token = STRING;
- goto returnToken;
-
-inString:
- while (m_current != stringQuoteCharacter) {
- if (m_current == '\\')
- goto inStringEscapeSequence;
- if (UNLIKELY(isLineTerminator(m_current)))
- goto returnError;
- if (UNLIKELY(m_current == -1))
- goto returnError;
- record16(m_current);
- shift();
- }
- goto doneString;
-
-inStringEscapeSequence:
- shift();
- if (m_current == 'x') {
- shift();
- if (isASCIIHexDigit(m_current) && isASCIIHexDigit(peek(1))) {
- int prev = m_current;
- shift();
- record16(convertHex(prev, m_current));
- shift();
- goto inString;
- }
- record16('x');
- if (m_current == stringQuoteCharacter)
- goto doneString;
- goto inString;
- }
- if (m_current == 'u') {
- shift();
- token = getUnicodeCharacter();
- if (token != -1) {
- record16(token);
- goto inString;
- }
- if (m_current == stringQuoteCharacter) {
- record16('u');
- goto doneString;
- }
- goto returnError;
- }
- if (isASCIIOctalDigit(m_current)) {
- int char1 = m_current;
- shift();
- if (char1 >= '0' && char1 <= '3' && isASCIIOctalDigit(m_current) && isASCIIOctalDigit(peek(1))) {
- int char2 = m_current;
- shift();
- record16((char1 - '0') * 64 + (char2 - '0') * 8 + m_current - '0');
- shift();
- goto inString;
- }
- if (isASCIIOctalDigit(m_current)) {
- record16((char1 - '0') * 8 + m_current - '0');
- shift();
- goto inString;
- }
- record16(char1 - '0');
- goto inString;
- }
- if (isLineTerminator(m_current)) {
- shiftLineTerminator();
- goto inString;
- }
- if (m_current == -1)
- goto returnError;
- record16(singleEscape(m_current));
- shift();
- goto inString;
-}
-
startIdentifierWithBackslash: {
shift();
if (UNLIKELY(m_current != 'u'))
goto returnError;
shift();
- token = getUnicodeCharacter();
- if (UNLIKELY(token == -1))
+ identChar = getUnicodeCharacter();
+ if (UNLIKELY(identChar == -1))
goto returnError;
- if (UNLIKELY(!isIdentStart(token)))
+ if (UNLIKELY(!isIdentStart(identChar)))
goto returnError;
goto inIdentifierAfterCharacterCheck;
}
@@ -800,13 +820,13 @@ startIdentifierOrKeyword: {
if (UNLIKELY(m_current != 'u'))
goto returnError;
shift();
- token = getUnicodeCharacter();
- if (UNLIKELY(token == -1))
+ identChar = getUnicodeCharacter();
+ if (UNLIKELY(identChar == -1))
goto returnError;
- if (UNLIKELY(!isIdentPart(token)))
+ if (UNLIKELY(!isIdentPart(identChar)))
goto returnError;
inIdentifierAfterCharacterCheck:
- record16(token);
+ record16(identChar);
while (isIdentPart(m_current)) {
record16(m_current);
@@ -818,7 +838,7 @@ inIdentifierAfterCharacterCheck:
inSingleLineComment:
while (!isLineTerminator(m_current)) {
if (UNLIKELY(m_current == -1))
- return 0;
+ return EOFTOK;
shift();
}
shiftLineTerminator();
@@ -985,7 +1005,7 @@ doneNumeric:
goto returnToken;
doneSemicolon:
- token = ';';
+ token = SEMICOLON;
m_delimited = true;
goto returnToken;
@@ -1002,34 +1022,23 @@ doneIdentifierOrKeyword: {
m_delimited = false;
m_buffer16.resize(0);
const HashEntry* entry = m_keywordTable.entry(m_globalData, *lvalp->ident);
- token = entry ? entry->lexerValue() : static_cast<int>(IDENT);
- goto returnToken;
-}
-
-doneString:
- // Atomize constant strings in case they're later used in property lookup.
- shift();
- m_atLineStart = false;
- m_delimited = false;
- lvalp->ident = makeIdentifier(m_buffer16.data(), m_buffer16.size());
- m_buffer16.resize(0);
- token = STRING;
+ token = entry ? static_cast<JSTokenType>(entry->lexerValue()) : IDENT;
// Fall through into returnToken.
+}
returnToken: {
int lineNumber = m_lineNumber;
- llocp->first_line = lineNumber;
- llocp->last_line = lineNumber;
- llocp->first_column = startOffset;
- llocp->last_column = currentOffset();
+ llocp->line = lineNumber;
+ llocp->startOffset = startOffset;
+ llocp->endOffset = currentOffset();
m_lastToken = token;
return token;
}
returnError:
m_error = true;
- return -1;
+ return ERRORTOK;
}
bool Lexer::scanRegExp(const Identifier*& pattern, const Identifier*& flags, UChar patternPrefix)
@@ -1136,7 +1145,6 @@ bool Lexer::skipRegExp()
void Lexer::clear()
{
m_arena = 0;
- m_codeWithoutBOMs.clear();
Vector<char> newBuffer8;
m_buffer8.swap(newBuffer8);
diff --git a/JavaScriptCore/parser/Lexer.h b/JavaScriptCore/parser/Lexer.h
index ec254ce..5ab7ad7 100644
--- a/JavaScriptCore/parser/Lexer.h
+++ b/JavaScriptCore/parser/Lexer.h
@@ -23,6 +23,7 @@
#ifndef Lexer_h
#define Lexer_h
+#include "JSParser.h"
#include "Lookup.h"
#include "ParserArena.h"
#include "SourceCode.h"
@@ -49,7 +50,7 @@ namespace JSC {
void setIsReparsing() { m_isReparsing = true; }
// Functions for the parser itself.
- int lex(void* lvalp, void* llocp);
+ JSTokenType lex(JSTokenData* lvalp, JSTokenInfo* llocp);
int lineNumber() const { return m_lineNumber; }
void setLastLineNumber(int lastLineNumber) { m_lastLineNumber = lastLineNumber; }
int lastLineNumber() const { return m_lastLineNumber; }
@@ -61,6 +62,12 @@ namespace JSC {
// Functions for use after parsing.
bool sawError() const { return m_error; }
void clear();
+ int currentOffset() { return m_code - m_codeStart; }
+ void setOffset(int offset)
+ {
+ m_code = m_codeStart + offset;
+ m_current = *m_code;
+ }
private:
friend class JSGlobalData;
@@ -86,8 +93,10 @@ namespace JSC {
ALWAYS_INLINE bool lastTokenWasRestrKeyword() const;
+ ALWAYS_INLINE bool parseString(JSTokenData* lvalp);
+
static const size_t initialReadBufferCapacity = 32;
-
+
int m_lineNumber;
int m_lastLineNumber;
@@ -113,8 +122,6 @@ namespace JSC {
JSGlobalData* m_globalData;
const HashTable m_keywordTable;
-
- Vector<UChar> m_codeWithoutBOMs;
};
inline bool Lexer::isWhiteSpace(int ch)
@@ -137,12 +144,6 @@ namespace JSC {
return (convertHex(c1, c2) << 8) | convertHex(c3, c4);
}
- // A bridge for yacc from the C world to the C++ world.
- inline int jscyylex(void* lvalp, void* llocp, void* globalData)
- {
- return static_cast<JSGlobalData*>(globalData)->lexer->lex(lvalp, llocp);
- }
-
} // namespace JSC
#endif // Lexer_h
diff --git a/JavaScriptCore/parser/Nodes.cpp b/JavaScriptCore/parser/Nodes.cpp
index 4b97e9a..ffea524 100644
--- a/JavaScriptCore/parser/Nodes.cpp
+++ b/JavaScriptCore/parser/Nodes.cpp
@@ -98,7 +98,7 @@ ScopeNode::ScopeNode(JSGlobalData* globalData)
ScopeNode::ScopeNode(JSGlobalData* globalData, const SourceCode& source, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, CodeFeatures features, int numConstants)
: StatementNode(globalData)
, ParserArenaRefCounted(globalData)
- , m_data(new ScopeNodeData(globalData->parser->arena(), children, varStack, funcStack, numConstants))
+ , m_data(adoptPtr(new ScopeNodeData(globalData->parser->arena(), children, varStack, funcStack, numConstants)))
, m_features(features)
, m_source(source)
{
diff --git a/JavaScriptCore/parser/Nodes.h b/JavaScriptCore/parser/Nodes.h
index 57c8f4f..6206384 100644
--- a/JavaScriptCore/parser/Nodes.h
+++ b/JavaScriptCore/parser/Nodes.h
@@ -404,12 +404,13 @@ namespace JSC {
class PropertyNode : public ParserArenaFreeable {
public:
- enum Type { Constant, Getter, Setter };
+ enum Type { Constant = 1, Getter = 2, Setter = 4 };
PropertyNode(JSGlobalData*, const Identifier& name, ExpressionNode* value, Type);
PropertyNode(JSGlobalData*, double name, ExpressionNode* value, Type);
const Identifier& name() const { return m_name; }
+ Type type() const { return m_type; }
private:
friend class PropertyListNode;
diff --git a/JavaScriptCore/parser/Parser.cpp b/JavaScriptCore/parser/Parser.cpp
index b97754f..39ff597 100644
--- a/JavaScriptCore/parser/Parser.cpp
+++ b/JavaScriptCore/parser/Parser.cpp
@@ -60,7 +60,7 @@ void Parser::parse(JSGlobalData* globalData, int* errLine, UString* errMsg)
Lexer& lexer = *globalData->lexer;
lexer.setCode(*m_source, m_arena);
- int parseError = jsParse(globalData);
+ int parseError = jsParse(globalData, m_source);
int lineNumber = lexer.lineNumber();
bool lexError = lexer.sawError();
lexer.clear();
diff --git a/JavaScriptCore/parser/ParserArena.cpp b/JavaScriptCore/parser/ParserArena.cpp
index a8e8159..9c96de7 100644
--- a/JavaScriptCore/parser/ParserArena.cpp
+++ b/JavaScriptCore/parser/ParserArena.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -27,13 +27,14 @@
#include "ParserArena.h"
#include "Nodes.h"
+#include <wtf/PassOwnPtr.h>
namespace JSC {
ParserArena::ParserArena()
: m_freeableMemory(0)
, m_freeablePoolEnd(0)
- , m_identifierArena(new IdentifierArena)
+ , m_identifierArena(adoptPtr(new IdentifierArena))
{
}
diff --git a/JavaScriptCore/parser/SourceProvider.h b/JavaScriptCore/parser/SourceProvider.h
index 87ea960..6b9c028 100644
--- a/JavaScriptCore/parser/SourceProvider.h
+++ b/JavaScriptCore/parser/SourceProvider.h
@@ -38,6 +38,7 @@ namespace JSC {
public:
SourceProvider(const UString& url)
: m_url(url)
+ , m_validated(false)
{
}
virtual ~SourceProvider() { }
@@ -49,8 +50,12 @@ namespace JSC {
const UString& url() { return m_url; }
intptr_t asID() { return reinterpret_cast<intptr_t>(this); }
+ bool isValid() const { return m_validated; }
+ void setValid() { m_validated = true; }
+
private:
UString m_url;
+ bool m_validated;
};
class UStringSourceProvider : public SourceProvider {
diff --git a/JavaScriptCore/parser/SyntaxChecker.h b/JavaScriptCore/parser/SyntaxChecker.h
index cad89f6..e05facd 100644
--- a/JavaScriptCore/parser/SyntaxChecker.h
+++ b/JavaScriptCore/parser/SyntaxChecker.h
@@ -29,7 +29,7 @@
namespace JSC {
class SyntaxChecker {
public:
- SyntaxChecker(JSGlobalData*, Lexer*)
+ SyntaxChecker(JSGlobalData* , Lexer*)
{
}
@@ -39,7 +39,25 @@ public:
typedef int SourceElements;
typedef int Arguments;
typedef int Comma;
- typedef int Property;
+ struct Property {
+ ALWAYS_INLINE Property(void* = 0)
+ : type((PropertyNode::Type)0)
+ {
+ }
+ ALWAYS_INLINE Property(const Identifier* ident, PropertyNode::Type ty)
+ : name(ident)
+ , type(ty)
+ {
+ }
+ ALWAYS_INLINE Property(PropertyNode::Type ty)
+ : name(0)
+ , type(ty)
+ {
+ }
+ ALWAYS_INLINE bool operator!() { return !type; }
+ const Identifier* name;
+ PropertyNode::Type type;
+ };
typedef int PropertyList;
typedef int ElementList;
typedef int ArgumentsList;
@@ -90,10 +108,21 @@ public:
int createArguments(int) { return 1; }
int createArgumentsList(int) { return 1; }
int createArgumentsList(int, int) { return 1; }
- int createProperty(const Identifier*, int, PropertyNode::Type) { return 1; }
- int createProperty(double, int, PropertyNode::Type) { return 1; }
- int createPropertyList(int) { return 1; }
- int createPropertyList(int, int) { return 1; }
+ template <bool complete> Property createProperty(const Identifier* name, int, PropertyNode::Type type)
+ {
+ ASSERT(name);
+ if (!complete)
+ return Property(type);
+ return Property(name, type);
+ }
+ template <bool complete> Property createProperty(JSGlobalData* globalData, double name, int, PropertyNode::Type type)
+ {
+ if (!complete)
+ return Property(type);
+ return Property(&globalData->parser->arena().identifierArena().makeNumericIdentifier(globalData, name), type);
+ }
+ int createPropertyList(Property) { return 1; }
+ int createPropertyList(Property, int) { return 1; }
int createElementList(int, int) { return 1; }
int createElementList(int, int, int) { return 1; }
int createFormalParameterList(const Identifier&) { return 1; }
@@ -127,7 +156,13 @@ public:
int createDebugger(int, int) { return 1; }
int createConstStatement(int, int, int) { return 1; }
int appendConstDecl(int, const Identifier*, int) { return 1; }
- int createGetterOrSetterProperty(const Identifier*, const Identifier*, int, int, int, int, int, int) { return 1; }
+ template <bool strict> Property createGetterOrSetterProperty(PropertyNode::Type type, const Identifier* name, int, int, int, int, int, int)
+ {
+ ASSERT(name);
+ if (!strict)
+ return Property(type);
+ return Property(name, type);
+ }
void appendStatement(int, int) { }
void addVar(const Identifier*, bool) { }
@@ -151,6 +186,8 @@ public:
void assignmentStackAppend(int, int, int, int, int, Operator) { }
int createAssignment(int, int, int, int, int) { ASSERT_NOT_REACHED(); return 1; }
+ const Identifier& getName(const Property& property) { ASSERT(property.name); return *property.name; }
+ PropertyNode::Type getType(const Property& property) { return property.type; }
};
}
diff --git a/JavaScriptCore/qt/ChangeLog b/JavaScriptCore/qt/ChangeLog
index 8f2d423..71b4a21 100644
--- a/JavaScriptCore/qt/ChangeLog
+++ b/JavaScriptCore/qt/ChangeLog
@@ -1,3 +1,100 @@
+2010-07-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Implementation of the QScriptValue::propertyFlags function.
+
+ The function returns the flags of a property with the given name,
+ using a given mode to resolve the property. This is a simple
+ implementation that is sufficient to test the QScriptValueIterator.
+
+ [Qt] QScriptValue API should have a property flag accessor.
+ https://bugs.webkit.org/show_bug.cgi?id=41769
+
+ * api/qscriptvalue.cpp:
+ (QScriptValue::propertyFlags):
+ * api/qscriptvalue.h:
+ * api/qscriptvalue_p.h:
+ (QScriptValuePrivate::propertyFlags):
+ * tests/qscriptvalue/tst_qscriptvalue.cpp:
+ (tst_QScriptValue::propertyFlag_data):
+ (tst_QScriptValue::propertyFlag):
+ * tests/qscriptvalue/tst_qscriptvalue.h:
+
+2010-07-07 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Implementation of QScriptValue::isArray()
+ https://bugs.webkit.org/show_bug.cgi?id=41713
+
+ Since we don't have access to the [[Class]] internal property of
+ builtins (including Array), the solution was to keep the original 'Array'
+ (constructor) and 'Array.prototype' objects and use them to identify
+ if a given object is an Array.
+
+ Also uncomment some tests and add some tests of newArray() that
+ depended on isArray().
+
+ * api/qscriptengine_p.cpp:
+ (QScriptEnginePrivate::QScriptEnginePrivate):
+ (QScriptEnginePrivate::~QScriptEnginePrivate):
+ * api/qscriptengine_p.h:
+ (QScriptEnginePrivate::isArray):
+ * api/qscriptvalue.cpp:
+ (QScriptValue::isArray):
+ * api/qscriptvalue.h:
+ * api/qscriptvalue_p.h:
+ (QScriptValuePrivate::isArray):
+ * tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::newArray):
+
+2010-07-06 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Implementation of QScriptValue properties accessors.
+
+ The patch contains implementation of the QScriptValue::property() and
+ the QScriptValue::setProperty(). It is not full functionality, as these
+ method are too complex for one patch, but it is enough to cover about
+ 95% of use cases.
+
+ Missing functionality:
+ - Few of the PropertyFlags are ignored.
+ - Only a public part of the ResolveFlags can be used (ResolveLocal,
+ ResolvePrototype).
+
+ A lot of new test cases were added.
+
+ [Qt] QScriptValue should have API for accessing object properties
+ https://bugs.webkit.org/show_bug.cgi?id=40903
+
+ * api/qscriptconverter_p.h:
+ (QScriptConverter::toPropertyFlags):
+ * api/qscriptstring_p.h:
+ (QScriptStringPrivate::operator JSStringRef):
+ * api/qscriptvalue.cpp:
+ (QScriptValue::property):
+ (QScriptValue::setProperty):
+ * api/qscriptvalue.h:
+ (QScriptValue::):
+ * api/qscriptvalue_p.h:
+ (QScriptValuePrivate::assignEngine):
+ (QScriptValuePrivate::property):
+ (QScriptValuePrivate::hasOwnProperty):
+ (QScriptValuePrivate::setProperty):
+ (QScriptValuePrivate::deleteProperty):
+ * tests/qscriptvalue/tst_qscriptvalue.cpp:
+ (tst_QScriptValue::getPropertySimple_data):
+ (tst_QScriptValue::getPropertySimple):
+ (tst_QScriptValue::setPropertySimple):
+ (tst_QScriptValue::getPropertyResolveFlag):
+ (tst_QScriptValue::getSetProperty):
+ (tst_QScriptValue::setProperty_data):
+ (tst_QScriptValue::setProperty):
+ * tests/qscriptvalue/tst_qscriptvalue.h:
+
2010-07-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
Reviewed by Simon Hausmann.
diff --git a/JavaScriptCore/qt/api/qscriptconverter_p.h b/JavaScriptCore/qt/api/qscriptconverter_p.h
index cd86e20..0c57d95 100644
--- a/JavaScriptCore/qt/api/qscriptconverter_p.h
+++ b/JavaScriptCore/qt/api/qscriptconverter_p.h
@@ -20,7 +20,9 @@
#ifndef qscriptconverter_p_h
#define qscriptconverter_p_h
+#include "qscriptvalue.h"
#include <JavaScriptCore/JavaScript.h>
+#include <QtCore/qglobal.h>
#include <QtCore/qnumeric.h>
#include <QtCore/qstring.h>
#include <QtCore/qvarlengtharray.h>
@@ -127,6 +129,18 @@ public:
buf.append(0);
return QString::fromLatin1(buf.constData());
}
+
+ static JSPropertyAttributes toPropertyFlags(const QFlags<QScriptValue::PropertyFlag>& flags)
+ {
+ JSPropertyAttributes attr = 0;
+ if (flags.testFlag(QScriptValue::ReadOnly))
+ attr |= kJSPropertyAttributeReadOnly;
+ if (flags.testFlag(QScriptValue::Undeletable))
+ attr |= kJSPropertyAttributeDontDelete;
+ if (flags.testFlag(QScriptValue::SkipInEnumeration))
+ attr |= kJSPropertyAttributeDontEnum;
+ return attr;
+ }
};
#endif // qscriptconverter_p_h
diff --git a/JavaScriptCore/qt/api/qscriptengine_p.cpp b/JavaScriptCore/qt/api/qscriptengine_p.cpp
index 23e41c4..360de29 100644
--- a/JavaScriptCore/qt/api/qscriptengine_p.cpp
+++ b/JavaScriptCore/qt/api/qscriptengine_p.cpp
@@ -32,11 +32,32 @@ QScriptEnginePrivate::QScriptEnginePrivate(const QScriptEngine* engine)
: q_ptr(const_cast<QScriptEngine*>(engine))
, m_context(JSGlobalContextCreate(0))
, m_exception(0)
+ , m_arrayConstructor(0)
+ , m_arrayPrototype(0)
{
+ JSObjectRef globalObject = JSContextGetGlobalObject(m_context);
+
+ // Save references to the Array constructor and prototype.
+ JSRetainPtr<JSStringRef> arrayName(Adopt, JSStringCreateWithUTF8CString("Array"));
+ JSValueRef arrayConstructor = JSObjectGetProperty(m_context, globalObject, arrayName.get(), /* exception */ 0);
+ Q_ASSERT(JSValueIsObject(m_context, arrayConstructor));
+ m_arrayConstructor = JSValueToObject(m_context, arrayConstructor, /* exception */ 0);
+ JSValueProtect(m_context, m_arrayConstructor);
+
+ // Note that this is not the [[Prototype]] internal property (which we could
+ // get via JSObjectGetPrototype), but the Array.prototype, that will be set
+ // as [[Prototype]] of Array instances.
+ JSRetainPtr<JSStringRef> prototypeName(Adopt, JSStringCreateWithUTF8CString("prototype"));
+ JSValueRef arrayPrototype = JSObjectGetProperty(m_context, m_arrayConstructor, prototypeName.get(), /* exception */ 0);
+ Q_ASSERT(JSValueIsObject(m_context, arrayPrototype));
+ m_arrayPrototype = arrayPrototype;
+ JSValueProtect(m_context, m_arrayPrototype);
}
QScriptEnginePrivate::~QScriptEnginePrivate()
{
+ JSValueUnprotect(m_context, m_arrayConstructor);
+ JSValueUnprotect(m_context, m_arrayPrototype);
if (m_exception)
JSValueUnprotect(m_context, m_exception);
JSGlobalContextRelease(m_context);
diff --git a/JavaScriptCore/qt/api/qscriptengine_p.h b/JavaScriptCore/qt/api/qscriptengine_p.h
index 30ee039..401c051 100644
--- a/JavaScriptCore/qt/api/qscriptengine_p.h
+++ b/JavaScriptCore/qt/api/qscriptengine_p.h
@@ -77,10 +77,15 @@ public:
inline QScriptStringPrivate* toStringHandle(const QString& str) const;
inline operator JSGlobalContextRef() const;
+
+ inline bool isArray(JSValueRef value) const;
private:
QScriptEngine* q_ptr;
JSGlobalContextRef m_context;
JSValueRef m_exception;
+
+ JSObjectRef m_arrayConstructor;
+ JSValueRef m_arrayPrototype;
};
@@ -211,4 +216,11 @@ QScriptEnginePrivate::operator JSGlobalContextRef() const
return m_context;
}
+bool QScriptEnginePrivate::isArray(JSValueRef value) const
+{
+ // JSC API doesn't export the [[Class]] information for the builtins. But we know that a value
+ // is an array if it was created with the Array constructor or if it is the Array.prototype.
+ return JSValueIsInstanceOfConstructor(m_context, value, m_arrayConstructor, /* exception */ 0) || JSValueIsStrictEqual(m_context, value, m_arrayPrototype);
+}
+
#endif
diff --git a/JavaScriptCore/qt/api/qscriptstring_p.h b/JavaScriptCore/qt/api/qscriptstring_p.h
index d4fc88e..fe84f4d 100644
--- a/JavaScriptCore/qt/api/qscriptstring_p.h
+++ b/JavaScriptCore/qt/api/qscriptstring_p.h
@@ -46,6 +46,8 @@ public:
inline quint64 id() const;
+ inline operator JSStringRef() const;
+
private:
JSStringRef m_string;
};
@@ -109,4 +111,14 @@ quint64 QScriptStringPrivate::id() const
return reinterpret_cast<quint32>(m_string);
}
+/*!
+ \internal
+ This method should be used for invoking JSC functions.
+ \note This method keeps ownership of an internal JSStringRef.
+*/
+QScriptStringPrivate::operator JSStringRef() const
+{
+ return m_string;
+}
+
#endif // qscriptstring_p_h
diff --git a/JavaScriptCore/qt/api/qscriptvalue.cpp b/JavaScriptCore/qt/api/qscriptvalue.cpp
index e309fb7..a7d0b7b 100644
--- a/JavaScriptCore/qt/api/qscriptvalue.cpp
+++ b/JavaScriptCore/qt/api/qscriptvalue.cpp
@@ -313,6 +313,17 @@ bool QScriptValue::isError() const
}
/*!
+ Returns true if this QScriptValue is an object of the Array class;
+ otherwise returns false.
+
+ \sa QScriptEngine::newArray()
+*/
+bool QScriptValue::isArray() const
+{
+ return d_ptr->isArray();
+}
+
+/*!
Returns true if this QScriptValue is of the Object type; otherwise
returns false.
@@ -651,6 +662,23 @@ QScriptValue QScriptValue::property(const QString& name, const ResolveFlags& mod
/*!
\overload
+ Returns the value of this QScriptValue's property with the given \a name,
+ using the given \a mode to resolve the property.
+
+ This overload of property() is useful when you need to look up the
+ same property repeatedly, since the lookup can be performed faster
+ when the name is represented as an interned string.
+
+ \sa QScriptEngine::toStringHandle(), setProperty()
+*/
+QScriptValue QScriptValue::property(const QScriptString& name, const ResolveFlags& mode) const
+{
+ return QScriptValuePrivate::get(d_ptr->property(QScriptStringPrivate::get(name).constData(), mode));
+}
+
+/*!
+ \overload
+
Returns the property at the given \a arrayIndex, using the given \a
mode to resolve the property.
@@ -665,3 +693,87 @@ QScriptValue QScriptValue::property(quint32 arrayIndex, const ResolveFlags& mode
{
return QScriptValuePrivate::get(d_ptr->property(arrayIndex, mode));
}
+
+/*!
+ Sets the value of this QScriptValue's property with the given \a name to
+ the given \a value.
+
+ If this QScriptValue is not an object, this function does nothing.
+
+ If this QScriptValue does not already have a property with name \a name,
+ a new property is created; the given \a flags then specify how this
+ property may be accessed by script code.
+
+ If \a value is invalid, the property is removed.
+
+ If the property is implemented using a setter function (i.e. has the
+ PropertySetter flag set), calling setProperty() has side-effects on
+ the script engine, since the setter function will be called with the
+ given \a value as argument (possibly resulting in an uncaught script
+ exception).
+
+ Note that you cannot specify custom getter or setter functions for
+ built-in properties, such as the \c{length} property of Array objects
+ or meta properties of QObject objects.
+
+ \sa property()
+*/
+void QScriptValue::setProperty(const QString& name, const QScriptValue& value, const PropertyFlags& flags)
+{
+ d_ptr->setProperty(name, QScriptValuePrivate::get(value), flags);
+}
+
+/*!
+ \overload
+
+ Sets the property at the given \a arrayIndex to the given \a value.
+
+ This function is provided for convenience and performance when
+ working with array objects.
+
+ If this QScriptValue is not an Array object, this function behaves
+ as if setProperty() was called with the string representation of \a
+ arrayIndex.
+*/
+void QScriptValue::setProperty(quint32 arrayIndex, const QScriptValue& value, const PropertyFlags& flags)
+{
+ d_ptr->setProperty(arrayIndex, QScriptValuePrivate::get(value), flags);
+}
+
+/*!
+ Sets the value of this QScriptValue's property with the given \a
+ name to the given \a value. The given \a flags specify how this
+ property may be accessed by script code.
+
+ This overload of setProperty() is useful when you need to set the
+ same property repeatedly, since the operation can be performed
+ faster when the name is represented as an interned string.
+
+ \sa QScriptEngine::toStringHandle()
+*/
+void QScriptValue::setProperty(const QScriptString& name, const QScriptValue& value, const PropertyFlags& flags)
+{
+ d_ptr->setProperty(QScriptStringPrivate::get(name).constData(), QScriptValuePrivate::get(value), flags);
+}
+
+/*!
+ Returns the flags of the property with the given \a name, using the
+ given \a mode to resolve the property.
+
+ \sa property()
+*/
+QScriptValue::PropertyFlags QScriptValue::propertyFlags(const QString& name, const ResolveFlags& mode) const
+{
+ return d_ptr->propertyFlags(name, mode);
+}
+
+/*!
+ Returns the flags of the property with the given \a name, using the
+ given \a mode to resolve the property.
+
+ \sa property()
+*/
+QScriptValue::PropertyFlags QScriptValue::propertyFlags(const QScriptString& name, const ResolveFlags& mode) const
+{
+ return d_ptr->propertyFlags(QScriptStringPrivate::get(name).constData(), mode);
+}
diff --git a/JavaScriptCore/qt/api/qscriptvalue.h b/JavaScriptCore/qt/api/qscriptvalue.h
index c55d461..991a6a0 100644
--- a/JavaScriptCore/qt/api/qscriptvalue.h
+++ b/JavaScriptCore/qt/api/qscriptvalue.h
@@ -20,6 +20,7 @@
#ifndef qscriptvalue_h
#define qscriptvalue_h
+#include "qscriptstring.h"
#include <QtCore/qlist.h>
#include <QtCore/qshareddata.h>
@@ -34,12 +35,25 @@ typedef double qsreal;
class QScriptValue {
public:
enum ResolveFlag {
- ResolveLocal = 0x00,
- ResolvePrototype = 0x01
+ ResolveLocal = 0x00,
+ ResolvePrototype = 0x01,
+ ResolveScope = 0x02,
+ ResolveFull = ResolvePrototype | ResolveScope
};
-
Q_DECLARE_FLAGS(ResolveFlags, ResolveFlag)
+ enum PropertyFlag {
+ ReadOnly = 0x00000001,
+ Undeletable = 0x00000002,
+ SkipInEnumeration = 0x00000004,
+ PropertyGetter = 0x00000008,
+ PropertySetter = 0x00000010,
+ QObjectMember = 0x00000020,
+ KeepExistingFlags = 0x00000800,
+ UserRange = 0xff000000 // Users may use these as they see fit.
+ };
+ Q_DECLARE_FLAGS(PropertyFlags, PropertyFlag)
+
enum SpecialValue {
NullValue,
UndefinedValue
@@ -75,8 +89,16 @@ public:
bool instanceOf(const QScriptValue& other) const;
QScriptValue property(const QString& name, const ResolveFlags& mode = ResolvePrototype) const;
+ QScriptValue property(const QScriptString& name, const ResolveFlags& mode = ResolvePrototype) const;
QScriptValue property(quint32 arrayIndex, const ResolveFlags& mode = ResolvePrototype) const;
+ void setProperty(const QString& name, const QScriptValue& value, const PropertyFlags& flags = KeepExistingFlags);
+ void setProperty(quint32 arrayIndex, const QScriptValue& value, const PropertyFlags& flags = KeepExistingFlags);
+ void setProperty(const QScriptString& name, const QScriptValue& value, const PropertyFlags& flags = KeepExistingFlags);
+
+ PropertyFlags propertyFlags(const QString& name, const ResolveFlags& mode = ResolvePrototype) const;
+ PropertyFlags propertyFlags(const QScriptString& name, const ResolveFlags& mode = ResolvePrototype) const;
+
QScriptEngine* engine() const;
bool isValid() const;
@@ -89,6 +111,7 @@ public:
bool isUndefined() const;
bool isObject() const;
bool isError() const;
+ bool isArray() const;
QString toString() const;
qsreal toNumber() const;
@@ -102,7 +125,6 @@ public:
QScriptValue call(const QScriptValue& thisObject = QScriptValue(),
const QScriptValueList& args = QScriptValueList());
-
private:
QScriptValue(void*);
QScriptValue(QScriptValuePrivate*);
diff --git a/JavaScriptCore/qt/api/qscriptvalue_p.h b/JavaScriptCore/qt/api/qscriptvalue_p.h
index 49bec97..1d319ba 100644
--- a/JavaScriptCore/qt/api/qscriptvalue_p.h
+++ b/JavaScriptCore/qt/api/qscriptvalue_p.h
@@ -101,6 +101,7 @@ public:
inline bool isError();
inline bool isObject();
inline bool isFunction();
+ inline bool isArray();
inline QString toString() const;
inline qsreal toNumber() const;
@@ -121,7 +122,28 @@ public:
inline bool assignEngine(QScriptEnginePrivate* engine);
inline QScriptValuePrivate* property(const QString& name, const QScriptValue::ResolveFlags& mode);
+ inline QScriptValuePrivate* property(const QScriptStringPrivate* name, const QScriptValue::ResolveFlags& mode);
inline QScriptValuePrivate* property(quint32 arrayIndex, const QScriptValue::ResolveFlags& mode);
+ inline JSValueRef property(quint32 property, JSValueRef* exception);
+ inline JSValueRef property(JSStringRef property, JSValueRef* exception);
+ inline bool hasOwnProperty(quint32 property);
+ inline bool hasOwnProperty(JSStringRef property);
+ template<typename T>
+ inline QScriptValuePrivate* property(T name, const QScriptValue::ResolveFlags& mode);
+
+ inline void setProperty(const QString& name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags);
+ inline void setProperty(const QScriptStringPrivate* name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags);
+ inline void setProperty(const quint32 indexArray, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags);
+ inline void setProperty(quint32 property, JSValueRef value, JSPropertyAttributes flags, JSValueRef* exception);
+ inline void setProperty(JSStringRef property, JSValueRef value, JSPropertyAttributes flags, JSValueRef* exception);
+ inline void deleteProperty(quint32 property, JSValueRef* exception);
+ inline void deleteProperty(JSStringRef property, JSValueRef* exception);
+ template<typename T>
+ inline void setProperty(T name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags);
+
+ QScriptValue::PropertyFlags propertyFlags(const QString& name, const QScriptValue::ResolveFlags& mode);
+ QScriptValue::PropertyFlags propertyFlags(const QScriptStringPrivate* name, const QScriptValue::ResolveFlags& mode);
+ QScriptValue::PropertyFlags propertyFlags(const JSStringRef name, const QScriptValue::ResolveFlags& mode);
inline QScriptValuePrivate* call(const QScriptValuePrivate* , const QScriptValueList& args);
@@ -427,6 +449,20 @@ bool QScriptValuePrivate::isFunction()
}
}
+bool QScriptValuePrivate::isArray()
+{
+ switch (m_state) {
+ case JSValue:
+ if (refinedJSValue() != JSObject)
+ return false;
+ // Fall-through.
+ case JSObject:
+ return m_engine->isArray(*this);
+ default:
+ return false;
+ }
+}
+
QString QScriptValuePrivate::toString() const
{
switch (m_state) {
@@ -744,6 +780,7 @@ inline bool QScriptValuePrivate::instanceOf(QScriptValuePrivate* other)
*/
bool QScriptValuePrivate::assignEngine(QScriptEnginePrivate* engine)
{
+ Q_ASSERT(engine);
JSValueRef value;
switch (m_state) {
case CBool:
@@ -778,31 +815,252 @@ bool QScriptValuePrivate::assignEngine(QScriptEnginePrivate* engine)
inline QScriptValuePrivate* QScriptValuePrivate::property(const QString& name, const QScriptValue::ResolveFlags& mode)
{
+ JSRetainPtr<JSStringRef> propertyName(Adopt, QScriptConverter::toString(name));
+ return property<JSStringRef>(propertyName.get(), mode);
+}
+
+inline QScriptValuePrivate* QScriptValuePrivate::property(const QScriptStringPrivate* name, const QScriptValue::ResolveFlags& mode)
+{
+ return property<JSStringRef>(*name, mode);
+}
+
+inline QScriptValuePrivate* QScriptValuePrivate::property(quint32 arrayIndex, const QScriptValue::ResolveFlags& mode)
+{
+ return property<quint32>(arrayIndex, mode);
+}
+
+/*!
+ \internal
+ This method was created to unify access to the JSObjectGetPropertyAtIndex and the JSObjectGetProperty.
+*/
+inline JSValueRef QScriptValuePrivate::property(quint32 property, JSValueRef* exception)
+{
+ return JSObjectGetPropertyAtIndex(*m_engine, *this, property, exception);
+}
+
+/*!
+ \internal
+ This method was created to unify access to the JSObjectGetPropertyAtIndex and the JSObjectGetProperty.
+*/
+inline JSValueRef QScriptValuePrivate::property(JSStringRef property, JSValueRef* exception)
+{
+ return JSObjectGetProperty(*m_engine, *this, property, exception);
+}
+
+/*!
+ \internal
+ This method was created to unify acccess to hasOwnProperty, same function for an array index
+ and a property name access.
+*/
+inline bool QScriptValuePrivate::hasOwnProperty(quint32 property)
+{
+ Q_ASSERT(isObject());
+ // FIXME it could be faster, but JSC C API doesn't expose needed functionality.
+ JSRetainPtr<JSStringRef> propertyName(Adopt, QScriptConverter::toString(QString::number(property)));
+ return hasOwnProperty(propertyName.get());
+}
+
+/*!
+ \internal
+ This method was created to unify acccess to hasOwnProperty, same function for an array index
+ and a property name access.
+*/
+inline bool QScriptValuePrivate::hasOwnProperty(JSStringRef property)
+{
+ Q_ASSERT(isObject());
+ // FIXME it could be faster, but JSC C API doesn't expose needed functionality.
+ JSRetainPtr<JSStringRef> hasOwnPropertyName(Adopt, JSStringCreateWithUTF8CString("hasOwnProperty"));
+ JSValueRef exception = 0;
+ JSValueRef hasOwnProperty = JSObjectGetProperty(*m_engine, *this, hasOwnPropertyName.get(), &exception);
+ JSValueRef propertyName[] = { JSValueMakeString(*m_engine, property) };
+ JSValueRef result = JSObjectCallAsFunction(*m_engine, const_cast<JSObjectRef>(hasOwnProperty), *this, 1, propertyName, &exception);
+ return exception ? false : JSValueToBoolean(*m_engine, result);
+}
+
+/*!
+ \internal
+ This function gets property of an object.
+ \arg propertyName could be type of quint32 (an array index) or JSStringRef (a property name).
+*/
+template<typename T>
+inline QScriptValuePrivate* QScriptValuePrivate::property(T propertyName, const QScriptValue::ResolveFlags& mode)
+{
if (!isObject())
- return new QScriptValuePrivate;
+ return new QScriptValuePrivate();
- if (mode & QScriptValue::ResolveLocal) {
- qWarning("QScriptValue::property(): ResolveLocal not supported yet.");
+ if ((mode == QScriptValue::ResolveLocal) && (!hasOwnProperty(propertyName)))
+ return new QScriptValuePrivate();
+
+ JSValueRef exception = 0;
+ JSValueRef value = property(propertyName, &exception);
+
+ if (exception) {
+ m_engine->setException(exception, QScriptEnginePrivate::NotNullException);
+ return new QScriptValuePrivate(engine(), exception);
+ }
+ if (JSValueIsUndefined(*m_engine, value))
return new QScriptValuePrivate;
+ return new QScriptValuePrivate(engine(), value);
+}
+
+inline void QScriptValuePrivate::setProperty(const QString& name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags)
+{
+ JSRetainPtr<JSStringRef> propertyName(Adopt, QScriptConverter::toString(name));
+ setProperty<JSStringRef>(propertyName.get(), value, flags);
+}
+
+inline void QScriptValuePrivate::setProperty(quint32 arrayIndex, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags)
+{
+ setProperty<quint32>(arrayIndex, value, flags);
+}
+
+inline void QScriptValuePrivate::setProperty(const QScriptStringPrivate* name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags)
+{
+ setProperty<JSStringRef>(*name, value, flags);
+}
+
+/*!
+ \internal
+ This method was created to unify access to the JSObjectSetPropertyAtIndex and the JSObjectSetProperty.
+*/
+inline void QScriptValuePrivate::setProperty(quint32 property, JSValueRef value, JSPropertyAttributes flags, JSValueRef* exception)
+{
+ Q_ASSERT(isObject());
+ if (flags) {
+ // FIXME This could be better, but JSC C API doesn't expose needed functionality. It is
+ // not possible to create / modify a property attribute via an array index.
+ JSRetainPtr<JSStringRef> propertyName(Adopt, QScriptConverter::toString(QString::number(property)));
+ JSObjectSetProperty(*m_engine, *this, propertyName.get(), value, flags, exception);
+ return;
}
+ JSObjectSetPropertyAtIndex(*m_engine, *this, property, value, exception);
+}
- JSRetainPtr<JSStringRef> nameRef(Adopt, QScriptConverter::toString(name));
- QScriptValuePrivate* result = new QScriptValuePrivate(m_engine.constData(), JSObjectGetProperty(*m_engine, *this, nameRef.get(), /* exception */ 0));
+/*!
+ \internal
+ This method was created to unify access to the JSObjectSetPropertyAtIndex and the JSObjectSetProperty.
+*/
+inline void QScriptValuePrivate::setProperty(JSStringRef property, JSValueRef value, JSPropertyAttributes flags, JSValueRef* exception)
+{
+ Q_ASSERT(isObject());
+ JSObjectSetProperty(*m_engine, *this, property, value, flags, exception);
+}
- return result;
+/*!
+ \internal
+ This method was created to unify access to the JSObjectDeleteProperty and a teoretical JSObjectDeletePropertyAtIndex
+ which doesn't exist now.
+*/
+inline void QScriptValuePrivate::deleteProperty(quint32 property, JSValueRef* exception)
+{
+ // FIXME It could be faster, we need a JSC C API for deleting array index properties.
+ JSRetainPtr<JSStringRef> propertyName(Adopt, QScriptConverter::toString(QString::number(property)));
+ JSObjectDeleteProperty(*m_engine, *this, propertyName.get(), exception);
}
-inline QScriptValuePrivate* QScriptValuePrivate::property(quint32 arrayIndex, const QScriptValue::ResolveFlags& mode)
+/*!
+ \internal
+ This method was created to unify access to the JSObjectDeleteProperty and a teoretical JSObjectDeletePropertyAtIndex.
+*/
+inline void QScriptValuePrivate::deleteProperty(JSStringRef property, JSValueRef* exception)
+{
+ Q_ASSERT(isObject());
+ JSObjectDeleteProperty(*m_engine, *this, property, exception);
+}
+
+template<typename T>
+inline void QScriptValuePrivate::setProperty(T name, QScriptValuePrivate* value, const QScriptValue::PropertyFlags& flags)
{
if (!isObject())
- return new QScriptValuePrivate;
+ return;
- if (mode & QScriptValue::ResolveLocal) {
- qWarning("QScriptValue::property(): ResolveLocal not supported yet.");
- return new QScriptValuePrivate;
+ if (!value->isJSBased())
+ value->assignEngine(engine());
+
+ JSValueRef exception = 0;
+ if (!value->isValid()) {
+ // Remove the property.
+ deleteProperty(name, &exception);
+ m_engine->setException(exception);
+ return;
+ }
+ if (m_engine != value->m_engine) {
+ qWarning("QScriptValue::setProperty() failed: cannot set value created in a different engine");
+ return;
+ }
+
+ setProperty(name, *value, QScriptConverter::toPropertyFlags(flags), &exception);
+ m_engine->setException(exception);
+}
+
+inline QScriptValue::PropertyFlags QScriptValuePrivate::propertyFlags(const QString& name, const QScriptValue::ResolveFlags& mode)
+{
+ JSRetainPtr<JSStringRef> propertyName(Adopt, QScriptConverter::toString(name));
+ return propertyFlags(propertyName.get(), mode);
+}
+
+inline QScriptValue::PropertyFlags QScriptValuePrivate::propertyFlags(const QScriptStringPrivate* name, const QScriptValue::ResolveFlags& mode)
+{
+ return propertyFlags(*name, mode);
+}
+
+inline QScriptValue::PropertyFlags QScriptValuePrivate::propertyFlags(JSStringRef name, const QScriptValue::ResolveFlags& mode)
+{
+ unsigned flags = 0;
+ if (!isObject())
+ return QScriptValue::PropertyFlags(flags);
+
+ // FIXME It could be faster and nicer, but new JSC C API should be created.
+ static JSStringRef objectName = QScriptConverter::toString("Object");
+ static JSStringRef propertyDescriptorName = QScriptConverter::toString("getOwnPropertyDescriptor");
+
+ // FIXME This is dangerous if global object was modified (bug 41839).
+ JSValueRef exception = 0;
+ JSObjectRef globalObject = JSContextGetGlobalObject(*m_engine);
+ JSValueRef objectConstructor = JSObjectGetProperty(*m_engine, globalObject, objectName, &exception);
+ Q_ASSERT(JSValueIsObject(*m_engine, objectConstructor));
+ JSValueRef propertyDescriptorGetter = JSObjectGetProperty(*m_engine, const_cast<JSObjectRef>(objectConstructor), propertyDescriptorName, &exception);
+ Q_ASSERT(JSValueIsObject(*m_engine, propertyDescriptorGetter));
+
+ JSValueRef arguments[] = { *this, JSValueMakeString(*m_engine, name) };
+ JSObjectRef propertyDescriptor
+ = const_cast<JSObjectRef>(JSObjectCallAsFunction(*m_engine,
+ const_cast<JSObjectRef>(propertyDescriptorGetter),
+ /* thisObject */ 0,
+ /* argumentCount */ 2,
+ arguments,
+ &exception));
+ if (exception) {
+ // Invalid property.
+ return QScriptValue::PropertyFlags(flags);
+ }
+
+ if (!JSValueIsObject(*m_engine, propertyDescriptor)) {
+ // Property isn't owned by this object.
+ JSObjectRef proto;
+ if (mode == QScriptValue::ResolveLocal
+ || ((proto = const_cast<JSObjectRef>(JSObjectGetPrototype(*m_engine, *this))) && JSValueIsNull(*m_engine, proto))) {
+ return QScriptValue::PropertyFlags(flags);
+ }
+ QScriptValuePrivate p(engine(), proto);
+ return p.propertyFlags(name, QScriptValue::ResolvePrototype);
}
- return new QScriptValuePrivate(m_engine.constData(), JSObjectGetPropertyAtIndex(*m_engine, *this, arrayIndex, /* exception */ 0));
+ static JSStringRef writableName = QScriptConverter::toString("writable");
+ static JSStringRef configurableName = QScriptConverter::toString("configurable");
+ static JSStringRef enumerableName = QScriptConverter::toString("enumerable");
+
+ bool readOnly = !JSValueToBoolean(*m_engine, JSObjectGetProperty(*m_engine, propertyDescriptor, writableName, &exception));
+ if (!exception && readOnly)
+ flags |= QScriptValue::ReadOnly;
+ bool undeletable = !JSValueToBoolean(*m_engine, JSObjectGetProperty(*m_engine, propertyDescriptor, configurableName, &exception));
+ if (!exception && undeletable)
+ flags |= QScriptValue::Undeletable;
+ bool skipInEnum = !JSValueToBoolean(*m_engine, JSObjectGetProperty(*m_engine, propertyDescriptor, enumerableName, &exception));
+ if (!exception && skipInEnum)
+ flags |= QScriptValue::SkipInEnumeration;
+
+ return QScriptValue::PropertyFlags(flags);
}
QScriptValuePrivate* QScriptValuePrivate::call(const QScriptValuePrivate*, const QScriptValueList& args)
diff --git a/JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp b/JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp
index 753fcd0..72ca9b1 100644
--- a/JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp
+++ b/JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp
@@ -416,21 +416,48 @@ void tst_QScriptEngine::newArray()
QScriptEngine eng;
QScriptValue array = eng.newArray();
QCOMPARE(array.isValid(), true);
- // QCOMPARE(array.isArray(), true);
+ QCOMPARE(array.isArray(), true);
QCOMPARE(array.isObject(), true);
QVERIFY(!array.isFunction());
// QCOMPARE(array.scriptClass(), (QScriptClass*)0);
// Prototype should be Array.prototype.
QCOMPARE(array.prototype().isValid(), true);
- // QCOMPARE(array.prototype().isArray(), true);
+ QCOMPARE(array.prototype().isArray(), true);
QCOMPARE(array.prototype().strictlyEquals(eng.evaluate("Array.prototype")), true);
QScriptValue arrayWithSize = eng.newArray(42);
QCOMPARE(arrayWithSize.isValid(), true);
- // QCOMPARE(arrayWithSize.isArray(), true);
+ QCOMPARE(arrayWithSize.isArray(), true);
QCOMPARE(arrayWithSize.isObject(), true);
QCOMPARE(arrayWithSize.property("length").toInt32(), 42);
+
+ // task 218092
+ {
+ QScriptValue ret = eng.evaluate("[].splice(0, 0, 'a')");
+ QVERIFY(ret.isArray());
+ QCOMPARE(ret.property("length").toInt32(), 0);
+ }
+ {
+ QScriptValue ret = eng.evaluate("['a'].splice(0, 1, 'b')");
+ QVERIFY(ret.isArray());
+ QCOMPARE(ret.property("length").toInt32(), 1);
+ }
+ {
+ QScriptValue ret = eng.evaluate("['a', 'b'].splice(0, 1, 'c')");
+ QVERIFY(ret.isArray());
+ QCOMPARE(ret.property("length").toInt32(), 1);
+ }
+ {
+ QScriptValue ret = eng.evaluate("['a', 'b', 'c'].splice(0, 2, 'd')");
+ QVERIFY(ret.isArray());
+ QCOMPARE(ret.property("length").toInt32(), 2);
+ }
+ {
+ QScriptValue ret = eng.evaluate("['a', 'b', 'c'].splice(1, 2, 'd', 'e', 'f')");
+ QVERIFY(ret.isArray());
+ QCOMPARE(ret.property("length").toInt32(), 2);
+ }
}
void tst_QScriptEngine::uncaughtException()
diff --git a/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp b/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp
index 2a2a6b1..73b57dc 100644
--- a/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp
+++ b/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.cpp
@@ -274,6 +274,392 @@ void tst_QScriptValue::ctor()
QVERIFY(QScriptValue(0, QString("ciao")).isString());
}
+void tst_QScriptValue::getPropertySimple_data()
+{
+ QTest::addColumn<QString>("code");
+ QTest::addColumn<QString>("propertyName");
+ QTest::addColumn<QString>("desc");
+ QTest::addColumn<bool>("isArrayIndex");
+
+ QTest::newRow("new Array()")
+ << QString::fromAscii("new Array()")
+ << QString::fromAscii("length")
+ << QString::fromAscii("0")
+ << false;
+ QTest::newRow("new Object().length")
+ << QString::fromAscii("new Object()")
+ << QString::fromAscii("length")
+ << QString::fromAscii("") // Undefined is an invalid property.
+ << false;
+ QTest::newRow("new Object().toString")
+ << QString::fromAscii("new Object()")
+ << QString::fromAscii("toString")
+ << QString::fromAscii("function toString() {\n [native code]\n}")
+ << false;
+ QTest::newRow("[1,2,3,4]")
+ << QString::fromAscii("[1,2,3,'s',4]")
+ << QString::fromAscii("2")
+ << QString::fromAscii("3")
+ << true;
+ QTest::newRow("[1,3,'a','b']")
+ << QString::fromAscii("[1,3,'a','b']")
+ << QString::fromAscii("3")
+ << QString::fromAscii("b")
+ << true;
+ QTest::newRow("[4,5]")
+ << QString::fromAscii("[4,5]")
+ << QString::fromAscii("123")
+ << QString::fromAscii("") // Undefined is an invalid property.
+ << true;
+ QTest::newRow("[1,3,4]")
+ << QString::fromAscii("[1,3,4]")
+ << QString::fromAscii("abc")
+ << QString::fromAscii("") // Undefined is an invalid property.
+ << true;
+}
+
+void tst_QScriptValue::getPropertySimple()
+{
+ QFETCH(QString, code);
+ QFETCH(QString, propertyName);
+ QFETCH(QString, desc);
+
+ QScriptEngine engine;
+ QScriptValue object = engine.evaluate(code);
+ QVERIFY(object.isValid());
+ {
+ QScriptValue property = object.property(propertyName);
+ QCOMPARE(property.toString(), desc);
+ }
+ {
+ QScriptString name = engine.toStringHandle(propertyName);
+ QScriptValue property = object.property(name);
+ QCOMPARE(property.toString(), desc);
+ }
+ {
+ bool ok;
+ quint32 idx = engine.toStringHandle(propertyName).toArrayIndex(&ok);
+ if (ok) {
+ QScriptValue property = object.property(idx);
+ QCOMPARE(property.toString(), desc);
+ }
+ }
+}
+
+void tst_QScriptValue::setPropertySimple()
+{
+ QScriptEngine engine;
+ {
+ QScriptValue invalid;
+ QScriptValue property(1234);
+
+ invalid.setProperty("aaa", property);
+ invalid.setProperty(13, property);
+ invalid.setProperty(engine.toStringHandle("aaa"), property);
+
+ QVERIFY(!invalid.property("aaa").isValid());
+ QVERIFY(!invalid.property(13).isValid());
+ QVERIFY(!invalid.property(engine.toStringHandle("aaa")).isValid());
+ }
+ {
+ QScriptValue object = engine.newObject();
+ QScriptValue property;
+
+ object.setProperty(13, property);
+ object.setProperty("aaa", property);
+ object.setProperty(engine.toStringHandle("aaa"), property);
+
+ QVERIFY(!object.property(13).isValid());
+ QVERIFY(!object.property("aaa").isValid());
+ QVERIFY(!object.property(engine.toStringHandle("aaa")).isValid());
+ }
+ {
+ // Check if setting an invalid property works as deleteProperty.
+ QScriptValue object = engine.evaluate("o = {13: 0, 'aaa': 3, 'bbb': 1}");
+ QScriptValue property;
+
+ QVERIFY(object.property(13).isValid());
+ QVERIFY(object.property("aaa").isValid());
+ QVERIFY(object.property(engine.toStringHandle("aaa")).isValid());
+
+ object.setProperty(13, property);
+ object.setProperty("aaa", property);
+ object.setProperty(engine.toStringHandle("bbb"), property);
+
+ QVERIFY(!object.property(13).isValid());
+ QVERIFY(!object.property("aaa").isValid());
+ QVERIFY(!object.property(engine.toStringHandle("aaa")).isValid());
+ }
+ {
+ QScriptValue object = engine.evaluate("new Object");
+ QVERIFY(object.isObject());
+ QScriptValue property = object.property("foo");
+ QVERIFY(!property.isValid());
+ property = QScriptValue(2);
+ object.setProperty("foo", property);
+ QVERIFY(object.property("foo").isNumber());
+ QVERIFY(object.property("foo").toNumber() == 2);
+ }
+ {
+ QScriptValue o1 = engine.evaluate("o1 = new Object; o1");
+ QScriptValue o2 = engine.evaluate("o2 = new Object; o2");
+ QVERIFY(engine.evaluate("o1.__proto__ = o2; o1.__proto__ === o2").toBool());
+ QVERIFY(engine.evaluate("o2.foo = 22; o1.foo == 22").toBool());
+ QVERIFY(o1.property("foo").toString() == "22");
+ o2.setProperty("foo", QScriptValue(&engine, 456.0));
+ QVERIFY(engine.evaluate("o1.foo == 456").toBool());
+ QVERIFY(o1.property("foo").isNumber());
+ }
+}
+
+void tst_QScriptValue::getPropertyResolveFlag()
+{
+ QScriptEngine engine;
+ QScriptValue object1 = engine.evaluate("o1 = new Object();");
+ QScriptValue object2 = engine.evaluate("o2 = new Object(); o1.__proto__ = o2; o2");
+ QScriptValue number(&engine, 456.0);
+ QVERIFY(object1.isObject());
+ QVERIFY(object2.isObject());
+ QVERIFY(number.isNumber());
+
+ object2.setProperty("propertyInPrototype", number);
+ QVERIFY(object2.property("propertyInPrototype").isNumber());
+ // default is ResolvePrototype
+ QCOMPARE(object1.property("propertyInPrototype").strictlyEquals(number), true);
+ QCOMPARE(object1.property("propertyInPrototype", QScriptValue::ResolvePrototype)
+ .strictlyEquals(number), true);
+ QCOMPARE(object1.property("propertyInPrototype", QScriptValue::ResolveLocal).isValid(), false);
+}
+
+void tst_QScriptValue::getSetProperty()
+{
+ QScriptEngine eng;
+
+ QScriptValue object = eng.newObject();
+
+ QScriptValue str = QScriptValue(&eng, "bar");
+ object.setProperty("foo", str);
+ QCOMPARE(object.property("foo").toString(), str.toString());
+
+ QScriptValue num = QScriptValue(&eng, 123.0);
+ object.setProperty("baz", num);
+ QCOMPARE(object.property("baz").toNumber(), num.toNumber());
+
+ QScriptValue strstr = QScriptValue("bar");
+ QCOMPARE(strstr.engine(), (QScriptEngine *)0);
+ object.setProperty("foo", strstr);
+ QCOMPARE(object.property("foo").toString(), strstr.toString());
+ QCOMPARE(strstr.engine(), &eng); // the value has been bound to the engine
+
+ QScriptValue numnum = QScriptValue(123.0);
+ object.setProperty("baz", numnum);
+ QCOMPARE(object.property("baz").toNumber(), numnum.toNumber());
+
+ QScriptValue inv;
+ inv.setProperty("foo", num);
+ QCOMPARE(inv.property("foo").isValid(), false);
+
+ QScriptValue array = eng.newArray();
+ array.setProperty(0, num);
+ QCOMPARE(array.property(0).toNumber(), num.toNumber());
+ QCOMPARE(array.property("0").toNumber(), num.toNumber());
+ QCOMPARE(array.property("length").toUInt32(), quint32(1));
+ array.setProperty(1, str);
+ QCOMPARE(array.property(1).toString(), str.toString());
+ QCOMPARE(array.property("1").toString(), str.toString());
+ QCOMPARE(array.property("length").toUInt32(), quint32(2));
+ array.setProperty("length", QScriptValue(&eng, 1));
+ QCOMPARE(array.property("length").toUInt32(), quint32(1));
+ QCOMPARE(array.property(1).isValid(), false);
+
+ // task 162051 -- detecting whether the property is an array index or not
+ QVERIFY(eng.evaluate("a = []; a['00'] = 123; a['00']").strictlyEquals(QScriptValue(&eng, 123)));
+ QVERIFY(eng.evaluate("a.length").strictlyEquals(QScriptValue(&eng, 0)));
+ QVERIFY(eng.evaluate("a.hasOwnProperty('00')").strictlyEquals(QScriptValue(&eng, true)));
+ QVERIFY(eng.evaluate("a.hasOwnProperty('0')").strictlyEquals(QScriptValue(&eng, false)));
+ QVERIFY(eng.evaluate("a[0]").isUndefined());
+ QVERIFY(eng.evaluate("a[0.5] = 456; a[0.5]").strictlyEquals(QScriptValue(&eng, 456)));
+ QVERIFY(eng.evaluate("a.length").strictlyEquals(QScriptValue(&eng, 0)));
+ QVERIFY(eng.evaluate("a.hasOwnProperty('0.5')").strictlyEquals(QScriptValue(&eng, true)));
+ QVERIFY(eng.evaluate("a[0]").isUndefined());
+ QVERIFY(eng.evaluate("a[0] = 789; a[0]").strictlyEquals(QScriptValue(&eng, 789)));
+ QVERIFY(eng.evaluate("a.length").strictlyEquals(QScriptValue(&eng, 1)));
+
+ // task 183072 -- 0x800000000 is not an array index
+ eng.evaluate("a = []; a[0x800000000] = 123");
+ QVERIFY(eng.evaluate("a.length").strictlyEquals(QScriptValue(&eng, 0)));
+ QVERIFY(eng.evaluate("a[0]").isUndefined());
+ QVERIFY(eng.evaluate("a[0x800000000]").strictlyEquals(QScriptValue(&eng, 123)));
+
+ QScriptEngine otherEngine;
+ QScriptValue otherNum = QScriptValue(&otherEngine, 123);
+ QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setProperty() failed: cannot set value created in a different engine");
+ object.setProperty("oof", otherNum);
+ QCOMPARE(object.property("oof").isValid(), false);
+
+ // test ResolveMode
+ QScriptValue object2 = eng.newObject();
+ object.setPrototype(object2);
+ QScriptValue num2 = QScriptValue(&eng, 456.0);
+ object2.setProperty("propertyInPrototype", num2);
+ // default is ResolvePrototype
+ QCOMPARE(object.property("propertyInPrototype")
+ .strictlyEquals(num2), true);
+ QCOMPARE(object.property("propertyInPrototype", QScriptValue::ResolvePrototype)
+ .strictlyEquals(num2), true);
+ QCOMPARE(object.property("propertyInPrototype", QScriptValue::ResolveLocal)
+ .isValid(), false);
+ QEXPECT_FAIL("", "QScriptValue::ResolveScope is not implemented", Continue);
+ QCOMPARE(object.property("propertyInPrototype", QScriptValue::ResolveScope)
+ .strictlyEquals(num2), false);
+ QCOMPARE(object.property("propertyInPrototype", QScriptValue::ResolveFull)
+ .strictlyEquals(num2), true);
+
+ // test property removal (setProperty(QScriptValue()))
+ QScriptValue object3 = eng.newObject();
+ object3.setProperty("foo", num);
+ QCOMPARE(object3.property("foo").strictlyEquals(num), true);
+ object3.setProperty("bar", str);
+ QCOMPARE(object3.property("bar").strictlyEquals(str), true);
+ object3.setProperty("foo", QScriptValue());
+ QCOMPARE(object3.property("foo").isValid(), false);
+ QCOMPARE(object3.property("bar").strictlyEquals(str), true);
+ object3.setProperty("foo", num);
+ QCOMPARE(object3.property("foo").strictlyEquals(num), true);
+ QCOMPARE(object3.property("bar").strictlyEquals(str), true);
+ object3.setProperty("bar", QScriptValue());
+ QCOMPARE(object3.property("bar").isValid(), false);
+ QCOMPARE(object3.property("foo").strictlyEquals(num), true);
+ object3.setProperty("foo", QScriptValue());
+ object3.setProperty("foo", QScriptValue());
+
+ eng.globalObject().setProperty("object3", object3);
+ QCOMPARE(eng.evaluate("object3.hasOwnProperty('foo')")
+ .strictlyEquals(QScriptValue(&eng, false)), true);
+ object3.setProperty("foo", num);
+ QCOMPARE(eng.evaluate("object3.hasOwnProperty('foo')")
+ .strictlyEquals(QScriptValue(&eng, true)), true);
+ eng.globalObject().setProperty("object3", QScriptValue());
+ QCOMPARE(eng.evaluate("this.hasOwnProperty('object3')")
+ .strictlyEquals(QScriptValue(&eng, false)), true);
+
+ eng.globalObject().setProperty("object", object);
+
+ // ReadOnly
+ object.setProperty("readOnlyProperty", num, QScriptValue::ReadOnly);
+ // QCOMPARE(object.propertyFlags("readOnlyProperty"), QScriptValue::ReadOnly);
+ QCOMPARE(object.property("readOnlyProperty").strictlyEquals(num), true);
+ eng.evaluate("object.readOnlyProperty = !object.readOnlyProperty");
+ QCOMPARE(object.property("readOnlyProperty").strictlyEquals(num), true);
+ // Should still be part of enumeration.
+ {
+ QScriptValue ret = eng.evaluate(
+ "found = false;"
+ "for (var p in object) {"
+ " if (p == 'readOnlyProperty') {"
+ " found = true; break;"
+ " }"
+ "} found");
+ QCOMPARE(ret.strictlyEquals(QScriptValue(&eng, true)), true);
+ }
+ // should still be deletable
+ {
+ QScriptValue ret = eng.evaluate("delete object.readOnlyProperty");
+ QCOMPARE(ret.strictlyEquals(QScriptValue(&eng, true)), true);
+ QCOMPARE(object.property("readOnlyProperty").isValid(), false);
+ }
+
+ // Undeletable
+ object.setProperty("undeletableProperty", num, QScriptValue::Undeletable);
+ // QCOMPARE(object.propertyFlags("undeletableProperty"), QScriptValue::Undeletable);
+ QCOMPARE(object.property("undeletableProperty").strictlyEquals(num), true);
+ {
+ QScriptValue ret = eng.evaluate("delete object.undeletableProperty");
+ QCOMPARE(ret.strictlyEquals(QScriptValue(&eng, true)), false);
+ QCOMPARE(object.property("undeletableProperty").strictlyEquals(num), true);
+ }
+ // should still be writable
+ eng.evaluate("object.undeletableProperty = object.undeletableProperty + 1");
+ QCOMPARE(object.property("undeletableProperty").toNumber(), num.toNumber() + 1);
+ // should still be part of enumeration
+ {
+ QScriptValue ret = eng.evaluate(
+ "found = false;"
+ "for (var p in object) {"
+ " if (p == 'undeletableProperty') {"
+ " found = true; break;"
+ " }"
+ "} found");
+ QCOMPARE(ret.strictlyEquals(QScriptValue(&eng, true)), true);
+ }
+ // should still be deletable from C++
+ object.setProperty("undeletableProperty", QScriptValue());
+ QEXPECT_FAIL("", "With JSC-based back-end, undeletable properties can't be deleted from C++", Continue);
+ QVERIFY(!object.property("undeletableProperty").isValid());
+ // QEXPECT_FAIL("", "With JSC-based back-end, undeletable properties can't be deleted from C++", Continue);
+ // QCOMPARE(object.propertyFlags("undeletableProperty"), 0);
+
+ // SkipInEnumeration
+ object.setProperty("dontEnumProperty", num, QScriptValue::SkipInEnumeration);
+ // QCOMPARE(object.propertyFlags("dontEnumProperty"), QScriptValue::SkipInEnumeration);
+ QCOMPARE(object.property("dontEnumProperty").strictlyEquals(num), true);
+ // should not be part of enumeration
+ {
+ QScriptValue ret = eng.evaluate(
+ "found = false;"
+ "for (var p in object) {"
+ " if (p == 'dontEnumProperty') {"
+ " found = true; break;"
+ " }"
+ "} found");
+ QCOMPARE(ret.strictlyEquals(QScriptValue(&eng, false)), true);
+ }
+ // should still be writable
+ eng.evaluate("object.dontEnumProperty = object.dontEnumProperty + 1");
+ QCOMPARE(object.property("dontEnumProperty").toNumber(), num.toNumber() + 1);
+ // should still be deletable
+ {
+ QScriptValue ret = eng.evaluate("delete object.dontEnumProperty");
+ QCOMPARE(ret.strictlyEquals(QScriptValue(&eng, true)), true);
+ QCOMPARE(object.property("dontEnumProperty").isValid(), false);
+ }
+
+ // change flags
+ object.setProperty("flagProperty", str);
+ // QCOMPARE(object.propertyFlags("flagProperty"), static_cast<QScriptValue::PropertyFlags>(0));
+
+ object.setProperty("flagProperty", str, QScriptValue::ReadOnly);
+ // QCOMPARE(object.propertyFlags("flagProperty"), QScriptValue::ReadOnly);
+
+ // object.setProperty("flagProperty", str, object.propertyFlags("flagProperty") | QScriptValue::SkipInEnumeration);
+ // QCOMPARE(object.propertyFlags("flagProperty"), QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration);
+
+ object.setProperty("flagProperty", str, QScriptValue::KeepExistingFlags);
+ // QCOMPARE(object.propertyFlags("flagProperty"), QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration);
+
+ object.setProperty("flagProperty", str, QScriptValue::UserRange);
+ // QCOMPARE(object.propertyFlags("flagProperty"), QScriptValue::UserRange);
+
+ // flags of property in the prototype
+ {
+ QScriptValue object2 = eng.newObject();
+ object2.setPrototype(object);
+ // QCOMPARE(object2.propertyFlags("flagProperty", QScriptValue::ResolveLocal), 0);
+ // QCOMPARE(object2.propertyFlags("flagProperty"), QScriptValue::UserRange);
+ }
+
+ // using interned strings
+ QScriptString foo = eng.toStringHandle("foo");
+
+ object.setProperty(foo, QScriptValue());
+ QVERIFY(!object.property(foo).isValid());
+
+ object.setProperty(foo, num);
+ QVERIFY(object.property(foo).strictlyEquals(num));
+ QVERIFY(object.property("foo").strictlyEquals(num));
+ // QVERIFY(object.propertyFlags(foo) == 0);
+}
+
void tst_QScriptValue::toStringSimple_data()
{
QTest::addColumn<QString>("code");
@@ -580,17 +966,299 @@ void tst_QScriptValue::toObjectSimple()
}
}
-void tst_QScriptValue::propertySimple()
+void tst_QScriptValue::setProperty_data()
{
- QScriptEngine eng;
+ QTest::addColumn<QScriptValue>("property");
+ QTest::addColumn<int>("flag");
+
+ QTest::newRow("int + keepExistingFlags") << QScriptValue(123456) << static_cast<int>(QScriptValue::KeepExistingFlags);
+ QTest::newRow("int + undeletable") << QScriptValue(123456) << static_cast<int>(QScriptValue::Undeletable);
+ QTest::newRow("int + readOnly") << QScriptValue(123456) << static_cast<int>(QScriptValue::ReadOnly);
+ QTest::newRow("int + readOnly|undeletable") << QScriptValue(123456) << static_cast<int>(QScriptValue::ReadOnly | QScriptValue::Undeletable);
+ QTest::newRow("int + skipInEnumeration") << QScriptValue(123456) << static_cast<int>(QScriptValue::SkipInEnumeration);
+ QTest::newRow("int + skipInEnumeration|readOnly") << QScriptValue(123456) << static_cast<int>(QScriptValue::SkipInEnumeration | QScriptValue::ReadOnly);
+ QTest::newRow("int + skipInEnumeration|undeletable") << QScriptValue(123456) << static_cast<int>(QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
+ QTest::newRow("int + skipInEnumeration|readOnly|undeletable") << QScriptValue(123456) << static_cast<int>(QScriptValue::SkipInEnumeration | QScriptValue::ReadOnly | QScriptValue::Undeletable);
+}
+
+void tst_QScriptValue::setProperty()
+{
+ QFETCH(QScriptValue, property);
+ QFETCH(int, flag);
+ QScriptValue::PropertyFlags flags = static_cast<QScriptValue::PropertyFlag>(flag);
- QScriptValue simpleObject(eng.evaluate("new Object({ test: 1, other: 2 })"));
- QCOMPARE(simpleObject.property("test").toUInt32(), quint32(1));
- QCOMPARE(simpleObject.property("other").toUInt32(), quint32(2));
+ QScriptEngine engine;
+ QScriptValue object = engine.evaluate("o = new Object; o");
+ QScriptValue proto = engine.evaluate("p = new Object; o.__proto__ = p; p");
+ engine.evaluate("o.defined1 = 1");
+ engine.evaluate("o.defined2 = 1");
+ engine.evaluate("o[5] = 1");
+ engine.evaluate("p.overloaded1 = 1");
+ engine.evaluate("o.overloaded1 = 2");
+ engine.evaluate("p[6] = 1");
+ engine.evaluate("o[6] = 2");
+ engine.evaluate("p.overloaded2 = 1");
+ engine.evaluate("o.overloaded2 = 2");
+ engine.evaluate("p.overloaded3 = 1");
+ engine.evaluate("o.overloaded3 = 2");
+ engine.evaluate("p[7] = 1");
+ engine.evaluate("o[7] = 2");
+ engine.evaluate("p.overloaded4 = 1");
+ engine.evaluate("o.overloaded4 = 2");
+
+ // tries to set undefined property directly on object.
+ object.setProperty(QString::fromAscii("undefined1"), property, flags);
+ QVERIFY(engine.evaluate("o.undefined1").strictlyEquals(property));
+ object.setProperty(engine.toStringHandle("undefined2"), property, flags);
+ QVERIFY(object.property("undefined2").strictlyEquals(property));
+ object.setProperty(4, property, flags);
+ QVERIFY(object.property(4).strictlyEquals(property));
+
+ // tries to set defined property directly on object
+ object.setProperty("defined1", property, flags);
+ QVERIFY(engine.evaluate("o.defined1").strictlyEquals(property));
+ object.setProperty(engine.toStringHandle("defined2"), property, flags);
+ QVERIFY(object.property("defined2").strictlyEquals(property));
+ object.setProperty(5, property, flags);
+ QVERIFY(object.property(5).strictlyEquals(property));
+
+ // tries to set overloaded property directly on object
+ object.setProperty("overloaded1", property, flags);
+ QVERIFY(engine.evaluate("o.overloaded1").strictlyEquals(property));
+ object.setProperty(engine.toStringHandle("overloaded2"), property, flags);
+ QVERIFY(object.property("overloaded2").strictlyEquals(property));
+ object.setProperty(6, property, flags);
+ QVERIFY(object.property(6).strictlyEquals(property));
+
+ // tries to set overloaded property directly on prototype
+ proto.setProperty("overloaded3", property, flags);
+ QVERIFY(!engine.evaluate("o.overloaded3").strictlyEquals(property));
+ proto.setProperty(engine.toStringHandle("overloaded4"), property, flags);
+ QVERIFY(!object.property("overloaded4").strictlyEquals(property));
+ proto.setProperty(7, property, flags);
+ QVERIFY(!object.property(7).strictlyEquals(property));
+
+ // tries to set undefined property directly on prototype
+ proto.setProperty("undefined3", property, flags);
+ QVERIFY(engine.evaluate("o.undefined3").strictlyEquals(property));
+ proto.setProperty(engine.toStringHandle("undefined4"), property, flags);
+ QVERIFY(object.property("undefined4").strictlyEquals(property));
+ proto.setProperty(8, property, flags);
+ QVERIFY(object.property(8).strictlyEquals(property));
+
+ bool readOnly = flags & QScriptValue::ReadOnly;
+ bool skipInEnumeration = flags & QScriptValue::SkipInEnumeration;
+ bool undeletable = flags & QScriptValue::Undeletable;
+
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, '4').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, '5').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, '6').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(p, '7').writable").toBool());
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(p, '8').writable").toBool());
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'undefined1').writable").toBool());
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'undefined2').writable").toBool());
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'undefined3').writable").toBool());
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'undefined4').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'defined1').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'defined2').writable").toBool());
+ QVERIFY(engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'undefined1').writable").toBool());
+ QVERIFY(engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'undefined1').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'overloaded3').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'overloaded4').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'overloaded1').writable").toBool());
+ QEXPECT_FAIL("int + readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(readOnly == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'overloaded2').writable").toBool());
+ QVERIFY(!engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'overloaded3').writable").toBool());
+ QVERIFY(!engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'overloaded4').writable").toBool());
+
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, '4').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, '5').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, '6').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(p, '7').configurable").toBool());
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(p, '8').configurable").toBool());
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'undefined1').configurable").toBool());
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'undefined2').configurable").toBool());
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'undefined3').configurable").toBool());
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'undefined4').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'defined1').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'defined2').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'overloaded1').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(o, 'overloaded2').configurable").toBool());
+ QVERIFY(engine.evaluate("Object.getOwnPropertyDescriptor(p, 'overloaded1').configurable").toBool());
+ QVERIFY(engine.evaluate("Object.getOwnPropertyDescriptor(p, 'overloaded2').configurable").toBool());
+ QVERIFY(engine.evaluate("Object.getOwnPropertyDescriptor(o, 'overloaded3').configurable").toBool());
+ QVERIFY(engine.evaluate("Object.getOwnPropertyDescriptor(o, 'overloaded4').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'overloaded3').configurable").toBool());
+ QEXPECT_FAIL("int + undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(undeletable == engine.evaluate("!Object.getOwnPropertyDescriptor(p, 'overloaded4').configurable").toBool());
+
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, '4').enumerable").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, '5').enumerable").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, '6').enumerable").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(p, '7').enumerable").toBool());
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(p, '8').enumerable").toBool());
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, 'undefined1').enumerable").toBool());
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, 'undefined2').enumerable").toBool());
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(p, 'undefined3').enumerable").toBool());
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(p, 'undefined4').enumerable").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, 'overloaded1').enumerable").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("Object.getOwnPropertyDescriptor(o, 'overloaded2').enumerable").toBool());
+ QVERIFY(engine.evaluate("p.propertyIsEnumerable('overloaded1')").toBool());
+ QVERIFY(engine.evaluate("p.propertyIsEnumerable('overloaded2')").toBool());
+ QVERIFY(engine.evaluate("o.propertyIsEnumerable('overloaded3')").toBool());
+ QVERIFY(engine.evaluate("o.propertyIsEnumerable('overloaded4')").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("p.propertyIsEnumerable('overloaded3')").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("p.propertyIsEnumerable('overloaded4')").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("o.propertyIsEnumerable('defined1')").toBool());
+ QEXPECT_FAIL("int + skipInEnumeration", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QEXPECT_FAIL("int + skipInEnumeration|readOnly|undeletable", "WebKit bug: 40613 (The JSObjectSetProperty doesn't overwrite property flags)", Continue);
+ QVERIFY(skipInEnumeration != engine.evaluate("o.propertyIsEnumerable('defined2')").toBool());
+}
- QScriptValue simpleArray(eng.evaluate("new Array(7, 8, 9)"));
- QCOMPARE(simpleArray.property("length").toUInt32(), quint32(3));
- QCOMPARE(simpleArray.property(2).toUInt32(), quint32(9));
+void tst_QScriptValue::propertyFlag_data()
+{
+ QTest::addColumn<QString>("name");
+ QTest::addColumn<int>("flag");
+
+ QTest::newRow("?Cr@jzi!%$") << "?Cr@jzi!%$" << static_cast<int>(0);
+ QTest::newRow("ReadOnly") << "ReadOnly" << static_cast<int>(QScriptValue::ReadOnly);
+ QTest::newRow("Undeletable") << "Undeletable" << static_cast<int>(QScriptValue::Undeletable);
+ QTest::newRow("SkipInEnumeration") << "SkipInEnumeration" << static_cast<int>(QScriptValue::SkipInEnumeration);
+ QTest::newRow("ReadOnly | Undeletable") << "ReadOnly_Undeletable" << static_cast<int>(QScriptValue::ReadOnly | QScriptValue::Undeletable);
+ QTest::newRow("ReadOnly | SkipInEnumeration") << "ReadOnly_SkipInEnumeration" << static_cast<int>(QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration);
+ QTest::newRow("Undeletable | SkipInEnumeration") << "Undeletable_SkipInEnumeration" << static_cast<int>(QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ QTest::newRow("ReadOnly | Undeletable | SkipInEnumeration") << "ReadOnly_Undeletable_SkipInEnumeration" << static_cast<int>(QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+}
+
+void tst_QScriptValue::propertyFlag()
+{
+ QScriptEngine engine;
+ QFETCH(QString, name);
+ QFETCH(int, flag);
+ const QScriptString nameHandle = engine.toStringHandle(name);
+ const QString protoName = "proto" + name;
+ const QScriptString protoNameHandle = engine.toStringHandle(protoName);
+
+ QScriptValue proto = engine.newObject();
+ QScriptValue object = engine.newObject();
+ object.setPrototype(proto);
+
+ proto.setProperty(protoName, QScriptValue(124816), QScriptValue::PropertyFlag(flag));
+ object.setProperty(name, QScriptValue(124816), QScriptValue::PropertyFlag(flag));
+
+ // Check using QString name
+ QCOMPARE(object.propertyFlags(name), QScriptValue::PropertyFlag(flag));
+ QCOMPARE(object.propertyFlags(protoName, QScriptValue::ResolvePrototype), QScriptValue::PropertyFlag(flag));
+ QVERIFY(!object.propertyFlags(protoName, QScriptValue::ResolveLocal));
+
+ // Check using QScriptString name
+ QCOMPARE(object.propertyFlags(nameHandle), QScriptValue::PropertyFlag(flag));
+ QCOMPARE(object.propertyFlags(protoNameHandle, QScriptValue::ResolvePrototype), QScriptValue::PropertyFlag(flag));
+ QVERIFY(!object.propertyFlags(protoNameHandle, QScriptValue::ResolveLocal));
}
QTEST_MAIN(tst_QScriptValue)
diff --git a/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h b/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h
index af600a6..6108423 100644
--- a/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h
+++ b/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h
@@ -51,7 +51,15 @@ private slots:
void call();
void ctor();
void toObjectSimple();
- void propertySimple();
+ void getPropertySimple_data();
+ void getPropertySimple();
+ void setPropertySimple();
+ void setProperty_data();
+ void setProperty();
+ void getSetProperty();
+ void getPropertyResolveFlag();
+ void propertyFlag_data();
+ void propertyFlag();
// Generated test functions.
void isBool_data();
diff --git a/JavaScriptCore/runtime/Arguments.h b/JavaScriptCore/runtime/Arguments.h
index 6bb180c..d892de0 100644
--- a/JavaScriptCore/runtime/Arguments.h
+++ b/JavaScriptCore/runtime/Arguments.h
@@ -139,7 +139,7 @@ namespace JSC {
inline Arguments::Arguments(CallFrame* callFrame)
: JSObject(callFrame->lexicalGlobalObject()->argumentsStructure())
- , d(new ArgumentsData)
+ , d(adoptPtr(new ArgumentsData))
{
JSFunction* callee;
ptrdiff_t firstParameterIndex;
@@ -176,7 +176,7 @@ namespace JSC {
inline Arguments::Arguments(CallFrame* callFrame, NoParametersType)
: JSObject(callFrame->lexicalGlobalObject()->argumentsStructure())
- , d(new ArgumentsData)
+ , d(adoptPtr(new ArgumentsData))
{
ASSERT(!asFunction(callFrame->callee())->jsExecutable()->parameterCount());
diff --git a/JavaScriptCore/runtime/ArrayPrototype.cpp b/JavaScriptCore/runtime/ArrayPrototype.cpp
index 9407be7..2cb04ff 100644
--- a/JavaScriptCore/runtime/ArrayPrototype.cpp
+++ b/JavaScriptCore/runtime/ArrayPrototype.cpp
@@ -76,8 +76,16 @@ static inline bool isNumericCompareFunction(ExecState* exec, CallType callType,
#if ENABLE(JIT)
// If the JIT is enabled then we need to preserve the invariant that every
// function with a CodeBlock also has JIT code.
- callData.js.functionExecutable->jitCodeForCall(exec, callData.js.scopeChain);
- CodeBlock* codeBlock = &callData.js.functionExecutable->generatedBytecodeForCall();
+ CodeBlock* codeBlock = 0;
+#if ENABLE(INTERPRETER)
+ if (!exec->globalData().canUseJIT())
+ codeBlock = callData.js.functionExecutable->bytecodeForCall(exec, callData.js.scopeChain);
+ else
+#endif
+ {
+ callData.js.functionExecutable->jitCodeForCall(exec, callData.js.scopeChain);
+ codeBlock = &callData.js.functionExecutable->generatedBytecodeForCall();
+ }
#else
CodeBlock* codeBlock = callData.js.functionExecutable->bytecodeForCall(exec, callData.js.scopeChain);
#endif
diff --git a/JavaScriptCore/runtime/DatePrototype.cpp b/JavaScriptCore/runtime/DatePrototype.cpp
index f8d2224..9dec33b 100644
--- a/JavaScriptCore/runtime/DatePrototype.cpp
+++ b/JavaScriptCore/runtime/DatePrototype.cpp
@@ -411,7 +411,7 @@ const ClassInfo DatePrototype::info = {"Date", &DateInstance::info, 0, ExecState
setUTCFullYear dateProtoFuncSetUTCFullYear DontEnum|Function 3
setYear dateProtoFuncSetYear DontEnum|Function 1
getYear dateProtoFuncGetYear DontEnum|Function 0
- toJSON dateProtoFuncToJSON DontEnum|Function 0
+ toJSON dateProtoFuncToJSON DontEnum|Function 1
@end
*/
diff --git a/JavaScriptCore/runtime/Executable.cpp b/JavaScriptCore/runtime/Executable.cpp
index f33f3b4..355ee86 100644
--- a/JavaScriptCore/runtime/Executable.cpp
+++ b/JavaScriptCore/runtime/Executable.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -77,7 +77,7 @@ JSObject* EvalExecutable::compile(ExecState* exec, ScopeChainNode* scopeChainNod
ASSERT(!m_evalCodeBlock);
m_evalCodeBlock = new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth());
- OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(evalNode.get(), globalObject->debugger(), scopeChain, m_evalCodeBlock->symbolTable(), m_evalCodeBlock));
+ OwnPtr<BytecodeGenerator> generator(adoptPtr(new BytecodeGenerator(evalNode.get(), globalObject->debugger(), scopeChain, m_evalCodeBlock->symbolTable(), m_evalCodeBlock)));
generator->generate();
evalNode->destroyData();
@@ -112,7 +112,7 @@ JSObject* ProgramExecutable::compile(ExecState* exec, ScopeChainNode* scopeChain
ASSERT(!m_programCodeBlock);
m_programCodeBlock = new ProgramCodeBlock(this, GlobalCode, globalObject, source().provider());
- OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(programNode.get(), globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_programCodeBlock));
+ OwnPtr<BytecodeGenerator> generator(adoptPtr(new BytecodeGenerator(programNode.get(), globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_programCodeBlock)));
generator->generate();
programNode->destroyData();
@@ -135,7 +135,7 @@ bool FunctionExecutable::compileForCall(ExecState*, ScopeChainNode* scopeChainNo
ASSERT(!m_codeBlockForCall);
m_codeBlockForCall = new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset(), false);
- OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(body.get(), globalObject->debugger(), scopeChain, m_codeBlockForCall->symbolTable(), m_codeBlockForCall));
+ OwnPtr<BytecodeGenerator> generator(adoptPtr(new BytecodeGenerator(body.get(), globalObject->debugger(), scopeChain, m_codeBlockForCall->symbolTable(), m_codeBlockForCall)));
generator->generate();
m_numParametersForCall = m_codeBlockForCall->m_numParameters;
ASSERT(m_numParametersForCall);
@@ -162,7 +162,7 @@ bool FunctionExecutable::compileForConstruct(ExecState*, ScopeChainNode* scopeCh
ASSERT(!m_codeBlockForConstruct);
m_codeBlockForConstruct = new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset(), true);
- OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(body.get(), globalObject->debugger(), scopeChain, m_codeBlockForConstruct->symbolTable(), m_codeBlockForConstruct));
+ OwnPtr<BytecodeGenerator> generator(adoptPtr(new BytecodeGenerator(body.get(), globalObject->debugger(), scopeChain, m_codeBlockForConstruct->symbolTable(), m_codeBlockForConstruct)));
generator->generate();
m_numParametersForConstruct = m_codeBlockForConstruct->m_numParameters;
ASSERT(m_numParametersForConstruct);
@@ -177,6 +177,9 @@ bool FunctionExecutable::compileForConstruct(ExecState*, ScopeChainNode* scopeCh
void EvalExecutable::generateJITCode(ExecState* exec, ScopeChainNode* scopeChainNode)
{
+#if ENABLE(INTERPRETER)
+ ASSERT(exec->globalData().canUseJIT());
+#endif
CodeBlock* codeBlock = &bytecode(exec, scopeChainNode);
m_jitCodeForCall = JIT::compile(scopeChainNode->globalData, codeBlock);
@@ -188,6 +191,9 @@ void EvalExecutable::generateJITCode(ExecState* exec, ScopeChainNode* scopeChain
void ProgramExecutable::generateJITCode(ExecState* exec, ScopeChainNode* scopeChainNode)
{
+#if ENABLE(INTERPRETER)
+ ASSERT(exec->globalData().canUseJIT());
+#endif
CodeBlock* codeBlock = &bytecode(exec, scopeChainNode);
m_jitCodeForCall = JIT::compile(scopeChainNode->globalData, codeBlock);
@@ -199,6 +205,9 @@ void ProgramExecutable::generateJITCode(ExecState* exec, ScopeChainNode* scopeCh
void FunctionExecutable::generateJITCodeForCall(ExecState* exec, ScopeChainNode* scopeChainNode)
{
+#if ENABLE(INTERPRETER)
+ ASSERT(exec->globalData().canUseJIT());
+#endif
CodeBlock* codeBlock = bytecodeForCall(exec, scopeChainNode);
m_jitCodeForCall = JIT::compile(scopeChainNode->globalData, codeBlock, &m_jitCodeForCallWithArityCheck);
@@ -210,6 +219,9 @@ void FunctionExecutable::generateJITCodeForCall(ExecState* exec, ScopeChainNode*
void FunctionExecutable::generateJITCodeForConstruct(ExecState* exec, ScopeChainNode* scopeChainNode)
{
+#if ENABLE(INTERPRETER)
+ ASSERT(exec->globalData().canUseJIT());
+#endif
CodeBlock* codeBlock = bytecodeForConstruct(exec, scopeChainNode);
m_jitCodeForConstruct = JIT::compile(scopeChainNode->globalData, codeBlock, &m_jitCodeForConstructWithArityCheck);
@@ -229,11 +241,11 @@ void FunctionExecutable::markAggregate(MarkStack& markStack)
m_codeBlockForConstruct->markAggregate(markStack);
}
-ExceptionInfo* FunctionExecutable::reparseExceptionInfo(JSGlobalData* globalData, ScopeChainNode* scopeChainNode, CodeBlock* codeBlock)
+PassOwnPtr<ExceptionInfo> FunctionExecutable::reparseExceptionInfo(JSGlobalData* globalData, ScopeChainNode* scopeChainNode, CodeBlock* codeBlock)
{
RefPtr<FunctionBodyNode> newFunctionBody = globalData->parser->parse<FunctionBodyNode>(globalData, 0, 0, m_source);
if (!newFunctionBody)
- return 0;
+ return PassOwnPtr<ExceptionInfo>();
if (m_forceUsesArguments)
newFunctionBody->setUsesArguments();
newFunctionBody->finishParsing(m_parameters, m_name);
@@ -241,18 +253,23 @@ ExceptionInfo* FunctionExecutable::reparseExceptionInfo(JSGlobalData* globalData
ScopeChain scopeChain(scopeChainNode);
JSGlobalObject* globalObject = scopeChain.globalObject();
- OwnPtr<CodeBlock> newCodeBlock(new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset(), codeBlock->m_isConstructor));
+ OwnPtr<CodeBlock> newCodeBlock(adoptPtr(new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset(), codeBlock->m_isConstructor)));
globalData->functionCodeBlockBeingReparsed = newCodeBlock.get();
- OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(newFunctionBody.get(), globalObject->debugger(), scopeChain, newCodeBlock->symbolTable(), newCodeBlock.get()));
+ OwnPtr<BytecodeGenerator> generator(adoptPtr(new BytecodeGenerator(newFunctionBody.get(), globalObject->debugger(), scopeChain, newCodeBlock->symbolTable(), newCodeBlock.get())));
generator->setRegeneratingForExceptionInfo(static_cast<FunctionCodeBlock*>(codeBlock));
generator->generate();
ASSERT(newCodeBlock->instructionCount() == codeBlock->instructionCount());
#if ENABLE(JIT)
- JITCode newJITCode = JIT::compile(globalData, newCodeBlock.get());
- ASSERT(codeBlock->m_isConstructor ? newJITCode.size() == generatedJITCodeForConstruct().size() : newJITCode.size() == generatedJITCodeForCall().size());
+#if ENABLE(INTERPRETER)
+ if (globalData->canUseJIT())
+#endif
+ {
+ JITCode newJITCode = JIT::compile(globalData, newCodeBlock.get());
+ ASSERT(codeBlock->m_isConstructor ? newJITCode.size() == generatedJITCodeForConstruct().size() : newJITCode.size() == generatedJITCodeForCall().size());
+ }
#endif
globalData->functionCodeBlockBeingReparsed = 0;
@@ -260,26 +277,31 @@ ExceptionInfo* FunctionExecutable::reparseExceptionInfo(JSGlobalData* globalData
return newCodeBlock->extractExceptionInfo();
}
-ExceptionInfo* EvalExecutable::reparseExceptionInfo(JSGlobalData* globalData, ScopeChainNode* scopeChainNode, CodeBlock* codeBlock)
+PassOwnPtr<ExceptionInfo> EvalExecutable::reparseExceptionInfo(JSGlobalData* globalData, ScopeChainNode* scopeChainNode, CodeBlock* codeBlock)
{
RefPtr<EvalNode> newEvalBody = globalData->parser->parse<EvalNode>(globalData, 0, 0, m_source);
if (!newEvalBody)
- return 0;
+ return PassOwnPtr<ExceptionInfo>();
ScopeChain scopeChain(scopeChainNode);
JSGlobalObject* globalObject = scopeChain.globalObject();
- OwnPtr<EvalCodeBlock> newCodeBlock(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth()));
+ OwnPtr<EvalCodeBlock> newCodeBlock(adoptPtr(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth())));
- OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(newEvalBody.get(), globalObject->debugger(), scopeChain, newCodeBlock->symbolTable(), newCodeBlock.get()));
+ OwnPtr<BytecodeGenerator> generator(adoptPtr(new BytecodeGenerator(newEvalBody.get(), globalObject->debugger(), scopeChain, newCodeBlock->symbolTable(), newCodeBlock.get())));
generator->setRegeneratingForExceptionInfo(static_cast<EvalCodeBlock*>(codeBlock));
generator->generate();
ASSERT(newCodeBlock->instructionCount() == codeBlock->instructionCount());
#if ENABLE(JIT)
- JITCode newJITCode = JIT::compile(globalData, newCodeBlock.get());
- ASSERT(newJITCode.size() == generatedJITCodeForCall().size());
+#if ENABLE(INTERPRETER)
+ if (globalData->canUseJIT())
+#endif
+ {
+ JITCode newJITCode = JIT::compile(globalData, newCodeBlock.get());
+ ASSERT(newJITCode.size() == generatedJITCodeForCall().size());
+ }
#endif
return newCodeBlock->extractExceptionInfo();
@@ -334,6 +356,10 @@ UString FunctionExecutable::paramString() const
return builder.build();
}
-};
-
+PassOwnPtr<ExceptionInfo> ProgramExecutable::reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*)
+{
+ // CodeBlocks for program code are transient and therefore do not gain from from throwing out their exception information.
+ return PassOwnPtr<ExceptionInfo>();
+}
+}
diff --git a/JavaScriptCore/runtime/Executable.h b/JavaScriptCore/runtime/Executable.h
index 3320fe1..516d6ce 100644
--- a/JavaScriptCore/runtime/Executable.h
+++ b/JavaScriptCore/runtime/Executable.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -31,6 +31,7 @@
#include "Interpreter.h"
#include "Nodes.h"
#include "SamplingTool.h"
+#include <wtf/PassOwnPtr.h>
namespace JSC {
@@ -171,7 +172,7 @@ namespace JSC {
bool usesArguments() const { return m_features & ArgumentsFeature; }
bool needsActivation() const { return m_features & (EvalFeature | ClosureFeature | WithFeature | CatchFeature); }
- virtual ExceptionInfo* reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*) = 0;
+ virtual PassOwnPtr<ExceptionInfo> reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*) = 0;
protected:
void recordParse(CodeFeatures features, int firstLine, int lastLine)
@@ -203,7 +204,6 @@ namespace JSC {
JSObject* compile(ExecState*, ScopeChainNode*);
- ExceptionInfo* reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*);
static PassRefPtr<EvalExecutable> create(ExecState* exec, const SourceCode& source) { return adoptRef(new EvalExecutable(exec, source)); }
private:
@@ -212,6 +212,9 @@ namespace JSC {
, m_evalCodeBlock(0)
{
}
+
+ virtual PassOwnPtr<ExceptionInfo> reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*);
+
EvalCodeBlock* m_evalCodeBlock;
#if ENABLE(JIT)
@@ -249,15 +252,15 @@ namespace JSC {
JSObject* checkSyntax(ExecState*);
JSObject* compile(ExecState*, ScopeChainNode*);
- // CodeBlocks for program code are transient and therefore do not gain from from throwing out there exception information.
- ExceptionInfo* reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*) { ASSERT_NOT_REACHED(); return 0; }
-
private:
ProgramExecutable(ExecState* exec, const SourceCode& source)
: ScriptExecutable(exec, source)
, m_programCodeBlock(0)
{
}
+
+ virtual PassOwnPtr<ExceptionInfo> reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*);
+
ProgramCodeBlock* m_programCodeBlock;
#if ENABLE(JIT)
@@ -350,7 +353,6 @@ namespace JSC {
SharedSymbolTable* symbolTable() const { return m_symbolTable; }
void recompile(ExecState*);
- ExceptionInfo* reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*);
void markAggregate(MarkStack& markStack);
static PassRefPtr<FunctionExecutable> fromGlobalCode(const Identifier&, ExecState*, Debugger*, const SourceCode&, int* errLine = 0, UString* errMsg = 0);
@@ -386,6 +388,8 @@ namespace JSC {
bool compileForCall(ExecState*, ScopeChainNode*);
bool compileForConstruct(ExecState*, ScopeChainNode*);
+ virtual PassOwnPtr<ExceptionInfo> reparseExceptionInfo(JSGlobalData*, ScopeChainNode*, CodeBlock*);
+
unsigned m_numVariables : 31;
bool m_forceUsesArguments : 1;
diff --git a/JavaScriptCore/runtime/JSArray.cpp b/JavaScriptCore/runtime/JSArray.cpp
index 78667cd..362f89b 100644
--- a/JavaScriptCore/runtime/JSArray.cpp
+++ b/JavaScriptCore/runtime/JSArray.cpp
@@ -847,7 +847,7 @@ void JSArray::sort(ExecState* exec, JSValue compareFunction, CallType callType,
tree.abstractor().m_nodes.resize(usedVectorLength + (m_storage->m_sparseValueMap ? m_storage->m_sparseValueMap->size() : 0));
if (callType == CallTypeJS)
- tree.abstractor().m_cachedCall.set(new CachedCall(exec, asFunction(compareFunction), 2, exec->exceptionSlot()));
+ tree.abstractor().m_cachedCall = adoptPtr(new CachedCall(exec, asFunction(compareFunction), 2, exec->exceptionSlot()));
if (!tree.abstractor().m_nodes.begin()) {
throwOutOfMemoryError(exec);
diff --git a/JavaScriptCore/runtime/JSFunction.cpp b/JavaScriptCore/runtime/JSFunction.cpp
index 7fcd037..49cc8fa 100644
--- a/JavaScriptCore/runtime/JSFunction.cpp
+++ b/JavaScriptCore/runtime/JSFunction.cpp
@@ -42,13 +42,14 @@ using namespace WTF;
using namespace Unicode;
namespace JSC {
-
+#if ENABLE(JIT)
EncodedJSValue JSC_HOST_CALL callHostFunctionAsConstructor(ExecState* exec)
{
CodeBlock* codeBlock = exec->callerFrame()->codeBlock();
unsigned vPCIndex = codeBlock->bytecodeOffset(exec, exec->returnPC());
return throwVMError(exec, createNotAConstructorError(exec, exec->callee(), vPCIndex, codeBlock));
}
+#endif
ASSERT_CLASS_FITS_IN_CELL(JSFunction);
diff --git a/JavaScriptCore/runtime/JSGlobalData.cpp b/JavaScriptCore/runtime/JSGlobalData.cpp
index 30a5ef9..1508750 100644
--- a/JavaScriptCore/runtime/JSGlobalData.cpp
+++ b/JavaScriptCore/runtime/JSGlobalData.cpp
@@ -58,6 +58,7 @@
#if PLATFORM(MAC)
#include "ProfilerServer.h"
+#include <CoreFoundation/CoreFoundation.h>
#endif
using namespace WTF;
@@ -156,6 +157,19 @@ JSGlobalData::JSGlobalData(GlobalDataType globalDataType, ThreadStackType thread
#if PLATFORM(MAC)
startProfilerServerIfNeeded();
#endif
+#if ENABLE(JIT) && ENABLE(INTERPRETER)
+#if PLATFORM(MAC)
+ CFStringRef canUseJITKey = CFStringCreateWithCString(0 , "JavaScriptCoreUseJIT", kCFStringEncodingMacRoman);
+ CFBooleanRef canUseJIT = (CFBooleanRef)CFPreferencesCopyAppValue(canUseJITKey, kCFPreferencesCurrentApplication);
+ m_canUseJIT = kCFBooleanTrue == canUseJIT;
+ CFRelease(canUseJIT);
+ CFRelease(canUseJITKey);
+#elif OS(UNIX)
+ m_canUseJIT = !getenv("JSC_FORCE_INTERPRETER");
+#else
+ m_canUseJIT = true;
+#endif
+#endif
}
JSGlobalData::~JSGlobalData()
@@ -228,7 +242,7 @@ JSGlobalData& JSGlobalData::sharedInstance()
{
JSGlobalData*& instance = sharedInstanceInternal();
if (!instance) {
- instance = new JSGlobalData(APIShared, ThreadStackTypeSmall);
+ instance = adoptRef(new JSGlobalData(APIShared, ThreadStackTypeSmall)).leakRef();
#if ENABLE(JSC_MULTIPLE_THREADS)
instance->makeUsableFromMultipleThreads();
#endif
diff --git a/JavaScriptCore/runtime/JSGlobalData.h b/JavaScriptCore/runtime/JSGlobalData.h
index f99c8d6..f3f6cba 100644
--- a/JavaScriptCore/runtime/JSGlobalData.h
+++ b/JavaScriptCore/runtime/JSGlobalData.h
@@ -167,6 +167,13 @@ namespace JSC {
ExecutableAllocator executableAllocator;
#endif
+#if ENABLE(JIT)
+#if ENABLE(INTERPRETER)
+ bool canUseJIT() { return m_canUseJIT; }
+#endif
+#else
+ bool canUseJIT() { return false; }
+#endif
Lexer* lexer;
Parser* parser;
Interpreter* interpreter;
@@ -233,6 +240,9 @@ namespace JSC {
JSGlobalData(GlobalDataType, ThreadStackType);
static JSGlobalData*& sharedInstanceInternal();
void createNativeThunk();
+#if ENABLE(JIT) && ENABLE(INTERPRETER)
+ bool m_canUseJIT;
+#endif
};
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp b/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
index f625323..d88d6a9 100644
--- a/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
+++ b/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
@@ -141,6 +141,7 @@ static JSValue decode(ExecState* exec, const char* doNotUnescape, bool strict)
bool isStrWhiteSpace(UChar c)
{
switch (c) {
+ // ECMA-262-5th 7.2 & 7.3
case 0x0009:
case 0x000A:
case 0x000B:
@@ -150,6 +151,7 @@ bool isStrWhiteSpace(UChar c)
case 0x00A0:
case 0x2028:
case 0x2029:
+ case 0xFEFF:
return true;
default:
return c > 0xff && isSeparatorSpace(c);
@@ -194,6 +196,28 @@ double parseIntOverflow(const char* s, int length, int radix)
return number;
}
+double parseIntOverflow(const UChar* s, int length, int radix)
+{
+ double number = 0.0;
+ double radixMultiplier = 1.0;
+
+ for (const UChar* p = s + length - 1; p >= s; p--) {
+ if (radixMultiplier == Inf) {
+ if (*p != '0') {
+ number = Inf;
+ break;
+ }
+ } else {
+ int digit = parseDigit(*p, radix);
+ number += digit * radixMultiplier;
+ }
+
+ radixMultiplier *= radix;
+ }
+
+ return number;
+}
+
static double parseInt(const UString& s, int radix)
{
int length = s.size();
diff --git a/JavaScriptCore/runtime/JSGlobalObjectFunctions.h b/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
index 91dfca8..e634fae 100644
--- a/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
+++ b/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
- * Copyright (C) 2003, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca)
* Copyright (C) 2007 Maks Orlovich
*
@@ -53,6 +53,7 @@ namespace JSC {
static const double mantissaOverflowLowerBound = 9007199254740992.0;
double parseIntOverflow(const char*, int length, int radix);
+ double parseIntOverflow(const UChar*, int length, int radix);
bool isStrWhiteSpace(UChar);
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSObject.h b/JavaScriptCore/runtime/JSObject.h
index edd376c..4201703 100644
--- a/JavaScriptCore/runtime/JSObject.h
+++ b/JavaScriptCore/runtime/JSObject.h
@@ -177,6 +177,7 @@ namespace JSC {
void putDirect(const Identifier& propertyName, JSValue value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot);
void putDirect(const Identifier& propertyName, JSValue value, unsigned attr = 0);
+ void putDirect(const Identifier& propertyName, JSValue value, PutPropertySlot&);
void putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr = 0);
void putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attr, bool checkReadOnly, PutPropertySlot& slot);
@@ -590,6 +591,11 @@ inline void JSObject::putDirect(const Identifier& propertyName, JSValue value, u
putDirectInternal(propertyName, value, attributes, false, slot, 0);
}
+inline void JSObject::putDirect(const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
+{
+ putDirectInternal(propertyName, value, 0, false, slot, 0);
+}
+
inline void JSObject::putDirectFunction(const Identifier& propertyName, JSCell* value, unsigned attributes, bool checkReadOnly, PutPropertySlot& slot)
{
putDirectInternal(propertyName, value, attributes, checkReadOnly, slot, value);
@@ -692,6 +698,12 @@ inline void JSValue::put(ExecState* exec, const Identifier& propertyName, JSValu
asCell()->put(exec, propertyName, value, slot);
}
+inline void JSValue::putDirect(ExecState*, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
+{
+ ASSERT(isCell() && isObject());
+ asObject(asCell())->putDirect(propertyName, value, slot);
+}
+
inline void JSValue::put(ExecState* exec, unsigned propertyName, JSValue value)
{
if (UNLIKELY(!isCell())) {
diff --git a/JavaScriptCore/runtime/JSValue.h b/JavaScriptCore/runtime/JSValue.h
index 9190f70..3c6bc09 100644
--- a/JavaScriptCore/runtime/JSValue.h
+++ b/JavaScriptCore/runtime/JSValue.h
@@ -181,6 +181,7 @@ namespace JSC {
JSValue get(ExecState*, unsigned propertyName) const;
JSValue get(ExecState*, unsigned propertyName, PropertySlot&) const;
void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
+ void putDirect(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
void put(ExecState*, unsigned propertyName, JSValue);
bool needsThisConversion() const;
diff --git a/JavaScriptCore/runtime/RegExpConstructor.cpp b/JavaScriptCore/runtime/RegExpConstructor.cpp
index 166a021..fa2a1e2 100644
--- a/JavaScriptCore/runtime/RegExpConstructor.cpp
+++ b/JavaScriptCore/runtime/RegExpConstructor.cpp
@@ -35,6 +35,7 @@
#include "RegExpPrototype.h"
#include "RegExp.h"
#include "RegExpCache.h"
+#include <wtf/PassOwnPtr.h>
namespace JSC {
@@ -95,7 +96,7 @@ const ClassInfo RegExpConstructor::info = { "Function", &InternalFunction::info,
RegExpConstructor::RegExpConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, RegExpPrototype* regExpPrototype)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, "RegExp"))
- , d(new RegExpConstructorPrivate)
+ , d(adoptPtr(new RegExpConstructorPrivate))
{
// ECMA 15.10.5.1 RegExp.prototype
putDirectWithoutTransition(exec->propertyNames().prototype, regExpPrototype, DontEnum | DontDelete | ReadOnly);
diff --git a/JavaScriptCore/runtime/RegExpObject.cpp b/JavaScriptCore/runtime/RegExpObject.cpp
index 4824944..0f2c1e1 100644
--- a/JavaScriptCore/runtime/RegExpObject.cpp
+++ b/JavaScriptCore/runtime/RegExpObject.cpp
@@ -29,6 +29,7 @@
#include "Lookup.h"
#include "RegExpConstructor.h"
#include "RegExpPrototype.h"
+#include <wtf/PassOwnPtr.h>
namespace JSC {
@@ -61,7 +62,7 @@ const ClassInfo RegExpObject::info = { "RegExp", 0, 0, ExecState::regExpTable };
RegExpObject::RegExpObject(JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, NonNullPassRefPtr<RegExp> regExp)
: JSObjectWithGlobalObject(globalObject, structure)
- , d(new RegExpObjectData(regExp, 0))
+ , d(adoptPtr(new RegExpObjectData(regExp, 0)))
{
}
diff --git a/JavaScriptCore/runtime/RegExpPrototype.cpp b/JavaScriptCore/runtime/RegExpPrototype.cpp
index 834412b..ac215ec 100644
--- a/JavaScriptCore/runtime/RegExpPrototype.cpp
+++ b/JavaScriptCore/runtime/RegExpPrototype.cpp
@@ -46,10 +46,8 @@ static EncodedJSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState*);
// ECMA 15.10.5
-const ClassInfo RegExpPrototype::info = { "RegExpPrototype", 0, 0, 0 };
-
RegExpPrototype::RegExpPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, Structure* prototypeFunctionStructure)
- : JSObject(structure)
+ : RegExpObject(globalObject, structure, RegExp::create(&exec->globalData(), "", ""))
{
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().compile, regExpProtoFuncCompile), DontEnum);
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().exec, regExpProtoFuncExec), DontEnum);
diff --git a/JavaScriptCore/runtime/RegExpPrototype.h b/JavaScriptCore/runtime/RegExpPrototype.h
index 77c1ea7..eb4ae00 100644
--- a/JavaScriptCore/runtime/RegExpPrototype.h
+++ b/JavaScriptCore/runtime/RegExpPrototype.h
@@ -21,16 +21,14 @@
#ifndef RegExpPrototype_h
#define RegExpPrototype_h
+#include "RegExpObject.h"
#include "JSObject.h"
namespace JSC {
- class RegExpPrototype : public JSObject {
+ class RegExpPrototype : public RegExpObject {
public:
RegExpPrototype(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, Structure* prototypeFunctionStructure);
-
- virtual const ClassInfo* classInfo() const { return &info; }
- static const ClassInfo info;
};
} // namespace JSC
diff --git a/JavaScriptCore/runtime/SmallStrings.cpp b/JavaScriptCore/runtime/SmallStrings.cpp
index 0f5df4a..822303c 100644
--- a/JavaScriptCore/runtime/SmallStrings.cpp
+++ b/JavaScriptCore/runtime/SmallStrings.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 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
@@ -28,10 +28,11 @@
#include "JSGlobalObject.h"
#include "JSString.h"
-
#include <wtf/Noncopyable.h>
+#include <wtf/PassOwnPtr.h>
namespace JSC {
+
static const unsigned numCharactersToStore = 0x100;
static inline bool isMarked(JSString* string)
@@ -126,7 +127,7 @@ void SmallStrings::createEmptyString(JSGlobalData* globalData)
void SmallStrings::createSingleCharacterString(JSGlobalData* globalData, unsigned char character)
{
if (!m_storage)
- m_storage.set(new SmallStringsStorage);
+ m_storage = adoptPtr(new SmallStringsStorage);
ASSERT(!m_singleCharacterStrings[character]);
m_singleCharacterStrings[character] = new (globalData) JSString(globalData, m_storage->rep(character), JSString::HasOtherOwner);
}
@@ -134,7 +135,7 @@ void SmallStrings::createSingleCharacterString(JSGlobalData* globalData, unsigne
UString::Rep* SmallStrings::singleCharacterStringRep(unsigned char character)
{
if (!m_storage)
- m_storage.set(new SmallStringsStorage);
+ m_storage = adoptPtr(new SmallStringsStorage);
return m_storage->rep(character);
}
diff --git a/JavaScriptCore/runtime/StringPrototype.cpp b/JavaScriptCore/runtime/StringPrototype.cpp
index 8b56d53..fb6e0f3 100644
--- a/JavaScriptCore/runtime/StringPrototype.cpp
+++ b/JavaScriptCore/runtime/StringPrototype.cpp
@@ -466,6 +466,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncToString(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
unsigned len = s.size();
JSValue a0 = exec->argument(0);
@@ -484,6 +486,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncCharCodeAt(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
unsigned len = s.size();
JSValue a0 = exec->argument(0);
@@ -508,13 +512,16 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncConcat(ExecState* exec)
? jsString(exec, asString(thisValue), asString(v))
: jsString(exec, asString(thisValue), v.toString(exec)));
}
-
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
return JSValue::encode(jsString(exec, thisValue));
}
EncodedJSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
int len = s.size();
@@ -544,6 +551,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
int len = s.size();
@@ -571,6 +580,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
JSValue a0 = exec->argument(0);
@@ -623,6 +634,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
JSValue a0 = exec->argument(0);
@@ -649,6 +662,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
int len = s.size();
@@ -674,6 +689,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
JSValue a0 = exec->argument(0);
@@ -738,6 +755,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
int len = s.size();
@@ -761,6 +780,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
UString s = thisValue.toThisString(exec);
int len = s.size();
@@ -793,6 +814,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
JSString* sVal = thisValue.toThisJSString(exec);
const UString& s = sVal->value(exec);
@@ -831,6 +854,8 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
JSString* sVal = thisValue.toThisJSString(exec);
const UString& s = sVal->value(exec);
@@ -868,10 +893,13 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState* exec)
EncodedJSValue JSC_HOST_CALL stringProtoFuncLocaleCompare(ExecState* exec)
{
- JSValue thisValue = exec->hostThisValue();
if (exec->argumentCount() < 1)
return JSValue::encode(jsNumber(exec, 0));
+ JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwVMTypeError(exec);
+
UString s = thisValue.toThisString(exec);
JSValue a0 = exec->argument(0);
return JSValue::encode(jsNumber(exec, localeCompare(s, a0.toString(exec))));
@@ -1045,6 +1073,8 @@ static inline bool isTrimWhitespace(UChar c)
static inline JSValue trimString(ExecState* exec, JSValue thisValue, int trimKind)
{
+ if (thisValue.isUndefinedOrNull()) // CheckObjectCoercible
+ return throwTypeError(exec);
UString str = thisValue.toThisString(exec);
unsigned left = 0;
if (trimKind & TrimLeft) {
diff --git a/JavaScriptCore/runtime/UString.cpp b/JavaScriptCore/runtime/UString.cpp
index 5a6a644..c442500 100644
--- a/JavaScriptCore/runtime/UString.cpp
+++ b/JavaScriptCore/runtime/UString.cpp
@@ -242,13 +242,33 @@ UChar UString::operator[](unsigned pos) const
return data()[pos];
}
+static inline bool isInfinity(double number)
+{
+ return number == Inf || number == -Inf;
+}
+
+static bool isInfinity(const UChar* data, const UChar* end)
+{
+ return data + 7 < end
+ && data[0] == 'I'
+ && data[1] == 'n'
+ && data[2] == 'f'
+ && data[3] == 'i'
+ && data[4] == 'n'
+ && data[5] == 'i'
+ && data[6] == 't'
+ && data[7] == 'y';
+}
+
double UString::toDouble(bool tolerateTrailingJunk, bool tolerateEmptyString) const
{
- if (size() == 1) {
+ unsigned size = this->size();
+
+ if (size == 1) {
UChar c = data()[0];
if (isASCIIDigit(c))
return c - '0';
- if (isASCIISpace(c) && tolerateEmptyString)
+ if (isStrWhiteSpace(c) && tolerateEmptyString)
return 0;
return NaN;
}
@@ -264,77 +284,90 @@ double UString::toDouble(bool tolerateTrailingJunk, bool tolerateEmptyString) co
// need to skip all StrWhiteSpace. The isStrWhiteSpace function does the
// right thing but requires UChar, not char, for its argument.
- CString s = UTF8String();
- if (s.isNull())
- return NaN;
- const char* c = s.data();
+ const UChar* data = this->data();
+ const UChar* end = data + size;
- // skip leading white space
- while (isASCIISpace(*c))
- c++;
+ // Skip leading white space.
+ for (; data < end; ++data) {
+ if (!isStrWhiteSpace(*data))
+ break;
+ }
- // empty string ?
- if (*c == '\0')
+ // Empty string.
+ if (data == end)
return tolerateEmptyString ? 0.0 : NaN;
- double d;
-
- // hex number ?
- if (*c == '0' && (*(c + 1) == 'x' || *(c + 1) == 'X')) {
- const char* firstDigitPosition = c + 2;
- c++;
- d = 0.0;
- while (*(++c)) {
- if (*c >= '0' && *c <= '9')
- d = d * 16.0 + *c - '0';
- else if ((*c >= 'A' && *c <= 'F') || (*c >= 'a' && *c <= 'f'))
- d = d * 16.0 + (*c & 0xdf) - 'A' + 10.0;
- else
+ double number;
+
+ if (data[0] == '0' && data + 2 < end && (data[1] | 0x20) == 'x' && isASCIIHexDigit(data[2])) {
+ // Hex number.
+ data += 2;
+ const UChar* firstDigitPosition = data;
+ number = 0;
+ while (true) {
+ number = number * 16 + toASCIIHexValue(*data);
+ ++data;
+ if (data == end)
+ break;
+ if (!isASCIIHexDigit(*data))
break;
}
-
- if (d >= mantissaOverflowLowerBound)
- d = parseIntOverflow(firstDigitPosition, c - firstDigitPosition, 16);
+ if (number >= mantissaOverflowLowerBound)
+ number = parseIntOverflow(firstDigitPosition, data - firstDigitPosition, 16);
} else {
- // regular number ?
- char* end;
- d = WTF::strtod(c, &end);
- if ((d != 0.0 || end != c) && d != Inf && d != -Inf) {
- c = end;
- } else {
- double sign = 1.0;
-
- if (*c == '+')
- c++;
- else if (*c == '-') {
- sign = -1.0;
- c++;
- }
+ // Decimal number.
+
+ // Put into a null-terminated byte buffer.
+ Vector<char, 32> byteBuffer;
+ for (const UChar* characters = data; characters < end; ++characters) {
+ UChar character = *characters;
+ byteBuffer.append(isASCII(character) ? character : 0);
+ }
+ byteBuffer.append(0);
+ char* byteBufferEnd;
+ number = WTF::strtod(byteBuffer.data(), &byteBufferEnd);
+ const UChar* pastNumber = data + (byteBufferEnd - byteBuffer.data());
+
+ if ((number || pastNumber != data) && !isInfinity(number))
+ data = pastNumber;
+ else {
// We used strtod() to do the conversion. However, strtod() handles
// infinite values slightly differently than JavaScript in that it
// converts the string "inf" with any capitalization to infinity,
// whereas the ECMA spec requires that it be converted to NaN.
- if (c[0] == 'I' && c[1] == 'n' && c[2] == 'f' && c[3] == 'i' && c[4] == 'n' && c[5] == 'i' && c[6] == 't' && c[7] == 'y') {
- d = sign * Inf;
- c += 8;
- } else if ((d == Inf || d == -Inf) && *c != 'I' && *c != 'i')
- c = end;
+ double signedInfinity = Inf;
+ if (data < end) {
+ if (*data == '+')
+ data++;
+ else if (*data == '-') {
+ signedInfinity = -Inf;
+ data++;
+ }
+ }
+ if (isInfinity(data, end)) {
+ number = signedInfinity;
+ data += 8;
+ } else if (isInfinity(number) && data < end && (*data | 0x20) != 'i')
+ data = pastNumber;
else
return NaN;
}
}
+ // Look for trailing junk.
if (!tolerateTrailingJunk) {
- // allow trailing white space
- while (isASCIISpace(*c))
- c++;
- if (c != s.data() + s.length())
- d = NaN;
+ // Allow trailing white space.
+ for (; data < end; ++data) {
+ if (!isStrWhiteSpace(*data))
+ break;
+ }
+ if (data != end)
+ return NaN;
}
- return d;
+ return number;
}
double UString::toDouble(bool tolerateTrailingJunk) const
diff --git a/JavaScriptCore/wtf/CrossThreadRefCounted.h b/JavaScriptCore/wtf/CrossThreadRefCounted.h
index f682f0d..0c0e997 100644
--- a/JavaScriptCore/wtf/CrossThreadRefCounted.h
+++ b/JavaScriptCore/wtf/CrossThreadRefCounted.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * 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
@@ -31,10 +32,9 @@
#ifndef CrossThreadRefCounted_h
#define CrossThreadRefCounted_h
-#include <wtf/Noncopyable.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
-#include <wtf/Threading.h>
+#include "PassRefPtr.h"
+#include "RefCounted.h"
+#include "Threading.h"
namespace WTF {
@@ -78,6 +78,9 @@ namespace WTF {
, m_threadId(0)
#endif
{
+ // We use RefCountedBase in an unusual way here, so get rid of the requirement
+ // that adoptRef be called on it.
+ m_refCounter.relaxAdoptionRequirement();
}
~CrossThreadRefCounted()
diff --git a/JavaScriptCore/wtf/MessageQueue.h b/JavaScriptCore/wtf/MessageQueue.h
index 13ce1e8..14100c9 100644
--- a/JavaScriptCore/wtf/MessageQueue.h
+++ b/JavaScriptCore/wtf/MessageQueue.h
@@ -92,7 +92,7 @@ namespace WTF {
inline void MessageQueue<DataType>::append(PassOwnPtr<DataType> message)
{
MutexLocker lock(m_mutex);
- m_queue.append(message.release());
+ m_queue.append(message.leakPtr());
m_condition.signal();
}
@@ -102,7 +102,7 @@ namespace WTF {
{
MutexLocker lock(m_mutex);
bool wasEmpty = m_queue.isEmpty();
- m_queue.append(message.release());
+ m_queue.append(message.leakPtr());
m_condition.signal();
return wasEmpty;
}
@@ -111,7 +111,7 @@ namespace WTF {
inline void MessageQueue<DataType>::prepend(PassOwnPtr<DataType> message)
{
MutexLocker lock(m_mutex);
- m_queue.prepend(message.release());
+ m_queue.prepend(message.leakPtr());
m_condition.signal();
}
diff --git a/JavaScriptCore/wtf/OwnArrayPtr.h b/JavaScriptCore/wtf/OwnArrayPtr.h
index b06e640..d40ea17 100644
--- a/JavaScriptCore/wtf/OwnArrayPtr.h
+++ b/JavaScriptCore/wtf/OwnArrayPtr.h
@@ -30,20 +30,21 @@ namespace WTF {
template <typename T> class OwnArrayPtr : public Noncopyable {
public:
explicit OwnArrayPtr(T* ptr = 0) : m_ptr(ptr) { }
- ~OwnArrayPtr() { safeDelete(); }
+ ~OwnArrayPtr() { safeDelete(m_ptr); }
T* get() const { return m_ptr; }
T* release() { T* ptr = m_ptr; m_ptr = 0; return ptr; }
- // FIXME: This should be renamed to adopt.
+ // FIXME: This should be removed and replaced with PassOwnArrayPtr.
void set(T* ptr)
{
ASSERT(!ptr || m_ptr != ptr);
- safeDelete();
+ T* oldPtr = m_ptr;
m_ptr = ptr;
+ safeDelete(oldPtr);
}
- void clear() { safeDelete(); m_ptr = 0; }
+ void clear();
T& operator*() const { ASSERT(m_ptr); return *m_ptr; }
T* operator->() const { ASSERT(m_ptr); return m_ptr; }
@@ -63,11 +64,25 @@ namespace WTF {
void swap(OwnArrayPtr& o) { std::swap(m_ptr, o.m_ptr); }
private:
- void safeDelete() { typedef char known[sizeof(T) ? 1 : -1]; if (sizeof(known)) delete [] m_ptr; }
+ static void safeDelete(T*);
T* m_ptr;
};
+ template<typename T> inline void OwnArrayPtr<T>::clear()
+ {
+ T* ptr = m_ptr;
+ m_ptr = 0;
+ safeDelete(ptr);
+ }
+
+ template<typename T> inline void OwnArrayPtr<T>::safeDelete(T* ptr)
+ {
+ typedef char known[sizeof(T) ? 1 : -1];
+ if (sizeof(known))
+ delete [] ptr;
+ }
+
template <typename T> inline void swap(OwnArrayPtr<T>& a, OwnArrayPtr<T>& b) { a.swap(b); }
template <typename T> inline T* getPtr(const OwnArrayPtr<T>& p)
diff --git a/JavaScriptCore/wtf/OwnPtr.h b/JavaScriptCore/wtf/OwnPtr.h
index af1684b..cadfad2 100644
--- a/JavaScriptCore/wtf/OwnPtr.h
+++ b/JavaScriptCore/wtf/OwnPtr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010 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
@@ -28,36 +28,39 @@
#include <algorithm>
#include <memory>
+// Remove this once we make all WebKit code compatible with stricter rules about OwnPtr.
+#define LOOSE_OWN_PTR
+
namespace WTF {
// Unlike most of our smart pointers, OwnPtr can take either the pointer type or the pointed-to type.
- template <typename T> class PassOwnPtr;
+ template<typename T> class PassOwnPtr;
+ template<typename T> PassOwnPtr<T> adoptPtr(T*);
- template <typename T> class OwnPtr : public Noncopyable {
+ template<typename T> class OwnPtr : public Noncopyable {
public:
typedef typename RemovePointer<T>::Type ValueType;
typedef ValueType* PtrType;
- explicit OwnPtr(PtrType ptr = 0) : m_ptr(ptr) { }
+ OwnPtr() : m_ptr(0) { }
+
// See comment in PassOwnPtr.h for why this takes a const reference.
- template <typename U> OwnPtr(const PassOwnPtr<U>& o);
+ template<typename U> OwnPtr(const PassOwnPtr<U>& o);
// This copy constructor is used implicitly by gcc when it generates
// transients for assigning a PassOwnPtr<T> object to a stack-allocated
- // OwnPtr<T> object. It should never be called explicitly and gcc
+ // OwnPtr<T> object. It should never be called explicitly and gcc
// should optimize away the constructor when generating code.
- OwnPtr(const OwnPtr<ValueType>& o);
+ OwnPtr(const OwnPtr<ValueType>&);
~OwnPtr() { deleteOwnedPtr(m_ptr); }
PtrType get() const { return m_ptr; }
- PtrType release() { PtrType ptr = m_ptr; m_ptr = 0; return ptr; }
-
- // FIXME: This should be renamed to adopt.
- void set(PtrType ptr) { ASSERT(!ptr || m_ptr != ptr); deleteOwnedPtr(m_ptr); m_ptr = ptr; }
- void clear() { deleteOwnedPtr(m_ptr); m_ptr = 0; }
+ void clear();
+ PassOwnPtr<T> release();
+ PtrType leakPtr() WARN_UNUSED_RETURN;
ValueType& operator*() const { ASSERT(m_ptr); return *m_ptr; }
PtrType operator->() const { ASSERT(m_ptr); return m_ptr; }
@@ -69,65 +72,99 @@ namespace WTF {
operator UnspecifiedBoolType() const { return m_ptr ? &OwnPtr::m_ptr : 0; }
OwnPtr& operator=(const PassOwnPtr<T>&);
- template <typename U> OwnPtr& operator=(const PassOwnPtr<U>&);
+ template<typename U> OwnPtr& operator=(const PassOwnPtr<U>&);
void swap(OwnPtr& o) { std::swap(m_ptr, o.m_ptr); }
+#ifdef LOOSE_OWN_PTR
+ explicit OwnPtr(PtrType ptr) : m_ptr(ptr) { }
+ void set(PtrType);
+#endif
+
private:
PtrType m_ptr;
};
- template <typename T> template <typename U> inline OwnPtr<T>::OwnPtr(const PassOwnPtr<U>& o)
- : m_ptr(o.release())
+ template<typename T> template<typename U> inline OwnPtr<T>::OwnPtr(const PassOwnPtr<U>& o)
+ : m_ptr(o.leakPtr())
{
}
- template <typename T> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<T>& o)
+ template<typename T> inline void OwnPtr<T>::clear()
+ {
+ PtrType ptr = m_ptr;
+ m_ptr = 0;
+ deleteOwnedPtr(ptr);
+ }
+
+ template<typename T> inline PassOwnPtr<T> OwnPtr<T>::release()
+ {
+ PtrType ptr = m_ptr;
+ m_ptr = 0;
+ return adoptPtr(ptr);
+ }
+
+ template<typename T> inline typename OwnPtr<T>::PtrType OwnPtr<T>::leakPtr()
+ {
+ PtrType ptr = m_ptr;
+ m_ptr = 0;
+ return ptr;
+ }
+
+#ifdef LOOSE_OWN_PTR
+ template<typename T> inline void OwnPtr<T>::set(PtrType ptr)
+ {
+ ASSERT(!ptr || m_ptr != ptr);
+ PtrType oldPtr = m_ptr;
+ m_ptr = ptr;
+ deleteOwnedPtr(oldPtr);
+ }
+#endif
+
+ template<typename T> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<T>& o)
{
- T* ptr = m_ptr;
- m_ptr = o.release();
+ PtrType ptr = m_ptr;
+ m_ptr = o.leakPtr();
ASSERT(!ptr || m_ptr != ptr);
- if (ptr)
- deleteOwnedPtr(ptr);
+ deleteOwnedPtr(ptr);
return *this;
}
- template <typename T> template <typename U> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<U>& o)
+ template<typename T> template<typename U> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<U>& o)
{
- T* ptr = m_ptr;
- m_ptr = o.release();
+ PtrType ptr = m_ptr;
+ m_ptr = o.leakPtr();
ASSERT(!ptr || m_ptr != ptr);
- if (ptr)
- deleteOwnedPtr(ptr);
+ deleteOwnedPtr(ptr);
return *this;
}
- template <typename T> inline void swap(OwnPtr<T>& a, OwnPtr<T>& b)
+ template<typename T> inline void swap(OwnPtr<T>& a, OwnPtr<T>& b)
{
a.swap(b);
}
- template <typename T, typename U> inline bool operator==(const OwnPtr<T>& a, U* b)
+ template<typename T, typename U> inline bool operator==(const OwnPtr<T>& a, U* b)
{
return a.get() == b;
}
- template <typename T, typename U> inline bool operator==(T* a, const OwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator==(T* a, const OwnPtr<U>& b)
{
return a == b.get();
}
- template <typename T, typename U> inline bool operator!=(const OwnPtr<T>& a, U* b)
+ template<typename T, typename U> inline bool operator!=(const OwnPtr<T>& a, U* b)
{
return a.get() != b;
}
- template <typename T, typename U> inline bool operator!=(T* a, const OwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator!=(T* a, const OwnPtr<U>& b)
{
return a != b.get();
}
- template <typename T> inline typename OwnPtr<T>::PtrType getPtr(const OwnPtr<T>& p)
+ template<typename T> inline typename OwnPtr<T>::PtrType getPtr(const OwnPtr<T>& p)
{
return p.get();
}
diff --git a/JavaScriptCore/wtf/PassOwnPtr.h b/JavaScriptCore/wtf/PassOwnPtr.h
index ae70457..a223fa9 100644
--- a/JavaScriptCore/wtf/PassOwnPtr.h
+++ b/JavaScriptCore/wtf/PassOwnPtr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -30,31 +30,36 @@
#include "OwnPtrCommon.h"
#include "TypeTraits.h"
+// Remove this once we make all WebKit code compatible with stricter rules about PassOwnPtr.
+#define LOOSE_PASS_OWN_PTR
+
namespace WTF {
// Unlike most of our smart pointers, PassOwnPtr can take either the pointer type or the pointed-to type.
- template <typename T> class OwnPtr;
+ template<typename T> class OwnPtr;
+ template<typename T> class PassOwnPtr;
+ template<typename T> PassOwnPtr<T> adoptPtr(T*);
- template <typename T> class PassOwnPtr {
+ template<typename T> class PassOwnPtr {
public:
typedef typename RemovePointer<T>::Type ValueType;
typedef ValueType* PtrType;
- PassOwnPtr(PtrType ptr = 0) : m_ptr(ptr) { }
+ PassOwnPtr() : m_ptr(0) { }
+
// It somewhat breaks the type system to allow transfer of ownership out of
// a const PassOwnPtr. However, it makes it much easier to work with PassOwnPtr
- // temporaries, and we don't really have a need to use real const PassOwnPtrs
- // anyway.
- PassOwnPtr(const PassOwnPtr& o) : m_ptr(o.release()) { }
- template <typename U> PassOwnPtr(const PassOwnPtr<U>& o) : m_ptr(o.release()) { }
+ // temporaries, and we don't have a need to use real const PassOwnPtrs anyway.
+ PassOwnPtr(const PassOwnPtr& o) : m_ptr(o.leakPtr()) { }
+ template<typename U> PassOwnPtr(const PassOwnPtr<U>& o) : m_ptr(o.leakPtr()) { }
~PassOwnPtr() { deleteOwnedPtr(m_ptr); }
PtrType get() const { return m_ptr; }
- void clear() { m_ptr = 0; }
- PtrType release() const { PtrType ptr = m_ptr; m_ptr = 0; return ptr; }
+ void clear();
+ PtrType leakPtr() const WARN_UNUSED_RETURN;
ValueType& operator*() const { ASSERT(m_ptr); return *m_ptr; }
PtrType operator->() const { ASSERT(m_ptr); return m_ptr; }
@@ -65,105 +70,136 @@ namespace WTF {
typedef PtrType PassOwnPtr::*UnspecifiedBoolType;
operator UnspecifiedBoolType() const { return m_ptr ? &PassOwnPtr::m_ptr : 0; }
- PassOwnPtr& operator=(T*);
PassOwnPtr& operator=(const PassOwnPtr<T>&);
- template <typename U> PassOwnPtr& operator=(const PassOwnPtr<U>&);
+ template<typename U> PassOwnPtr& operator=(const PassOwnPtr<U>&);
+
+ template<typename U> friend PassOwnPtr<U> adoptPtr(U*);
+
+#ifdef LOOSE_PASS_OWN_PTR
+ PassOwnPtr(PtrType ptr) : m_ptr(ptr) { }
+ PassOwnPtr& operator=(PtrType);
+#endif
private:
+#ifndef LOOSE_PASS_OWN_PTR
+ explicit PassOwnPtr(PtrType ptr) : m_ptr(ptr) { }
+#endif
+
mutable PtrType m_ptr;
};
- template <typename T> inline PassOwnPtr<T>& PassOwnPtr<T>::operator=(T* optr)
+ template<typename T> inline void PassOwnPtr<T>::clear()
+ {
+ PtrType ptr = m_ptr;
+ m_ptr = 0;
+ deleteOwnedPtr(ptr);
+ }
+
+ template<typename T> inline typename PassOwnPtr<T>::PtrType PassOwnPtr<T>::leakPtr() const
+ {
+ PtrType ptr = m_ptr;
+ m_ptr = 0;
+ return ptr;
+ }
+
+#ifdef LOOSE_PASS_OWN_PTR
+ template<typename T> inline PassOwnPtr<T>& PassOwnPtr<T>::operator=(PtrType optr)
{
- T* ptr = m_ptr;
+ PtrType ptr = m_ptr;
m_ptr = optr;
ASSERT(!ptr || m_ptr != ptr);
if (ptr)
deleteOwnedPtr(ptr);
return *this;
}
+#endif
- template <typename T> inline PassOwnPtr<T>& PassOwnPtr<T>::operator=(const PassOwnPtr<T>& optr)
+ template<typename T> inline PassOwnPtr<T>& PassOwnPtr<T>::operator=(const PassOwnPtr<T>& optr)
{
- T* ptr = m_ptr;
- m_ptr = optr.release();
+ PtrType ptr = m_ptr;
+ m_ptr = optr.leakPtr();
ASSERT(!ptr || m_ptr != ptr);
if (ptr)
deleteOwnedPtr(ptr);
return *this;
}
- template <typename T> template <typename U> inline PassOwnPtr<T>& PassOwnPtr<T>::operator=(const PassOwnPtr<U>& optr)
+ template<typename T> template<typename U> inline PassOwnPtr<T>& PassOwnPtr<T>::operator=(const PassOwnPtr<U>& optr)
{
- T* ptr = m_ptr;
- m_ptr = optr.release();
+ PtrType ptr = m_ptr;
+ m_ptr = optr.leakPtr();
ASSERT(!ptr || m_ptr != ptr);
if (ptr)
deleteOwnedPtr(ptr);
return *this;
}
- template <typename T, typename U> inline bool operator==(const PassOwnPtr<T>& a, const PassOwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator==(const PassOwnPtr<T>& a, const PassOwnPtr<U>& b)
{
return a.get() == b.get();
}
- template <typename T, typename U> inline bool operator==(const PassOwnPtr<T>& a, const OwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator==(const PassOwnPtr<T>& a, const OwnPtr<U>& b)
{
return a.get() == b.get();
}
- template <typename T, typename U> inline bool operator==(const OwnPtr<T>& a, const PassOwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator==(const OwnPtr<T>& a, const PassOwnPtr<U>& b)
{
return a.get() == b.get();
}
- template <typename T, typename U> inline bool operator==(const PassOwnPtr<T>& a, U* b)
+ template<typename T, typename U> inline bool operator==(const PassOwnPtr<T>& a, U* b)
{
return a.get() == b;
}
- template <typename T, typename U> inline bool operator==(T* a, const PassOwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator==(T* a, const PassOwnPtr<U>& b)
{
return a == b.get();
}
- template <typename T, typename U> inline bool operator!=(const PassOwnPtr<T>& a, const PassOwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator!=(const PassOwnPtr<T>& a, const PassOwnPtr<U>& b)
{
return a.get() != b.get();
}
- template <typename T, typename U> inline bool operator!=(const PassOwnPtr<T>& a, const OwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator!=(const PassOwnPtr<T>& a, const OwnPtr<U>& b)
{
return a.get() != b.get();
}
- template <typename T, typename U> inline bool operator!=(const OwnPtr<T>& a, const PassOwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator!=(const OwnPtr<T>& a, const PassOwnPtr<U>& b)
{
return a.get() != b.get();
}
- template <typename T, typename U> inline bool operator!=(const PassOwnPtr<T>& a, U* b)
+ template<typename T, typename U> inline bool operator!=(const PassOwnPtr<T>& a, U* b)
{
return a.get() != b;
}
- template <typename T, typename U> inline bool operator!=(T* a, const PassOwnPtr<U>& b)
+ template<typename T, typename U> inline bool operator!=(T* a, const PassOwnPtr<U>& b)
{
return a != b.get();
}
- template <typename T, typename U> inline PassOwnPtr<T> static_pointer_cast(const PassOwnPtr<U>& p)
+ template<typename T> inline PassOwnPtr<T> adoptPtr(T* ptr)
+ {
+ return PassOwnPtr<T>(ptr);
+ }
+
+ template<typename T, typename U> inline PassOwnPtr<T> static_pointer_cast(const PassOwnPtr<U>& p)
{
- return PassOwnPtr<T>(static_cast<T*>(p.release()));
+ return adoptPtr(static_cast<T*>(p.leakPtr()));
}
- template <typename T, typename U> inline PassOwnPtr<T> const_pointer_cast(const PassOwnPtr<U>& p)
+ template<typename T, typename U> inline PassOwnPtr<T> const_pointer_cast(const PassOwnPtr<U>& p)
{
- return PassOwnPtr<T>(const_cast<T*>(p.release()));
+ return adoptPtr(const_cast<T*>(p.leakPtr()));
}
- template <typename T> inline T* getPtr(const PassOwnPtr<T>& p)
+ template<typename T> inline T* getPtr(const PassOwnPtr<T>& p)
{
return p.get();
}
@@ -171,6 +207,7 @@ namespace WTF {
} // namespace WTF
using WTF::PassOwnPtr;
+using WTF::adoptPtr;
using WTF::const_pointer_cast;
using WTF::static_pointer_cast;
diff --git a/JavaScriptCore/wtf/PassRefPtr.h b/JavaScriptCore/wtf/PassRefPtr.h
index 7c5d868..230637a 100644
--- a/JavaScriptCore/wtf/PassRefPtr.h
+++ b/JavaScriptCore/wtf/PassRefPtr.h
@@ -76,8 +76,8 @@ namespace WTF {
T* get() const { return m_ptr; }
- void clear() { T* ptr = m_ptr; derefIfNotNull(ptr); m_ptr = 0; }
- T* leakRef() const;
+ void clear();
+ T* leakRef() const WARN_UNUSED_RETURN;
T& operator*() const { return *m_ptr; }
T* operator->() const { return m_ptr; }
@@ -96,7 +96,7 @@ namespace WTF {
friend PassRefPtr adoptRef<T>(T*);
// FIXME: Remove releaseRef once we change all callers to call leakRef instead.
- T* releaseRef() const { return leakRef(); }
+ T* releaseRef() const { return leakRef(); } WARN_UNUSED_RETURN;
private:
// adopting constructor
@@ -151,12 +151,15 @@ namespace WTF {
T* get() const { return m_ptr; }
- void clear() { derefIfNotNull(m_ptr); m_ptr = 0; }
- T* releaseRef() const { T* tmp = m_ptr; m_ptr = 0; return tmp; }
+ void clear();
+ T* leakRef() const { T* tmp = m_ptr; m_ptr = 0; return tmp; } WARN_UNUSED_RETURN;
T& operator*() const { return *m_ptr; }
T* operator->() const { return m_ptr; }
+ // FIXME: Remove releaseRef once we change all callers to call leakRef instead.
+ T* releaseRef() const { return leakRef(); } WARN_UNUSED_RETURN;
+
private:
mutable T* m_ptr;
};
@@ -168,6 +171,13 @@ namespace WTF {
refIfNotNull(ptr);
}
+ template<typename T> inline void PassRefPtr<T>::clear()
+ {
+ T* ptr = m_ptr;
+ m_ptr = 0;
+ derefIfNotNull(ptr);
+ }
+
template<typename T> inline T* PassRefPtr<T>::leakRef() const
{
T* ptr = m_ptr;
@@ -281,6 +291,13 @@ namespace WTF {
return p.get();
}
+ template<typename T> inline void NonNullPassRefPtr<T>::clear()
+ {
+ T* ptr = m_ptr;
+ m_ptr = 0;
+ derefIfNotNull(ptr);
+ }
+
} // namespace WTF
using WTF::PassRefPtr;
diff --git a/JavaScriptCore/wtf/Platform.h b/JavaScriptCore/wtf/Platform.h
index feb3a4d..2500c56 100644
--- a/JavaScriptCore/wtf/Platform.h
+++ b/JavaScriptCore/wtf/Platform.h
@@ -921,7 +921,7 @@
|| CPU(ALPHA) \
|| CPU(SPARC64)
#define WTF_USE_JSVALUE64 1
-#elif CPU(ARM) || CPU(PPC64) || CPU(MIPS)
+#elif CPU(ARM_TRADITIONAL) || CPU(PPC64) || CPU(MIPS)
#define WTF_USE_JSVALUE32 1
#elif OS(WINDOWS) && COMPILER(MINGW)
/* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
@@ -984,6 +984,14 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#endif /* !defined(ENABLE_JIT) */
+#if !ENABLE(JIT)
+#define ENABLE_INTERPRETER 1
+#endif
+
+#if !(ENABLE(JIT) || ENABLE(INTERPRETER))
+#error You have to have at least one execution model enabled to build JSC
+#endif
+
/* CPU architecture specific optimizations */
#if CPU(ARM_TRADITIONAL)
#if ENABLE(JIT) && !defined(ENABLE_JIT_OPTIMIZE_MOD) && WTF_ARM_ARCH_AT_LEAST(5)
@@ -1024,10 +1032,14 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#define JSC_HOST_CALL
#endif
-#if COMPILER(GCC) && !ENABLE(JIT)
+#if COMPILER(GCC)
#define HAVE_COMPUTED_GOTO 1
#endif
+#if HAVE(COMPUTED_GOTO) && ENABLE(INTERPRETER)
+#define ENABLE_COMPUTED_GOTO_INTERPRETER 1
+#endif
+
/* Yet Another Regex Runtime. */
#if !defined(ENABLE_YARR_JIT)
@@ -1055,6 +1067,16 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0
#endif
+/* Pick which allocator to use; we only need an executable allocator if the assembler is compiled in.
+ On x86-64 we use a single fixed mmap, on other platforms we mmap on demand. */
+#if ENABLE(ASSEMBLER)
+#if CPU(X86_64)
+#define ENABLE_EXECUTABLE_ALLOCATOR_FIXED 1
+#else
+#define ENABLE_EXECUTABLE_ALLOCATOR_DEMAND 1
+#endif
+#endif
+
#if !defined(ENABLE_PAN_SCROLLING) && OS(WINDOWS)
#define ENABLE_PAN_SCROLLING 1
#endif
diff --git a/JavaScriptCore/wtf/RefCounted.h b/JavaScriptCore/wtf/RefCounted.h
index 5aedac3..d85c47e 100644
--- a/JavaScriptCore/wtf/RefCounted.h
+++ b/JavaScriptCore/wtf/RefCounted.h
@@ -21,11 +21,8 @@
#ifndef RefCounted_h
#define RefCounted_h
-#include <wtf/Assertions.h>
-#include <wtf/Noncopyable.h>
-
-// Remove this once we make all WebKit code compatible with stricter rules about RefCounted.
-#define LOOSE_REF_COUNTED
+#include "Assertions.h"
+#include "Noncopyable.h"
namespace WTF {
@@ -37,9 +34,7 @@ public:
void ref()
{
ASSERT(!m_deletionHasBegun);
-#ifndef LOOSE_REF_COUNTED
ASSERT(!m_adoptionIsRequired);
-#endif
++m_refCount;
}
@@ -54,6 +49,15 @@ public:
return m_refCount;
}
+ void relaxAdoptionRequirement()
+ {
+#ifndef NDEBUG
+ ASSERT(!m_deletionHasBegun);
+ ASSERT(m_adoptionIsRequired);
+ m_adoptionIsRequired = false;
+#endif
+ }
+
protected:
RefCountedBase()
: m_refCount(1)
@@ -66,19 +70,15 @@ protected:
~RefCountedBase()
{
-#ifndef LOOSE_REF_COUNTED
ASSERT(m_deletionHasBegun);
ASSERT(!m_adoptionIsRequired);
-#endif
}
// Returns whether the pointer should be freed or not.
bool derefBase()
{
ASSERT(!m_deletionHasBegun);
-#ifndef LOOSE_REF_COUNTED
ASSERT(!m_adoptionIsRequired);
-#endif
ASSERT(m_refCount > 0);
if (m_refCount == 1) {
diff --git a/JavaScriptCore/wtf/RefPtr.h b/JavaScriptCore/wtf/RefPtr.h
index 86e4323..f0c3091 100644
--- a/JavaScriptCore/wtf/RefPtr.h
+++ b/JavaScriptCore/wtf/RefPtr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 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
@@ -59,7 +59,7 @@ namespace WTF {
T* get() const { return m_ptr; }
- void clear() { derefIfNotNull(m_ptr); m_ptr = 0; }
+ void clear();
PassRefPtr<T> release() { PassRefPtr<T> tmp = adoptRef(m_ptr); m_ptr = 0; return tmp; }
T& operator*() const { return *m_ptr; }
@@ -97,6 +97,13 @@ namespace WTF {
{
}
+ template <typename T> inline void RefPtr<T>::clear()
+ {
+ T* ptr = m_ptr;
+ m_ptr = 0;
+ derefIfNotNull(ptr);
+ }
+
template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<T>& o)
{
T* optr = o.get();
diff --git a/JavaScriptCore/wtf/RetainPtr.h b/JavaScriptCore/wtf/RetainPtr.h
index f5a027e..2768be7 100644
--- a/JavaScriptCore/wtf/RetainPtr.h
+++ b/JavaScriptCore/wtf/RetainPtr.h
@@ -71,7 +71,7 @@ namespace WTF {
PtrType get() const { return m_ptr; }
- PtrType releaseRef() { PtrType tmp = m_ptr; m_ptr = 0; return tmp; }
+ PtrType releaseRef() { PtrType tmp = m_ptr; m_ptr = 0; return tmp; } WARN_UNUSED_RETURN;
PtrType operator->() const { return m_ptr; }
diff --git a/JavaScriptCore/wtf/SizeLimits.cpp b/JavaScriptCore/wtf/SizeLimits.cpp
index 090c1ed..4e481bb 100644
--- a/JavaScriptCore/wtf/SizeLimits.cpp
+++ b/JavaScriptCore/wtf/SizeLimits.cpp
@@ -41,7 +41,8 @@
namespace WTF {
#ifndef NDEBUG
-static const size_t refCountedExtraDebugSize = sizeof(int);
+struct StructWithIntAndTwoBools { int a; bool b; bool c; };
+static const size_t refCountedExtraDebugSize = sizeof(StructWithIntAndTwoBools) - sizeof(int);
#else
static const size_t refCountedExtraDebugSize = 0;
#endif
diff --git a/JavaScriptCore/wtf/StringExtras.h b/JavaScriptCore/wtf/StringExtras.h
index 342261b..473bb22 100644
--- a/JavaScriptCore/wtf/StringExtras.h
+++ b/JavaScriptCore/wtf/StringExtras.h
@@ -65,8 +65,8 @@ inline double wtf_vsnprintf(char* buffer, size_t count, const char* format, va_l
return result;
}
-// Work around a bug in Microsoft's implementation of vsnprintf, where
-// vsnprintf does not null terminate the buffer
+// Work around a difference in Microsoft's implementation of vsnprintf, where
+// vsnprintf does not null terminate the buffer. WebKit can rely on the null termination.
#define vsnprintf(buffer, count, format, args) wtf_vsnprintf(buffer, count, format, args)
#if OS(WINCE)
diff --git a/JavaScriptCore/wtf/TCSystemAlloc.cpp b/JavaScriptCore/wtf/TCSystemAlloc.cpp
index c46ff31..0b7ecc9 100644
--- a/JavaScriptCore/wtf/TCSystemAlloc.cpp
+++ b/JavaScriptCore/wtf/TCSystemAlloc.cpp
@@ -34,7 +34,6 @@
#include "TCSystemAlloc.h"
#include <algorithm>
-#include <fcntl.h>
#include "Assertions.h"
#include "TCSpinLock.h"
#include "UnusedParam.h"
diff --git a/JavaScriptCore/wtf/Vector.h b/JavaScriptCore/wtf/Vector.h
index c833eeb..c60de15 100644
--- a/JavaScriptCore/wtf/Vector.h
+++ b/JavaScriptCore/wtf/Vector.h
@@ -557,6 +557,7 @@ namespace WTF {
const T& last() const { return at(size() - 1); }
template<typename U> size_t find(const U&) const;
+ template<typename U> size_t reverseFind(const U&) const;
void shrink(size_t size);
void grow(size_t size);
@@ -744,6 +745,18 @@ namespace WTF {
}
template<typename T, size_t inlineCapacity>
+ template<typename U>
+ size_t Vector<T, inlineCapacity>::reverseFind(const U& value) const
+ {
+ for (size_t i = 1; i <= size(); ++i) {
+ const size_t index = size() - i;
+ if (at(index) == value)
+ return index;
+ }
+ return notFound;
+ }
+
+ template<typename T, size_t inlineCapacity>
void Vector<T, inlineCapacity>::fill(const T& val, size_t newSize)
{
if (size() > newSize)
diff --git a/JavaScriptCore/wtf/gobject/GOwnPtr.h b/JavaScriptCore/wtf/gobject/GOwnPtr.h
index 1fc594c..40c0bf4 100644
--- a/JavaScriptCore/wtf/gobject/GOwnPtr.h
+++ b/JavaScriptCore/wtf/gobject/GOwnPtr.h
@@ -78,8 +78,9 @@ public:
void clear()
{
- freeOwnedGPtr(m_ptr);
+ T* ptr = m_ptr;
m_ptr = 0;
+ freeOwnedGPtr(ptr);
}
T& operator*() const
diff --git a/JavaScriptCore/wtf/gobject/GRefPtr.h b/JavaScriptCore/wtf/gobject/GRefPtr.h
index 3a33605..c4d4107 100644
--- a/JavaScriptCore/wtf/gobject/GRefPtr.h
+++ b/JavaScriptCore/wtf/gobject/GRefPtr.h
@@ -52,9 +52,10 @@ public:
void clear()
{
- if (T* ptr = m_ptr)
- derefGPtr(ptr);
+ T* ptr = m_ptr;
m_ptr = 0;
+ if (ptr)
+ derefGPtr(ptr);
}
T* get() const { return m_ptr; }
diff --git a/JavaScriptCore/wtf/text/WTFString.cpp b/JavaScriptCore/wtf/text/WTFString.cpp
index d744b15..2d4417f 100644
--- a/JavaScriptCore/wtf/text/WTFString.cpp
+++ b/JavaScriptCore/wtf/text/WTFString.cpp
@@ -663,7 +663,7 @@ CString String::utf8() const
// simply encode it to UTF-8.
if (result == sourceExhausted) {
// This should be one unpaired high surrogate.
- ASSERT((characters + 1) == (characters + length));
+ ASSERT((characters + 1) == (this->characters() + length));
ASSERT((*characters >= 0xD800) && (*characters <= 0xDBFF));
// There should be room left, since one UChar hasn't been converted.
ASSERT((buffer + 3) <= (buffer + bufferVector.size()));
diff --git a/JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp b/JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp
index ecab5bd..5112de5 100644
--- a/JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp
+++ b/JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp
@@ -69,13 +69,12 @@ PassOwnPtr<Collator> Collator::userDefault()
CFStringRef collationOrder = collationOrderRetainer.get();
#endif
char buf[256];
- if (collationOrder) {
- CFStringGetCString(collationOrder, buf, sizeof(buf), kCFStringEncodingASCII);
- return new Collator(buf);
- } else
- return new Collator("");
+ if (!collationOrder)
+ return adoptPtr(new Collator(""));
+ CFStringGetCString(collationOrder, buf, sizeof(buf), kCFStringEncodingASCII);
+ return adoptPtr(new Collator(buf));
#else
- return new Collator(0);
+ return adoptPtr(new Collator(0));
#endif
}
diff --git a/JavaScriptCore/yarr/RegexInterpreter.cpp b/JavaScriptCore/yarr/RegexInterpreter.cpp
index 09c82d1..4fb5f92 100644
--- a/JavaScriptCore/yarr/RegexInterpreter.cpp
+++ b/JavaScriptCore/yarr/RegexInterpreter.cpp
@@ -1235,17 +1235,16 @@ public:
ByteCompiler(RegexPattern& pattern)
: m_pattern(pattern)
{
- m_bodyDisjunction = 0;
m_currentAlternativeIndex = 0;
}
- BytecodePattern* compile()
+ PassOwnPtr<BytecodePattern> compile()
{
regexBegin(m_pattern.m_numSubpatterns, m_pattern.m_body->m_callFrameSize);
emitDisjunction(m_pattern.m_body);
regexEnd();
- return new BytecodePattern(m_bodyDisjunction, m_allParenthesesInfo, m_pattern);
+ return adoptPtr(new BytecodePattern(m_bodyDisjunction.release(), m_allParenthesesInfo, m_pattern));
}
void checkInput(unsigned count)
@@ -1448,7 +1447,7 @@ public:
void regexBegin(unsigned numSubpatterns, unsigned callFrameSize)
{
- m_bodyDisjunction = new ByteDisjunction(numSubpatterns, callFrameSize);
+ m_bodyDisjunction = adoptPtr(new ByteDisjunction(numSubpatterns, callFrameSize));
m_bodyDisjunction->terms.append(ByteTerm::BodyAlternativeBegin());
m_bodyDisjunction->terms[0].frameLocation = 0;
m_currentAlternativeIndex = 0;
@@ -1568,19 +1567,19 @@ public:
private:
RegexPattern& m_pattern;
- ByteDisjunction* m_bodyDisjunction;
+ OwnPtr<ByteDisjunction> m_bodyDisjunction;
unsigned m_currentAlternativeIndex;
Vector<ParenthesesStackEntry> m_parenthesesStack;
Vector<ByteDisjunction*> m_allParenthesesInfo;
};
-BytecodePattern* byteCompileRegex(const UString& patternString, unsigned& numSubpatterns, const char*& error, bool ignoreCase, bool multiline)
+PassOwnPtr<BytecodePattern> byteCompileRegex(const UString& patternString, unsigned& numSubpatterns, const char*& error, bool ignoreCase, bool multiline)
{
RegexPattern pattern(ignoreCase, multiline);
if ((error = compileRegex(patternString, pattern)))
- return 0;
+ return PassOwnPtr<BytecodePattern>();
numSubpatterns = pattern.m_numSubpatterns;
diff --git a/JavaScriptCore/yarr/RegexInterpreter.h b/JavaScriptCore/yarr/RegexInterpreter.h
index e3c3122..af63a7b 100644
--- a/JavaScriptCore/yarr/RegexInterpreter.h
+++ b/JavaScriptCore/yarr/RegexInterpreter.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -30,6 +30,7 @@
#include "RegexParser.h"
#include "RegexPattern.h"
+#include <wtf/PassOwnPtr.h>
#include <wtf/unicode/Unicode.h>
namespace JSC { namespace Yarr {
@@ -292,7 +293,7 @@ public:
};
struct BytecodePattern : FastAllocBase {
- BytecodePattern(ByteDisjunction* body, Vector<ByteDisjunction*> allParenthesesInfo, RegexPattern& pattern)
+ BytecodePattern(PassOwnPtr<ByteDisjunction> body, Vector<ByteDisjunction*> allParenthesesInfo, RegexPattern& pattern)
: m_body(body)
, m_ignoreCase(pattern.m_ignoreCase)
, m_multiline(pattern.m_multiline)
@@ -325,7 +326,7 @@ private:
Vector<CharacterClass*> m_userCharacterClasses;
};
-BytecodePattern* byteCompileRegex(const UString& pattern, unsigned& numSubpatterns, const char*& error, bool ignoreCase = false, bool multiline = false);
+PassOwnPtr<BytecodePattern> byteCompileRegex(const UString& pattern, unsigned& numSubpatterns, const char*& error, bool ignoreCase = false, bool multiline = false);
int interpretRegex(BytecodePattern* v_regex, const UChar* input, unsigned start, unsigned length, int* output);
} } // namespace JSC::Yarr
diff --git a/LayoutTests/fast/xpath/substring-nan-position-expected.txt b/LayoutTests/fast/xpath/substring-nan-position-expected.txt
new file mode 100644
index 0000000..136cf21
--- /dev/null
+++ b/LayoutTests/fast/xpath/substring-nan-position-expected.txt
@@ -0,0 +1,10 @@
+Test for bug 41862: XPath substring function is broken when passing NaN as the position parameter.
+
+PASS document.evaluate("substring('12345', number('NaN'))", document, null, XPathResult.STRING_TYPE, null).stringValue is ''
+PASS document.evaluate("substring('12345', number('NaN'), 3)", document, null, XPathResult.STRING_TYPE, null).stringValue is ''
+PASS document.evaluate("substring('12345', number('NaN'), -2147483645)", document, null, XPathResult.STRING_TYPE, null).stringValue is ''
+PASS document.evaluate("substring('12345', number('NaN'), number('NaN'))", document, null, XPathResult.STRING_TYPE, null).stringValue is ''
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/xpath/substring-nan-position.html b/LayoutTests/fast/xpath/substring-nan-position.html
new file mode 100644
index 0000000..d1a1813
--- /dev/null
+++ b/LayoutTests/fast/xpath/substring-nan-position.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=41862">bug 41862</a>:
+XPath substring function is broken when passing NaN as the position parameter.</p>
+<div id="console"></div>
+
+<script>
+ shouldBe("document.evaluate(\"substring('12345', number(\'NaN\'))\", document, null, XPathResult.STRING_TYPE, null).stringValue", "''");
+ shouldBe("document.evaluate(\"substring('12345', number(\'NaN\'), 3)\", document, null, XPathResult.STRING_TYPE, null).stringValue", "''");
+
+ <!-- -2147483645 represents MIN_INT-3 which when passed through the original substring function before the fix for 41862 landed caused an overflow and wrap to 2. That meant that this case was effectively calling substring('12345', MIN_INT, 2) and returning 12, rather than the empty string which the NaN should have triggered.. -->
+ shouldBe("document.evaluate(\"substring('12345', number(\'NaN\'), -2147483645)\", document, null, XPathResult.STRING_TYPE, null).stringValue", "''");
+
+ shouldBe("document.evaluate(\"substring('12345', number(\'NaN\'), number(\'NaN\'))\", document, null, XPathResult.STRING_TYPE, null).stringValue", "''");
+
+ var successfullyParsed = true;
+
+</script>
+<script src="../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/xpath/substring-non-positive-postion-expected.txt b/LayoutTests/fast/xpath/substring-non-positive-postion-expected.txt
new file mode 100644
index 0000000..d3683b7
--- /dev/null
+++ b/LayoutTests/fast/xpath/substring-non-positive-postion-expected.txt
@@ -0,0 +1,10 @@
+Test for bug 41913: XPath substring function does not correctly handle non-positive values for the position argument
+
+PASS document.evaluate("substring('abcde', 0)", document, null, XPathResult.STRING_TYPE, null).stringValue is 'abcde'
+PASS document.evaluate("substring('abcde', -2)", document, null, XPathResult.STRING_TYPE, null).stringValue is 'abcde'
+PASS document.evaluate("substring('abcde', 0, 5)", document, null, XPathResult.STRING_TYPE, null).stringValue is 'abcd'
+PASS document.evaluate("substring('abcde', -2, 5)", document, null, XPathResult.STRING_TYPE, null).stringValue is 'ab'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/xpath/substring-non-positive-postion.html b/LayoutTests/fast/xpath/substring-non-positive-postion.html
new file mode 100644
index 0000000..321bf25
--- /dev/null
+++ b/LayoutTests/fast/xpath/substring-non-positive-postion.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=41913">bug 41913</a>:
+XPath substring function does not correctly handle non-positive values for the position argument</p>
+<div id="console"></div>
+
+<script>
+ shouldBe("document.evaluate(\"substring('abcde', 0)\", document, null, XPathResult.STRING_TYPE, null).stringValue", "'abcde'");
+ shouldBe("document.evaluate(\"substring('abcde', -2)\", document, null, XPathResult.STRING_TYPE, null).stringValue", "'abcde'");
+ shouldBe("document.evaluate(\"substring('abcde', 0, 5)\", document, null, XPathResult.STRING_TYPE, null).stringValue", "'abcd'");
+ shouldBe("document.evaluate(\"substring('abcde', -2, 5)\", document, null, XPathResult.STRING_TYPE, null).stringValue", "'ab'");
+
+ var successfullyParsed = true;
+
+</script>
+<script src="../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/http/tests/appcache/foreign-iframe-main-expected.txt b/LayoutTests/http/tests/appcache/foreign-iframe-main-expected.txt
index 64d4de2..1661ad3 100644
--- a/LayoutTests/http/tests/appcache/foreign-iframe-main-expected.txt
+++ b/LayoutTests/http/tests/appcache/foreign-iframe-main-expected.txt
@@ -5,6 +5,7 @@ downloading
progress
progress
progress
+progress
cached
SUCCESS
diff --git a/LayoutTests/http/tests/appcache/progress-counter-expected.txt b/LayoutTests/http/tests/appcache/progress-counter-expected.txt
new file mode 100644
index 0000000..c9e3db2
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/progress-counter-expected.txt
@@ -0,0 +1,2 @@
+This tests that the lengthComputable / loaded / total properties of the progress event are set correctly.
+SUCCESS
diff --git a/LayoutTests/http/tests/appcache/progress-counter.html b/LayoutTests/http/tests/appcache/progress-counter.html
new file mode 100644
index 0000000..0f9d0b6
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/progress-counter.html
@@ -0,0 +1,62 @@
+<html manifest="resources/progress-counter.manifest">
+<script>
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText()
+ layoutTestController.waitUntilDone();
+}
+
+var expectedTotal = 2
+var eventsReceived = 0;
+
+function done() {
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+}
+
+function progress(event)
+{
+ if (!event.lengthComputable) {
+ document.getElementById('result').innerHTML = "FAILURE: expected progressEvent.lengthComputable to be true";
+ done();
+ return;
+ }
+ if (event.total != expectedTotal) {
+ document.getElementById('result').innerHTML = "FAILURE: expected progressEvent.total to be " + expectedTotal + " but was " + event.total;
+ done();
+ return;
+ }
+ if (event.loaded != eventsReceived) {
+ document.getElementById('result').innerHTML = "FAILURE: expected progressEvent.loaded to be " + eventsReceived + " but was " + event.loaded;
+ done();
+ return;
+ }
+ eventsReceived++;
+}
+
+function cached()
+{
+ if (eventsReceived != 3) {
+ document.getElementById('result').innerHTML = "FAILURE: expected 3 progress events, but got " + eventsReceived;
+ done();
+ return;
+ }
+
+ document.getElementById('result').innerHTML = "SUCCESS";
+ done();
+}
+
+function noupdate()
+{
+ document.getElementById('result').innerHTML = "FAILURE: unable to conduct test since the appcache already exists, please remove the appcache and try again";
+ done();
+}
+
+applicationCache.addEventListener('cached', cached, false);
+applicationCache.addEventListener('noupdate', noupdate, false);
+applicationCache.addEventListener('progress', progress, false);
+
+</script>
+<div>This tests that the lengthComputable / loaded / total properties of the progress event are set correctly.</div>
+
+<div id="result">FAILURE</div>
+</html>
diff --git a/LayoutTests/http/tests/appcache/resources/different-https-origin-resource.html b/LayoutTests/http/tests/appcache/resources/different-https-origin-resource.html
index 674706a..7c24b07 100644
--- a/LayoutTests/http/tests/appcache/resources/different-https-origin-resource.html
+++ b/LayoutTests/http/tests/appcache/resources/different-https-origin-resource.html
@@ -20,8 +20,14 @@ function error()
hadError = true;
finish();
}
+function progressHandler(e)
+{
+ // The only resource listed in the manifest file is in a different https origin and should be skipped.
+ if (e.loaded != 0 || e.total != 0)
+ fail();
+}
-applicationCache.onprogress = function() { fail(); }
+applicationCache.onprogress = progressHandler;
applicationCache.onnoupdate = function() { finish(); }
applicationCache.oncached = function() { finish(); }
applicationCache.onerror = function() { error(); }
diff --git a/LayoutTests/http/tests/appcache/resources/progress-counter.manifest b/LayoutTests/http/tests/appcache/resources/progress-counter.manifest
new file mode 100644
index 0000000..7877cd8
--- /dev/null
+++ b/LayoutTests/http/tests/appcache/resources/progress-counter.manifest
@@ -0,0 +1,3 @@
+CACHE MANIFEST
+simple.txt
+empty.txt
diff --git a/LayoutTests/storage/indexeddb/idb-objectstore-request-expected.txt b/LayoutTests/storage/indexeddb/idb-objectstore-request-expected.txt
index bcf1d63..30bac34 100644
--- a/LayoutTests/storage/indexeddb/idb-objectstore-request-expected.txt
+++ b/LayoutTests/storage/indexeddb/idb-objectstore-request-expected.txt
@@ -3,12 +3,14 @@ Test IndexedDB's IDBObjectStoreRequest.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+indexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'abort' 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
@@ -22,12 +24,14 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
+db.createObjectStore('storeName', null)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'abort' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+createSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -42,7 +46,72 @@ PASS event.target.readyState is event.target.DONE
store = event.result
PASS store.name is "storeName"
-PASS store.keyPath is "keyPath"
+PASS store.keyPath is null
+store.add('value', 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'abort' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+addSuccess():
+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 'abort' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result is "key"
+store = event.source
+store.get('key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'abort' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+getSuccess():
+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 'abort' 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"
+store = event.source
+store.remove('key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'abort' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+removeSuccess():
+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 'abort' 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
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/script-tests/idb-objectstore-request.js b/LayoutTests/storage/indexeddb/script-tests/idb-objectstore-request.js
index 031ece6..045db12 100644
--- a/LayoutTests/storage/indexeddb/script-tests/idb-objectstore-request.js
+++ b/LayoutTests/storage/indexeddb/script-tests/idb-objectstore-request.js
@@ -4,7 +4,7 @@ if (window.layoutTestController)
function test()
{
- result = indexedDB.open('name', 'description');
+ result = evalAndLog("indexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
@@ -12,17 +12,14 @@ function test()
function openSuccess()
{
+ debug("openSuccess():");
verifySuccessEvent(event);
-
var db = evalAndLog("db = event.result");
- createObjectStore(db);
-}
-function createObjectStore(db)
-{
// FIXME: remove any previously created object stores.
// This requires IDBDatabaseRequest::removeObjectStore to be implemented.
- result = db.createObjectStore('storeName', 'keyPath');
+
+ result = evalAndLog("db.createObjectStore('storeName', null)");
verifyResult(result);
result.onsuccess = createSuccess;
result.onerror = unexpectedErrorCallback;
@@ -30,12 +27,51 @@ function createObjectStore(db)
function createSuccess()
{
+ debug("createSuccess():");
verifySuccessEvent(event);
var store = evalAndLog("store = event.result");
+
shouldBeEqualToString("store.name", "storeName");
- shouldBeEqualToString("store.keyPath", "keyPath");
+ shouldBeNull("store.keyPath");
// FIXME: test store.indexNames, as well as all object store's methods.
+ result = evalAndLog("store.add('value', 'key')");
+ verifyResult(result);
+ result.onsuccess = addSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function addSuccess()
+{
+ debug("addSuccess():");
+ verifySuccessEvent(event);
+ shouldBeEqualToString("event.result", "key");
+ var store = evalAndLog("store = event.source");
+
+ result = evalAndLog("store.get('key')");
+ verifyResult(result);
+ result.onsuccess = getSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function getSuccess()
+{
+ debug("getSuccess():");
+ verifySuccessEvent(event);
+ shouldBeEqualToString("event.result", "value");
+ var store = evalAndLog("store = event.source");
+
+ result = evalAndLog("store.remove('key')");
+ verifyResult(result);
+ result.onsuccess = removeSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function removeSuccess()
+{
+ debug("removeSuccess():");
+ verifySuccessEvent(event);
+ shouldBeNull("event.result");
done();
}
diff --git a/WebCore/Android.derived.jscbindings.mk b/WebCore/Android.derived.jscbindings.mk
index c9d5b55..1929729 100644
--- a/WebCore/Android.derived.jscbindings.mk
+++ b/WebCore/Android.derived.jscbindings.mk
@@ -393,6 +393,7 @@ GEN := \
$(intermediates)/storage/JSIDBErrorEvent.h \
$(intermediates)/storage/JSIDBEvent.h \
$(intermediates)/storage/JSIDBIndexRequest.h \
+ $(intermediates)/storage/JSIDBKey.h \
$(intermediates)/storage/JSIDBKeyRange.h \
$(intermediates)/storage/JSIDBRequest.h \
$(intermediates)/storage/JSIDBSuccessEvent.h \
diff --git a/WebCore/Android.derived.v8bindings.mk b/WebCore/Android.derived.v8bindings.mk
index 216e200..c1065fa 100644
--- a/WebCore/Android.derived.v8bindings.mk
+++ b/WebCore/Android.derived.v8bindings.mk
@@ -387,6 +387,7 @@ GEN := \
$(intermediates)/bindings/V8IDBErrorEvent.h \
$(intermediates)/bindings/V8IDBEvent.h \
$(intermediates)/bindings/V8IDBIndexRequest.h \
+ $(intermediates)/bindings/V8IDBKey.h \
$(intermediates)/bindings/V8IDBKeyRange.h \
$(intermediates)/bindings/V8IDBRequest.h \
$(intermediates)/bindings/V8IDBSuccessEvent.h \
diff --git a/WebCore/Android.jscbindings.mk b/WebCore/Android.jscbindings.mk
index e2f0fb6..5983450 100644
--- a/WebCore/Android.jscbindings.mk
+++ b/WebCore/Android.jscbindings.mk
@@ -61,6 +61,7 @@ LOCAL_SRC_FILES += \
bindings/js/DOMObjectHashTableMap.cpp \
bindings/js/DOMWrapperWorld.cpp \
bindings/js/GCController.cpp \
+ bindings/js/IDBBindingUtilities.cpp \
bindings/js/JSAttrCustom.cpp \
bindings/js/JSAudioConstructor.cpp \
bindings/js/JSCDATASectionCustom.cpp \
@@ -119,6 +120,8 @@ LOCAL_SRC_FILES += \
bindings/js/JSHTMLOptionsCollectionCustom.cpp \
bindings/js/JSHTMLSelectElementCustom.cpp \
bindings/js/JSHistoryCustom.cpp \
+ bindings/js/JSIDBAnyCustom.cpp \
+ bindings/js/JSIDBKeyCustom.cpp \
bindings/js/JSImageConstructor.cpp \
bindings/js/JSImageDataCustom.cpp \
bindings/js/JSLazyEventListener.cpp \
diff --git a/WebCore/Android.mk b/WebCore/Android.mk
index 61591da..26eb405 100644
--- a/WebCore/Android.mk
+++ b/WebCore/Android.mk
@@ -155,7 +155,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
dom/Notation.cpp \
dom/OptionElement.cpp \
dom/OptionGroupElement.cpp \
- dom/DeviceOrientation.cpp \
+ dom/DeviceOrientationController.cpp \
dom/DeviceOrientationEvent.cpp \
dom/OverflowEvent.cpp \
dom/PageTransitionEvent.cpp \
@@ -274,6 +274,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
html/HTMLTreeBuilder.cpp \
html/HTMLAllCollection.cpp \
html/HTMLCollection.cpp \
+ html/HTMLConstructionSite.cpp \
html/HTMLDataListElement.cpp \
html/HTMLDocument.cpp \
html/HTMLDocumentParser.cpp \
@@ -803,6 +804,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
storage/IDBEvent.cpp \
storage/IDBIndexImpl.cpp \
storage/IDBIndexRequest.cpp \
+ storage/IDBKey.cpp \
storage/IDBKeyRange.cpp \
storage/IDBObjectStoreImpl.cpp \
storage/IDBObjectStoreRequest.cpp \
diff --git a/WebCore/Android.v8bindings.mk b/WebCore/Android.v8bindings.mk
index 9eda878..8eaa091 100644
--- a/WebCore/Android.v8bindings.mk
+++ b/WebCore/Android.v8bindings.mk
@@ -49,8 +49,12 @@ LOCAL_SRC_FILES += \
bindings/v8/DateExtension.cpp \
bindings/v8/DOMData.cpp \
bindings/v8/DOMDataStore.cpp \
+<<<<<<< HEAD
bindings/v8/DOMWrapperWorld.cpp \
bindings/v8/IsolatedWorld.cpp \
+=======
+ bindings/v8/IDBBindingUtilities.cpp \
+>>>>>>> webkit.org at r63173
bindings/v8/MainThreadDOMData.cpp \
bindings/v8/NPV8Object.cpp \
bindings/v8/ScheduledAction.cpp \
@@ -125,7 +129,12 @@ LOCAL_SRC_FILES += \
bindings/v8/custom/V8EventSourceConstructor.cpp \
bindings/v8/custom/V8Float32ArrayCustom.cpp \
bindings/v8/custom/V8GeolocationCustom.cpp \
+<<<<<<< HEAD
bindings/v8/custom/V8HistoryCustom.cpp \
+=======
+ bindings/v8/custom/V8IDBAny.cpp \
+ bindings/v8/custom/V8IDBKey.cpp \
+>>>>>>> webkit.org at r63173
bindings/v8/custom/V8HTMLAllCollectionCustom.cpp \
bindings/v8/custom/V8HTMLAudioElementConstructor.cpp \
bindings/v8/custom/V8HTMLCanvasElementCustom.cpp \
diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
index c8fdde5..957b770 100644
--- a/WebCore/CMakeLists.txt
+++ b/WebCore/CMakeLists.txt
@@ -1,6 +1,7 @@
SET(WebCore_INCLUDE_DIRECTORIES
"${WEBCORE_DIR}"
"${WEBCORE_DIR}/accessibility"
+ "${WEBCORE_DIR}/bindings"
"${WEBCORE_DIR}/bindings/js"
"${WEBCORE_DIR}/bridge"
"${WEBCORE_DIR}/bridge/c"
@@ -266,6 +267,7 @@ SET(WebCore_IDL_FILES
html/ImageData.idl
html/MediaError.idl
html/TextMetrics.idl
+ html/TimeRanges.idl
html/ValidityState.idl
html/VoidCallback.idl
@@ -319,10 +321,10 @@ SET(WebCore_IDL_FILES
page/WebKitPoint.idl
page/WorkerNavigator.idl
- plugins/MimeType.idl
- plugins/MimeTypeArray.idl
- plugins/Plugin.idl
- plugins/PluginArray.idl
+ plugins/DOMMimeType.idl
+ plugins/DOMMimeTypeArray.idl
+ plugins/DOMPlugin.idl
+ plugins/DOMPluginArray.idl
storage/Database.idl
storage/DatabaseCallback.idl
@@ -334,6 +336,7 @@ SET(WebCore_IDL_FILES
storage/IDBErrorEvent.idl
storage/IDBEvent.idl
storage/IDBIndexRequest.idl
+ storage/IDBKey.idl
storage/IDBKeyRange.idl
storage/IDBObjectStoreRequest.idl
storage/IDBRequest.idl
@@ -555,6 +558,7 @@ SET(WebCore_SOURCES
bindings/js/DOMObjectHashTableMap.cpp
bindings/js/DOMWrapperWorld.cpp
bindings/js/GCController.cpp
+ bindings/js/IDBBindingUtilities.cpp
bindings/js/JavaScriptCallFrame.cpp
bindings/js/JSAttrCustom.cpp
bindings/js/JSCallbackData.cpp
@@ -598,6 +602,8 @@ SET(WebCore_SOURCES
bindings/js/JSExceptionBase.cpp
bindings/js/JSGeolocationCustom.cpp
bindings/js/JSHistoryCustom.cpp
+ bindings/js/JSIDBAnyCustom.cpp
+ bindings/js/JSIDBKeyCustom.cpp
bindings/js/JSHTMLAllCollectionCustom.cpp
bindings/js/JSHTMLAppletElementCustom.cpp
bindings/js/JSHTMLCanvasElementCustom.cpp
@@ -624,7 +630,7 @@ SET(WebCore_SOURCES
bindings/js/JSMessageChannelCustom.cpp
bindings/js/JSMessageEventCustom.cpp
bindings/js/JSMessagePortCustom.cpp
- bindings/js/JSMimeTypeArrayCustom.cpp
+ bindings/js/JSDOMMimeTypeArrayCustom.cpp
bindings/js/JSNamedNodeMapCustom.cpp
bindings/js/JSNavigatorCustom.cpp
bindings/js/JSNodeCustom.cpp
@@ -633,8 +639,8 @@ SET(WebCore_SOURCES
bindings/js/JSNodeIteratorCustom.cpp
bindings/js/JSNodeListCustom.cpp
bindings/js/JSOptionConstructor.cpp
- bindings/js/JSPluginArrayCustom.cpp
- bindings/js/JSPluginCustom.cpp
+ bindings/js/JSDOMPluginArrayCustom.cpp
+ bindings/js/JSDOMPluginCustom.cpp
bindings/js/JSPluginElementFunctions.cpp
bindings/js/JSPopStateEventCustom.cpp
bindings/js/JSScriptProfileNodeCustom.cpp
@@ -662,7 +668,6 @@ SET(WebCore_SOURCES
bindings/js/ScriptCallFrame.cpp
bindings/js/ScriptCallStack.cpp
bindings/js/ScriptController.cpp
- bindings/js/ScriptControllerEfl.cpp
bindings/js/ScriptDebugServer.cpp
bindings/js/ScriptEventListener.cpp
bindings/js/ScriptFunctionCall.cpp
@@ -757,7 +762,6 @@ SET(WebCore_SOURCES
dom/Attribute.cpp
dom/BeforeTextInsertedEvent.cpp
dom/BeforeUnloadEvent.cpp
- dom/CanvasSurface.cpp
dom/CDATASection.cpp
dom/CharacterData.cpp
dom/CheckedRadioButtons.cpp
@@ -774,7 +778,7 @@ SET(WebCore_SOURCES
dom/CustomEvent.cpp
dom/DatasetDOMStringMap.cpp
dom/DecodedDataDocumentParser.cpp
- dom/DeviceOrientation.cpp
+ dom/DeviceOrientationController.cpp
dom/DeviceOrientationEvent.cpp
dom/Document.cpp
dom/DocumentFragment.cpp
@@ -898,7 +902,8 @@ SET(WebCore_SOURCES
editing/markup.cpp
editing/visible_units.cpp
- history/BackForwardList.cpp
+ history/BackForwardController.cpp
+ history/BackForwardListImpl.cpp
history/CachedFrame.cpp
history/CachedPage.cpp
history/HistoryItem.cpp
@@ -935,6 +940,7 @@ SET(WebCore_SOURCES
html/HTMLButtonElement.cpp
html/HTMLCanvasElement.cpp
html/HTMLCollection.cpp
+ html/HTMLConstructionSite.cpp
html/HTMLDListElement.cpp
html/HTMLDataGridCellElement.cpp
html/HTMLDataGridColElement.cpp
@@ -1025,6 +1031,7 @@ SET(WebCore_SOURCES
inspector/ConsoleMessage.cpp
inspector/InjectedScript.cpp
inspector/InjectedScriptHost.cpp
+ inspector/InspectorApplicationCacheAgent.cpp
inspector/InspectorBackend.cpp
inspector/InspectorCSSStore.cpp
inspector/InspectorController.cpp
@@ -1283,10 +1290,10 @@ SET(WebCore_SOURCES
platform/text/transcoder/FontTranscoder.cpp
- plugins/MimeTypeArray.cpp
- plugins/MimeType.cpp
- plugins/PluginArray.cpp
- plugins/Plugin.cpp
+ plugins/DOMMimeTypeArray.cpp
+ plugins/DOMMimeType.cpp
+ plugins/DOMPluginArray.cpp
+ plugins/DOMPlugin.cpp
plugins/PluginData.cpp
plugins/PluginDataNone.cpp
plugins/PluginMainThreadScheduler.cpp
@@ -1403,6 +1410,7 @@ SET(WebCore_SOURCES
storage/IDBDatabaseRequest.cpp
storage/IDBErrorEvent.cpp
storage/IDBEvent.cpp
+ storage/IDBKey.cpp
storage/IDBKeyRange.cpp
storage/IDBRequest.cpp
storage/IDBObjectStoreImpl.cpp
@@ -1707,7 +1715,9 @@ FOREACH (_file ${WebCore_IDL_PURE_FILES})
GENERATE_JS_FROM_IDL_PURE(${_file})
ENDFOREACH ()
-LIST(APPEND WebCore_SOURCES ${JS_IDL_FILES})
+GENERATE_INSPECTOR_FROM_IDL(inspector/InspectorFrontend2.idl)
+
+LIST(APPEND WebCore_SOURCES ${JS_IDL_FILES} ${Inspector_IDL_FILES})
GENERATE_GPERF(${WEBCORE_DIR}/html/HTMLEntityNames.gperf)
GENERATE_GPERF(${WEBCORE_DIR}/platform/ColorData.gperf)
diff --git a/WebCore/CMakeListsEfl.txt b/WebCore/CMakeListsEfl.txt
index da1f27a..ab475f5 100644
--- a/WebCore/CMakeListsEfl.txt
+++ b/WebCore/CMakeListsEfl.txt
@@ -17,6 +17,7 @@ LIST(APPEND WebCore_INCLUDE_DIRECTORIES
LIST(APPEND WebCore_SOURCES
accessibility/efl/AccessibilityObjectEfl.cpp
+ bindings/js/ScriptControllerEfl.cpp
page/efl/DragControllerEfl.cpp
page/efl/EventHandlerEfl.cpp
page/efl/FrameEfl.cpp
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c27e3b2..e0d5843 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,5854 @@
+2010-07-12 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Sam Weinig.
+
+ Fix a typo in the adoption agency causing test failures
+ https://bugs.webkit.org/show_bug.cgi?id=42133
+
+ The new behavior actually differs from old webkit.
+ <p><b><p>TEST
+ was not bold in the old parser, but is bold now.
+ This matches Minefield and the HTML5 spec.
+
+ Covered by two tests in html5lib/runner.html.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+
+2010-07-12 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Joseph Pecoraro.
+
+ Web Inspector: provide starts and ends for network phases instead of duration.
+
+ https://bugs.webkit.org/show_bug.cgi?id=42091
+
+ * inspector/InspectorResource.cpp:
+ (WebCore::InspectorResource::updateResponse):
+ (WebCore::InspectorResource::updateScriptObject):
+ (WebCore::InspectorResource::buildObjectForTiming):
+ * platform/network/ResourceLoadTiming.h:
+ (WebCore::ResourceLoadTiming::deepCopy):
+ (WebCore::ResourceLoadTiming::operator==):
+ (WebCore::ResourceLoadTiming::ResourceLoadTiming):
+ * platform/network/ResourceResponseBase.cpp:
+ (WebCore::ResourceResponseBase::ResourceResponseBase):
+ (WebCore::ResourceResponseBase::wasCached):
+ (WebCore::ResourceResponseBase::setWasCached):
+ * platform/network/ResourceResponseBase.h:
+
+2010-07-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ HTML5 Parser: document.write after onload blows away document
+ https://bugs.webkit.org/show_bug.cgi?id=40745
+
+ Rather than blowing away the document when we get a document.write call
+ after the document is closed, we new ignore the write. This
+ technically violates the spec (which requires us to blow away the
+ document), but blowing away the document breaks too many web sites.
+
+ Rather than this patch, we could go back to our old behavior (which was
+ to append the bytes just before EOF), but implementing this approach
+ (suggested by Henri) will let us gather data about whether his approach
+ is workable.
+
+ See also: http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767
+
+ * dom/Document.cpp:
+ (WebCore::Document::write):
+ * html/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::insert):
+
+2010-07-12 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ Strip BOMs from source before passing to V8
+ https://bugs.webkit.org/show_bug.cgi?id=42102
+
+ This extra copy may carry a performance penalty. We should investigate
+ whether this allows any simplification in v8/scanner.cc:SkipJavaScriptWhiteSpace().
+
+ No new tests because no new functionality.
+
+ * bindings/v8/ScriptSourceCode.h:
+ (WebCore::ScriptSourceCode::ScriptSourceCode):
+
+2010-07-12 Gustavo Noronha Silva <gns@gnome.org>
+
+ Unreviewed. make distcheck fix.
+
+ * GNUmakefile.am:
+
+2010-07-12 Yuta Kitamura <yutak@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Fix crash caused by unintentional deletion of worker bridge and channel.
+
+ WebSocket: Crash caused by calling close() within onmessage handler
+ https://bugs.webkit.org/show_bug.cgi?id=41507
+
+ Test: websocket/tests/workers/close-in-onmessage-crash.html
+
+ * websockets/WebSocket.cpp:
+ (WebCore::WebSocket::close): bufferedAmount() may call WebSocket::didClose(),
+ which causes m_channel to get freed.
+ * websockets/WorkerThreadableWebSocketChannel.cpp:
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): Add reference to
+ the bridge because waitForMethodCompletion() may dereference the bridge.
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount): Ditto.
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
+ The root cause is a call to WorkerRunLoop::runInMode in this function.
+ It may call WebSocket::didClose() even inside WebSocket::close(), which frees
+ everything including the worker bridge and the channel.
+
+2010-07-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ REGRESSION (HTML5 parser?): Impossible to get past the CAPTCHA on postcode.royalmail.com
+ https://bugs.webkit.org/show_bug.cgi?id=41797
+
+ Once we resume parsing after script execution, we want to clear the
+ preload scanner so we don't scan any bytes it might have accumulated.
+
+ Test: http/tests/loading/preload-slow-loading.php
+
+ * html/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
+
+2010-07-12 Albert J. Wong <ajwong@chromium.org>
+
+ Reviewed by Jian Li.
+
+ Adding directional property enums back into
+ CSSComputedStyleDeclaration::getPropertyCSSValue().
+
+ https://bugs.webkit.org/show_bug.cgi?id=42122
+
+ The four directional -webkit- properties -- CSSPropertyWebkitMarginEnd,
+ CSSPropertyWebkitMarginStart, CSSPropertyWebkitPaddingEnd, and
+ CSSPropertyWebkitPaddingStart -- are resolved into other css
+ properties before the swtich statement via a call to
+ CSSProperty::resolveDirectionAwareProperty(). Thus, they are never
+ seen by the switch statement. However, if you leave out a potential
+ enum value from the switch, gcc will generate a warning if -Wall is
+ specified. This warning breaks the Chromium build. To avoid this,
+ we add in the enum values and ASSERT_NOT_REACHED() if they are hit.
+
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+
+2010-07-12 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX converts AtomicStrings to .string() more than needed
+ https://bugs.webkit.org/show_bug.cgi?id=42056
+
+ No behavior change. No new tests.
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::isPressed):
+ (WebCore::siblingWithAriaRole):
+ (WebCore::AccessibilityRenderObject::intValue):
+ (WebCore::AccessibilityRenderObject::accessibilityDescription):
+ (WebCore::AccessibilityRenderObject::hasTextAlternative):
+ (WebCore::AccessibilityRenderObject::supportsARIAFlowTo):
+ (WebCore::AccessibilityRenderObject::supportsARIADropping):
+ (WebCore::AccessibilityRenderObject::supportsARIADragging):
+ (WebCore::AccessibilityRenderObject::determineARIADropEffects):
+ (WebCore::AccessibilityRenderObject::isExpanded):
+ (WebCore::AccessibilityRenderObject::isRequired):
+ (WebCore::AccessibilityRenderObject::isSelected):
+ (WebCore::AccessibilityRenderObject::supportsARIAOwns):
+ (WebCore::AccessibilityRenderObject::isEnabled):
+ (WebCore::AccessibilityRenderObject::activeDescendant):
+ (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
+ (WebCore::AccessibilityRenderObject::orientation):
+ (WebCore::AccessibilityRenderObject::canSetExpandedAttribute):
+ (WebCore::AccessibilityRenderObject::canSetValueAttribute):
+
+2010-07-12 Tony Chang <tony@chromium.org>
+
+ Reviewed by David Hyatt.
+
+ crash in FrameView::detachCustomScrollbars
+ https://bugs.webkit.org/show_bug.cgi?id=41196
+
+ Test: scrollbars/hidden-iframe-scrollbar-crash.html
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::detachCustomScrollbars):
+
+2010-07-12 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ HTML tags should break out of foreign content
+ https://bugs.webkit.org/show_bug.cgi?id=42106
+
+ Implement another paragraph of the spec to pass another
+ bunch of foreign content tests.
+
+ This fixes a bunch of tests in html5lib/runner.html.
+ After this change we only have 4 remaining foreign content failures.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+
+2010-07-12 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Darin Fisher.
+
+ Bring bufferData and clear to GLES2 compliant
+ https://bugs.webkit.org/show_bug.cgi?id=41574
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::bufferData): Call validateBufferDataUsage().
+ (WebCore::WebGLRenderingContext::clear): Check mask.
+ (WebCore::WebGLRenderingContext::validateBufferDataUsage): Check usage.
+ * html/canvas/WebGLRenderingContext.h: Declare validateBufferDataUsage.
+
+2010-07-12 Eric Seidel <eric@webkit.org>
+
+ Unreviewed. Attempt to fix Chromium Windows build.
+
+ Always generate SVGNames and MathMLNames for all ports (to support HTML5)
+ https://bugs.webkit.org/show_bug.cgi?id=42050
+
+ Another way to fix this might be to mark all the .in files with
+ svn:eol=native. But fixing the perl to be more robust against
+ stray whitespace seems to be a better long-term fix.
+
+ No functional change, thus no tests.
+
+ * bindings/scripts/InFilesParser.pm:
+
+2010-07-12 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Remove dependency on PlatformString.h in Color.h
+ https://bugs.webkit.org/show_bug.cgi?id=42109
+
+ * platform/graphics/Color.cpp:
+ * platform/graphics/Color.h:
+
+2010-07-12 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, build fix.
+
+ Update HTMLTreeBuilder now that MathMLNames is always generated
+ https://bugs.webkit.org/show_bug.cgi?id=42059
+
+ Fix the Windows project file to build MathMLNames.*.
+ Also added MathMLElementFactory.* which is a NOOP now, but will
+ prevent folks from breaking the build when they turn MathML on.
+
+ * WebCore.vcproj/WebCore.vcproj:
+
+2010-07-12 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Update media element's handling of empty 'src' attribute
+ https://bugs.webkit.org/show_bug.cgi?id=42001
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::src): Return getNonEmptyURLAttribute().
+ (WebCore::HTMLMediaElement::selectMediaResource): Call noneSupported() for empty 'src'.
+ (WebCore::HTMLMediaElement::selectNextSourceChild): Use getNonEmptyURLAttribute() to convert
+ 'src' to URL instead of document()->completeURL(). Don't consider a <source> with an empty 'src'.
+
+ * html/HTMLMediaElement.idl: Add 'NonEmpty' option to 'src' attribute.
+
+ * html/HTMLSourceElement.cpp:
+ (WebCore::HTMLSourceElement::src): Return getNonEmptyURLAttribute().
+ (WebCore::HTMLSourceElement::isURLAttribute): New, 'src' is a URL attribute.
+ * html/HTMLSourceElement.h:
+
+ * html/HTMLSourceElement.idl: Add 'NonEmpty' option to 'src' attribute.
+
+ * html/HTMLVideoElement.cpp:
+ (WebCore::HTMLVideoElement::parseMappedAttribute): Use getNonEmptyURLAttribute() to convert
+ 'poster' to URL instead of document()->completeURL().
+
+ * html/HTMLVideoElement.idl: Add 'NonEmpty' option to 'poster' attribute.
+
+2010-07-12 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] make dist is broken because of missing headers and other miscellaneous reasons
+ https://bugs.webkit.org/show_bug.cgi?id=42107
+
+ * GNUmakefile.am: Remove InspectorFrontend2.idl from the list of IDL files, so
+ that it is not built into libWebCoreJS. Add missing header to the source list.
+ Make sure to distribute the new file: WebCore/inspector/CodeGeneratorInspector.pm.
+
+2010-07-12 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ HTMLTreeBuilder needs to support mixing SVG and MathML content
+ https://bugs.webkit.org/show_bug.cgi?id=42096
+
+ This is just a direct transcription of another paragraph of the
+ HTML5 spec.
+
+ This improved a couple results in html5lib/runner.html, but more
+ work to do yet to pass all the foreign content tests.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processUsingSecondaryInsertionModeAndAdjustInsertionMode):
+ * html/HTMLTreeBuilder.h:
+ * mathml/mathtags.in:
+
+2010-07-12 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Update HTMLTreeBuilder now that MathMLNames is always generated
+ https://bugs.webkit.org/show_bug.cgi?id=42059
+
+ Fix the HTMLTreeBuilder MathML code path to compile and remove
+ the MathML and SVG guards now that SVGNames and MathMLNames are
+ always compiled into ever port after:
+ https://bugs.webkit.org/show_bug.cgi?id=42050
+
+ This fixed a whole bunch of libhtml5 tests now that we have the
+ mathml code paths enabled.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ * page/Frame.cpp:
+ (WebCore::Frame::Frame):
+ - Always init SVGNames and MathML names.
+
+2010-07-12 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Don't go into compositing mode for 0x0 plugins
+ https://bugs.webkit.org/show_bug.cgi?id=34009
+
+ Don't use compositing for small (0-height or width, or 1x1) plugins, or iframes whose
+ height or width is zero.
+
+ Previously we made all compositing decisions inside styleChanged(). However,
+ now that plugin and iframe compositing behavior depends on renderer size, we have
+ to wait until layout before deciding whether to composite these. This behavior
+ change is controlled by the m_compositingDependsOnGeometry flag. When set,
+ updateCompositingLayers() always does a hierarchy update.
+
+ Tests: compositing/iframes/iframe-size-from-zero.html
+ compositing/iframes/iframe-size-to-zero.html
+ compositing/plugins/1x1-composited-plugin.html
+ compositing/plugins/large-to-small-composited-plugin.html
+ compositing/plugins/small-to-large-composited-plugin.html
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::updateCompositingLayers): No longer bail if usesCompositing() is false; we
+ have to always enter updateCompositingLayers().
+ (WebCore::FrameView::repaintFixedElementsAfterScrolling): Ditto
+ (WebCore::FrameView::enterCompositingMode): Remove bogus return of a void.
+
+ * rendering/RenderLayerCompositor.h: Add m_compositingDependsOnGeometry.
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::RenderLayerCompositor): Initialize m_compositingDependsOnGeometry to false.
+ (WebCore::RenderLayerCompositor::updateCompositingLayers): If m_compositingDependsOnGeometry is true,
+ we always need to run through the layer hierarchy looking for things which need to be composited, even if
+ we're not (yet) in compositing mode.
+
+ (WebCore::RenderLayerCompositor::computeCompositingRequirements): Because we can enter compositing mode
+ on the fly inside updateCompositingLayers() now, the state of willBeComposited needs to be updated
+ when processing the root layer, for the case where the compositing mode changes.
+
+ (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Set the m_compositingDependsOnGeometry
+ flag if we see a potentially-composited plugin. Once we have layout information, only composite the plugin
+ if height * width > 1.
+
+ (WebCore::RenderLayerCompositor::requiresCompositingForIFrame): Set the m_compositingDependsOnGeometry
+ flag if we see a potentially-composited iframe. Once we have layout information, only composite the plugin
+ if height or width is greater than zero.
+
+2010-07-12 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Need to do a layout when RenderLayers come and go because of compositing
+ https://bugs.webkit.org/show_bug.cgi?id=42108
+
+ If we create or destroy RenderLayers for reasons other than style changes
+ (e.g. because of composited iframes or plugins), then we need to ensure
+ that we do a layout.
+
+ Test: compositing/iframes/layout-on-compositing-change.html
+
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::adjustStyleDifference):
+
+2010-07-11 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Always generate SVGNames and MathMLNames for all ports (to support HTML5)
+ https://bugs.webkit.org/show_bug.cgi?id=42050
+
+ Historically, FOONames has only been generate when ENABLE(FOO) is defined.
+ However, for HTML5 parser support, we need to have access to the SVG
+ and MathML tag names regardless of whether we the engine is configured
+ to render SVG or MathML content.
+
+ This change enables generation of SVGNames and MathMLNames on all ports and
+ makes it so that ports can include FOOElementFactory.* regardless of whether
+ ENABLE(FOO) is defined (and have it do the right thing).
+
+ No functional change (yet) so no tests.
+
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.pri:
+ * dom/make_names.pl:
+
+2010-07-10 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ make_names.pl should always generate all names in Names.* files
+ https://bugs.webkit.org/show_bug.cgi?id=42023
+
+ Only the *ElementFactory files need to have conditional contents
+ based on enabled features. WebCore should always have all known
+ names for SVG, MathML, XML, XLink, HTML, etc. generated in the
+ various *Names files, even if features are disabled.
+
+ make_names.pl is kinda a big hack at this point. I tried to clean
+ up a little as I went. The way I made *Names include all names was to
+ read the .in files twice, once using the preprocessor and once without.
+
+ * dom/make_names.pl:
+
+2010-07-12 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Oliver Hunt.
+
+ Canvas: Move fillRect() save/restore into GraphicsContext implementations
+ https://bugs.webkit.org/show_bug.cgi?id=42088
+
+ Saving the platform painter state is an expensive operation,
+ so don't do it in fillRect() for platforms that don't need it. (CG, Qt)
+
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ (WebCore::CanvasRenderingContext2D::fillRect):
+ * platform/graphics/cairo/GraphicsContextCairo.cpp:
+ (WebCore::GraphicsContext::fillRect):
+ * platform/graphics/skia/GraphicsContextSkia.cpp:
+ (WebCore::GraphicsContext::fillRect):
+ * platform/graphics/wince/GraphicsContextWince.cpp:
+ (WebCore::GraphicsContext::fillRect):
+ * platform/graphics/wx/GraphicsContextWx.cpp:
+ (WebCore::GraphicsContext::fillRect):
+
+2010-07-12 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Ensure that a cache policy that forces validation is cleared once
+ the load event is fired, rather than only doing so at the next
+ navigation. This leads to a lot of unnecessary load on AJAX-y
+ websites.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41813
+
+ Test: http/tests/xmlhttprequest/cache-headers-after-reload.html
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::handledOnloadEvents): Reset m_loadType to FrameLoadTypeStandard.
+ (WebCore::FrameLoader::addExtraFieldsToRequest): Only respect the original request's cache policy if the
+ DocumentLoader is still loading, and handle the other cache policy settings that were scattered around the loader.
+ (WebCore::FrameLoader::loadResourceSynchronously): Merge cachePolicy setting into FrameLoader::addExtraFieldsToRequest.
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::create): Merge cachePolicy setting into FrameLoader::addExtraFieldsToRequest.
+
+2010-07-12 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Oliver Hunt.
+
+ CSS color parsing optimizations
+ https://bugs.webkit.org/show_bug.cgi?id=42073
+
+ - Avoid instantiating a CSSParser in parseColor() unless necessary.
+ - Fixed hex color fast-path to support strings starting with '#'.
+ - Avoid allocating a new string for the value part of a '#' color.
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseColor):
+ * platform/graphics/Color.cpp:
+ (WebCore::Color::parseHexColor):
+ (WebCore::Color::Color):
+ * platform/graphics/Color.h:
+
+2010-07-09 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=13075
+ XMLHttpRequest with failed authentication should set status to 401
+
+ https://bugs.webkit.org/show_bug.cgi?id=6871
+ <rdar://problem/3363403> 401 error page is never shown
+
+ * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::receivedCredential):
+ Added a comment explaining why we handle empty credentials differently here.
+
+ * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::receivedCredential):
+ Bring this code in sync with Mac.
+
+2010-07-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add a PluginController class, use it for invalidation and getting the user agent
+ https://bugs.webkit.org/show_bug.cgi?id=42084
+
+ * WebCore.exp.in:
+ Export Widget::convertToContainingWindow.
+
+2010-07-12 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Dragging within webkit with a drag created via Javascript ends up misinterpreting the data
+ https://bugs.webkit.org/show_bug.cgi?id=41457
+
+ Treat non-special-cased mime-types as Unicode strings in ClipboardQt's getData()
+ Fixes corruption when retrieving data that was set with anything other than text/plain
+
+ Also use QMimeData::setHtml() when applicable to be consistent with PasteboardQt.
+
+ * platform/qt/ClipboardQt.cpp:
+ (WebCore::isHtmlMimeType):
+ (WebCore::ClipboardQt::getData):
+ (WebCore::ClipboardQt::setData):
+
+2010-07-12 Steve Block <steveblock@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ add ANDROID to STORE_FONT_CUSTOM_PLATFORM_DATA
+ https://bugs.webkit.org/show_bug.cgi?id=32273
+
+ Tested by existing tests, just adding ANDROID to the list of platforms that use this feature.
+
+ * loader/CachedFont.cpp:
+
+2010-07-12 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed.
+
+ [EFL] Move ScriptConcotrollerEfl.cpp from CMakeLists.txt to
+ CMakeListsEfl.txt.
+
+ * CMakeLists.txt:
+ * CMakeListsEfl.txt:
+
+2010-07-12 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed build fix after r60050.
+
+ * CMakeLists.txt: Add WebCore/bindings to the include path.
+
+2010-07-09 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Crashes when going back with page cache in unknown circunstances
+ https://bugs.webkit.org/show_bug.cgi?id=41710
+
+ Could not yet find a way to reproduce this in a layout test. The
+ issue is document being NULL, so this NULL-check should be enough
+ to get rid of the crash. We are working on trying to find a better
+ solution for these null cases, like attaching the document earlier
+ when openning a cached page.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::sendScrollEvent):
+
+2010-07-12 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ [Chromium] Crash when stepping on a breakpoint while debugging Web Inspector
+ https://bugs.webkit.org/show_bug.cgi?id=41958
+
+ * page/PageGroupLoadDeferrer.cpp:
+ (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
+ * page/PageGroupLoadDeferrer.h:
+
+2010-07-12 François Sausset <sausset@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Make the mathsize MathML attribute handle values in em, px, pt,...
+ https://bugs.webkit.org/show_bug.cgi?id=42067
+
+ Test: mathml/presentation/attributes.xhtml
+
+ * css/mathml.css:
+ (math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"]):
+ (math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"]):
+ (math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"]):
+ * mathml/MathMLElement.cpp:
+ (WebCore::MathMLElement::parseMappedAttribute):
+
+2010-07-12 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ Fix compilation with sealed GTK+.
+
+ * platform/gtk/GtkVersioning.h:
+ * platform/gtk/PasteboardHelper.cpp:
+ (WebCore::PasteboardHelper::fillDataObjectFromDropData):
+
+2010-07-12 François Sausset <sausset@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix a bug preventing msqrt and mfrac to use style color to draw themselves.
+ In mfrac, the fraction bar is now using the color defined by the element style instead of black.
+ In msqrt, the radical was always drawn in black due to a colorSpace problem.
+ https://bugs.webkit.org/show_bug.cgi?id=41889
+
+ Test: mathml/presentation/roots.xhtml
+ Test: mathml/presentation/fractions.xhtml
+
+ * mathml/RenderMathMLFraction.cpp:
+ (WebCore::RenderMathMLFraction::paint):
+ * mathml/RenderMathMLSquareRoot.cpp:
+ (WebCore::RenderMathMLSquareRoot::paint):
+
+2010-07-12 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Antti Koivisto.
+
+ Canvas: arc() with startAngle == endAngle shouldn't add to the path
+ https://bugs.webkit.org/show_bug.cgi?id=41420
+
+ Spec link:
+ http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-stroke
+
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ (WebCore::CanvasRenderingContext2D::arc):
+
+2010-07-12 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ Update padding on Windows?
+ https://bugs.webkit.org/show_bug.cgi?id=38016
+
+ Remove internal padding and add 1px vertical padding for Windows.
+
+ * css/themeWin.css:
+ (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button):
+ * rendering/RenderButton.cpp:
+ (WebCore::RenderButton::setupInnerStyle):
+ * rendering/RenderTheme.h:
+ * rendering/RenderThemeWin.cpp:
+ * rendering/RenderThemeWin.h:
+ * rendering/RenderThemeWince.cpp:
+ * rendering/RenderThemeWince.h:
+
+2010-07-12 Pavel Feldman <pfeldman@chromium.org>
+
+ Not reviewed. Chromium tests fix.
+
+ [Chromium, V8] r63057 regressed url tests.
+
+ https://bugs.webkit.org/show_bug.cgi?id=42063
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+
+2010-07-12 Steve Block <steveblock@google.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ XPath substring function does not correctly handle non-positive values for the position argument
+ https://bugs.webkit.org/show_bug.cgi?id=41913
+
+ This patch changes the behavior of the XPath evaluate function when a non-positive
+ position argument is supplied and no length argument is supplied. In this case,
+ we reset the position to 1. This follows the spec and matches the current behaviour
+ when a length argument is supplied.
+
+ Test: fast/xpath/substring-non-positive-postion.html
+
+ * xml/XPathFunctions.cpp:
+ (WebCore::XPath::FunSubstring::evaluate):
+
+2010-06-27 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Dumitru Daniliuc.
+
+ Implement IDBObjectStore.get/set/remove
+ https://bugs.webkit.org/show_bug.cgi?id=41250
+
+ Implement these functions in IDBObjectStore,
+ add plumbing, teach IDBAny/Callbacks how to deal
+ with IDBKey, and a few small bits of cleanup.
+
+ Test: Modified existing test to provide basic coverage.
+ Will add much more extensive layout test coverage
+ in future patches.
+
+ * Android.derived.jscbindings.mk:
+ * Android.derived.v8bindings.mk:
+ * Android.jscbindings.mk:
+ * Android.mk:
+ * Android.v8bindings.mk:
+ * CMakeLists.txt:
+ * WebCore.gypi:
+ * WebCore.pri:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSIDBAnyCustom.cpp:
+ (WebCore::toJS):
+ * bindings/v8/custom/V8IDBAnyCustom.cpp:
+ (WebCore::toV8):
+ * storage/IDBAny.cpp:
+ (WebCore::IDBAny::idbKey):
+ (WebCore::IDBAny::set):
+ * storage/IDBAny.h:
+ (WebCore::IDBAny::):
+ * storage/IDBAny.idl:
+ * storage/IDBCallbacks.h:
+ * storage/IDBDatabaseRequest.h:
+ * storage/IDBDatabaseRequest.idl:
+ * storage/IDBKeyRange.h:
+ * storage/IDBObjectStore.h:
+ (WebCore::IDBObjectStore::):
+ * storage/IDBObjectStoreImpl.cpp:
+ (WebCore::IDBObjectStoreImpl::IDBObjectStoreImpl):
+ (WebCore::IDBObjectStoreImpl::get):
+ (WebCore::IDBObjectStoreImpl::set):
+ (WebCore::IDBObjectStoreImpl::remove):
+ * storage/IDBObjectStoreImpl.h:
+ * storage/IDBObjectStoreRequest.cpp:
+ (WebCore::IDBObjectStoreRequest::get):
+ (WebCore::IDBObjectStoreRequest::add):
+ (WebCore::IDBObjectStoreRequest::modify):
+ (WebCore::IDBObjectStoreRequest::addOrModify):
+ (WebCore::IDBObjectStoreRequest::remove):
+ * storage/IDBObjectStoreRequest.h:
+ * storage/IDBObjectStoreRequest.idl:
+ * storage/IDBRequest.cpp:
+ (WebCore::IDBRequest::onSuccess):
+ * storage/IDBRequest.h:
+
+2010-07-11 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Implement animation-related methods for WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=42053
+
+ * WebCore.exp.in: Export Document::getElementById for WebKit2's benefit.
+
+2010-07-11 Adam Barth <abarth@webkit.org>
+
+ Rubber-stamped by Eric Seidel
+
+ Add a complete list of the HTML5 entities in JSON format.
+
+ * html/HTMLEntityNames.json: Added.
+
+2010-07-11 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] WebKitWebView should support drops
+ https://bugs.webkit.org/show_bug.cgi?id=39843
+
+ Add support for dropping content onto GTK+ WebViews.
+
+ No new tests, as the DRT does not support simulating drops yet.
+
+ * platform/gtk/ClipboardUtilitiesGtk.cpp:
+ (WebCore::dragOperationToGdkDragAction): Added.
+ (WebCore::gdkDragActionToDragOperation): Properly detect DragOperationEvery.
+ * platform/gtk/ClipboardUtilitiesGtk.h: Add declaration for dragOperationToGdkDragAction.
+ * platform/gtk/PasteboardHelper.cpp:
+ Add new target atom and rename the markup target type to match the others.
+ Add a method which fills a data object from drop data.
+ (WebCore::PasteboardHelper::initializeTargetList): Add support for new atoms.
+ (WebCore::selectionDataToUTF8String): Added this helper.
+ (WebCore::PasteboardHelper::getClipboardContents): Use the selectionDataToUTF8String helper.
+ (WebCore::PasteboardHelper::targetListForDataObject): Change to reflect markup atom rename.
+ (WebCore::PasteboardHelper::fillDataObjectFromDropData): Added.
+ (WebCore::PasteboardHelper::dropAtoms): Added.
+ * platform/gtk/PasteboardHelper.h: Add declarations of new methods.
+
+2010-07-10 Darin Adler <darin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Enhance content attribute reflection for URL attributes, including adding a non-empty option
+ https://bugs.webkit.org/show_bug.cgi?id=42040
+
+ Test: fast/dom/URL-attribute-reflection.html
+
+ Changed syntax from [ReflectURL] to [Reflect,URL] and also added support for
+ a new option, NonEmpty, which implements the non-empty URL concept from the
+ HTML5 specification.
+
+ * bindings/scripts/CodeGenerator.pm: Changed code to expect the Reflect and URL
+ extended attributes to come in separately. The URL one simply means "the string
+ of this attribute is a URL", since we don't have a distinct type for URL. Also
+ added a new NonEmpty extended attribute.
+
+ * bindings/scripts/CodeGeneratorJS.pm: Removed now-unneeded code to handle ReflectURL.
+ * bindings/scripts/CodeGeneratorV8.pm: Ditto.
+
+ * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated for new added test cases
+ and the fix I made to the reflectedCustomURLAttr test.
+ * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
+ * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
+ * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
+ * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
+ * bindings/scripts/test/JS/JSTestObj.h: Ditto.
+ * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
+ * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
+ * bindings/scripts/test/V8/V8TestObj.cpp: Ditto. Also, for some reason the V8
+ bindig writes out the keywords into the generated file as comments, so the keyword
+ change had a direct efffect on the output file.
+
+ * bindings/scripts/test/TestObj.idl: Changed the test cases for ReflectURL to use
+ the new syntax. Added test cases for NonEmpty. Fixed the name of
+ reflectedNonEmptyURLAttr, which accidentally was repeating reflectedURLAttr
+ instead; never noticed because we never compile the test output.
+
+ * dom/Element.cpp:
+ (WebCore::Element::getNonEmptyURLAttribute): Added. For use by NonEmpty and also
+ by any code that wants to implement the non-empty URL content attribute semantic.
+ * dom/Element.h: Ditto.
+
+ * html/HTMLAnchorElement.idl: Use Reflect,URL instead of ReflectURL.
+ * html/HTMLAreaElement.idl: Ditto.
+ * html/HTMLFrameElement.idl: Ditto.
+ * html/HTMLImageElement.idl: Ditto.
+ * html/HTMLInputElement.idl: Ditto.
+ * html/HTMLLinkElement.idl: Ditto.
+ * html/HTMLMediaElement.idl: Ditto.
+ * html/HTMLObjectElement.idl: Ditto.
+ * html/HTMLScriptElement.idl: Ditto.
+ * html/HTMLVideoElement.idl: Ditto.
+
+2010-07-10 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Add missing derrived sources to xcode project
+ https://bugs.webkit.org/show_bug.cgi?id=42034
+
+ This allows --web-timing to work with build-webkit on OSX with JSC.
+ This should have been done in bug 41442.
+
+ No new tests because no new functionality.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-07-10 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Don't initialize plug-ins until allowed by the page
+ https://bugs.webkit.org/show_bug.cgi?id=42033
+
+ * WebCore.exp.in:
+ Export Document::addMediaCanStartListener and Document::removeMediaCanStartListener.
+
+2010-07-10 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=42021
+ isEqualNode should work for DocumentType nodes
+
+ Test: fast/dom/Node/isEqualNode.html
+
+ * dom/Node.cpp:
+ (WebCore::Node::isEqualNode): Add DocumentType logic from the DOM3 spec.
+
+2010-07-10 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Adam Barth.
+
+ Move enum ReasonForCallingCanExecuteScripts to header ScriptControllerBase.h
+ https://bugs.webkit.org/show_bug.cgi?id=39339
+
+ Moved the enum ReasonForCallingCanExecuteScripts, which was
+ defined in both the JSC and V8 ScriptController.h file, into
+ a shared file called ScriptControllerBase.h.
+
+ No functionality was changed, so no new tests.
+
+ * GNUmakefile.am: Added file bindings/ScriptControllerBase.h.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.vcproj/WebCoreCommon.vsprops: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * bindings/ScriptControllerBase.h: Added.
+ (WebCore::):
+ * bindings/js/ScriptController.h: #include ScriptControllerBase.h
+ * bindings/v8/ScriptController.h: Ditto.
+
+2010-07-10 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ <rdar://problem/8153214> Continuation outlines in layers do not paint correctly
+
+ Test: fast/inline/continuation-outlines-with-layers-2.html
+
+ Continuation outlines are normally painted by the containing block. However, when the
+ block and the inline are not enclosed by the same self-painting layer, the inline has to
+ paint its own outlines. This was handled correctly only for the case where the inline had
+ its own self-painting layer, but now when an ancestor inline had the self-painting layer.
+
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::paint): Instead of testing for having a self-painting layer, test
+ whether any intermediate box between the inline and the containing block has a self-painting
+ layer.
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::paintObject): Ditto.
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::enclosingBoxModelObject): Added this utility method.
+ * rendering/RenderObject.h:
+
+2010-07-10 François Sausset <sausset@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Build fix: syntax and typo issues
+ https://bugs.webkit.org/show_bug.cgi?id=41859
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+
+2010-07-10 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ HTMLTreeBuilder needs adjustForeignAttributes support
+ https://bugs.webkit.org/show_bug.cgi?id=42022
+
+ To add adjust foreign attributes support I had to add an
+ AtomicString (prefixed name) to QualifiedName hash. Once I had
+ done that, I decided it would be best for the other "adjust" functions
+ to share the same hash logic, so I moved them to using the same
+ AtomicString -> QualifiedName hash as well.
+
+ Tested by html5lib/runner.html
+
+ * dom/Attribute.h:
+ (WebCore::Attribute::parserSetName):
+ * html/HTMLTreeBuilder.cpp:
+
+2010-07-10 Rob Buis <rwlbuis@gmail.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41978
+ Remove namespace prefixes from idl files
+
+ No new tests, idl syntax fixes.
+
+ * css/CSSImportRule.idl:
+ * css/CSSMediaRule.idl:
+ * css/CSSStyleSheet.idl:
+ * css/CSSVariablesRule.idl:
+ * svg/SVGAnimatedString.idl:
+ * svg/SVGColor.idl:
+ * svg/SVGDocument.idl:
+ * svg/SVGLangSpace.idl:
+ * svg/SVGSVGElement.idl:
+ * svg/SVGStringList.idl:
+ * svg/SVGStylable.idl:
+ * svg/SVGStyleElement.idl:
+ * svg/SVGTests.idl:
+ * svg/SVGZoomEvent.idl:
+ * xml/XPathEvaluator.idl:
+
+2010-07-10 Dumitru Daniliuc <dumi@chromium.org>
+
+ Unreviewed, GTK build fix.
+
+ * bindings/gobject/GObjectEventListener.h:
+
+2010-07-10 Dumitru Daniliuc <dumi@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Remove unnecessary includes in header files in WebCore/dom.
+ https://bugs.webkit.org/show_bug.cgi?id=41941
+
+ * css/StyleMedia.h:
+ * dom/BeforeLoadEvent.h:
+ * dom/CustomEvent.h:
+ * dom/DOMStringMap.h:
+ * dom/DeviceOrientationEvent.h:
+ * dom/EventListener.h:
+ * dom/MessagePort.h:
+ * dom/Node.cpp:
+ * dom/NodeFilter.h:
+ * dom/NodeRareData.h:
+ * dom/RegisteredEventListener.h:
+ * dom/SelectorNodeList.cpp:
+ * dom/SelectorNodeList.h:
+ * dom/StyleElement.h:
+ * dom/Traversal.h:
+
+2010-07-09 Tony Chang <tony@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ crash in WebCore::CompositeEditCommand::splitTreeToNode when indenting pre
+ https://bugs.webkit.org/show_bug.cgi?id=38231
+
+ Test: editing/execCommand/indent-pre.html
+
+ * editing/IndentOutdentCommand.cpp:
+ (WebCore::countParagraphs):
+ (WebCore::IndentOutdentCommand::indentRegion): Split text nodes into one node per paragraph
+ so moveParagraph doesn't get confused.
+ (WebCore::IndentOutdentCommand::splitTextNodes):
+ * editing/IndentOutdentCommand.h:
+
+2010-07-09 Erik Arvidsson <arv@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Computed style is not implemented for padding-start, padding-end, margin-start, margin-end
+ https://bugs.webkit.org/show_bug.cgi?id=41496
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+ * css/CSSProperty.cpp:
+ (WebCore::CSSProperty::resolveDirectionAwareProperty): This function resolves the property ID for a direction aware property.
+ * css/CSSProperty.h:
+ * css/CSSStyleSelector.cpp: Use helper function.
+ (WebCore::CSSStyleSelector::applyProperty):
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ HTML5 tree builder should pass some LayoutTests
+ https://bugs.webkit.org/show_bug.cgi?id=41991
+
+ Before this patch, we weren't attaching text nodes to the render tree,
+ which turns out to be important. :)
+
+ This patch fixes more than 10,000 LayoutTests.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::attach):
+ (WebCore::HTMLConstructionSite::attachAtSite):
+
+2010-07-09 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ [WINCE] Buildfix for TextEncodingRegistry
+ https://bugs.webkit.org/show_bug.cgi?id=41992
+
+ Renamed TextCodecWince to TextCodecWinCE.
+
+ * platform/text/TextEncodingRegistry.cpp:
+ (WebCore::buildBaseTextCodecMaps):
+ (WebCore::extendTextCodecMaps):
+
+2010-07-09 Leon Clarke <leonclarke@google.com>
+
+ Reviewed by Adam Barth.
+
+ add support for link prefetching
+ https://bugs.webkit.org/show_bug.cgi?id=3652
+
+ Test: fast/dom/HTMLLinkElement/prefetch.html
+
+ * Configurations/FeatureDefines.xcconfig:
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::tokenizeRelAttribute):
+ (WebCore::HTMLLinkElement::process):
+ * html/HTMLLinkElement.h:
+ (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
+ * loader/Cache.cpp:
+ (WebCore::createResource):
+ * loader/CachedResource.cpp:
+ (WebCore::CachedResource::data):
+ (WebCore::CachedResource::didAddClient):
+ * loader/CachedResource.h:
+ (WebCore::CachedResource::):
+ (WebCore::CachedResource::error):
+ (WebCore::CachedResource::isPrefetch):
+ (WebCore::CachedResource::schedule):
+ * loader/CachedScript.cpp:
+ * loader/CachedScript.h:
+ * loader/DocLoader.cpp:
+ (WebCore::DocLoader::requestLinkPrefetch):
+ (WebCore::DocLoader::canRequest):
+ (WebCore::DocLoader::incrementRequestCount):
+ (WebCore::DocLoader::decrementRequestCount):
+ * loader/DocLoader.h:
+ * loader/loader.cpp:
+ (WebCore::cachedResourceTypeToTargetType):
+ (WebCore::Loader::determinePriority):
+ (WebCore::Loader::load):
+ (WebCore::Loader::Host::servePendingRequests):
+ (WebCore::Loader::Host::didFinishLoading):
+ (WebCore::Loader::Host::didFail):
+ (WebCore::Loader::Host::didReceiveResponse):
+ (WebCore::Loader::Host::cancelPendingRequests):
+ * loader/loader.h:
+ (WebCore::Loader::):
+ * platform/network/ResourceRequestBase.h:
+ (WebCore::ResourceRequestBase::):
+
+2010-07-09 James Robinson <jamesr@chromium.org>
+
+ Unreviewed build fix. Add #include to pick up ExceptionCode values for config (like Qt) where it's not picked up indirectly.
+
+ * html/HTMLCanvasElement.cpp:
+
+2010-07-09 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Removes CanvasSurface and moves all of its functionality to HTMLCanvasElement.
+ https://bugs.webkit.org/show_bug.cgi?id=42005
+
+ http://trac.webkit.org/changeset/55201 introduced a new base class for HTMLCanvasElement called CanvasSurface.
+ The intention was that this would allow for code sharing with the then-proposed OffscreenCanvas. However,
+ there is no OffscreenCanvas and there's unlikely to be one soon. Additionally CanvasSurface breaks
+ encapsulation pretty badly by doing "static_cast<HTMLCanvasElement* const>(this)". Until an abstraction is
+ really needed we should just use HTMLCanvasElement when we want to talk about a canvas.
+
+ This patch moves all of CanvasSurface's functionality back up to HTMLCanvasElement and reorders the header
+ to be a bit more logical.
+
+ Refactor with no behavior change, thus no new tests.
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/CanvasSurface.cpp: Removed.
+ * dom/CanvasSurface.h: Removed.
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::HTMLCanvasElement):
+ (WebCore::HTMLCanvasElement::willDraw):
+ (WebCore::HTMLCanvasElement::setSurfaceSize):
+ (WebCore::HTMLCanvasElement::toDataURL):
+ (WebCore::HTMLCanvasElement::convertLogicalToDevice):
+ (WebCore::HTMLCanvasElement::securityOrigin):
+ (WebCore::HTMLCanvasElement::styleSelector):
+ (WebCore::HTMLCanvasElement::createImageBuffer):
+ (WebCore::HTMLCanvasElement::drawingContext):
+ (WebCore::HTMLCanvasElement::buffer):
+ (WebCore::HTMLCanvasElement::baseTransform):
+ * html/HTMLCanvasElement.h:
+ (WebCore::HTMLCanvasElement::setObserver):
+ (WebCore::HTMLCanvasElement::width):
+ (WebCore::HTMLCanvasElement::height):
+ (WebCore::HTMLCanvasElement::size):
+ (WebCore::HTMLCanvasElement::toDataURL):
+ (WebCore::HTMLCanvasElement::setOriginTainted):
+ (WebCore::HTMLCanvasElement::originClean):
+ (WebCore::HTMLCanvasElement::hasCreatedImageBuffer):
+
+2010-07-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Calling layoutTestController.layerTreeAsText() should update layout
+ https://bugs.webkit.org/show_bug.cgi?id=41818
+
+ Need to call updateLayout() before we check for any layers, not after,
+ since layout will update compositing, and may create layers.
+
+ * page/Frame.cpp:
+ (WebCore::Frame::layerTreeAsText):
+
+2010-07-09 Kenneth Russell <kbr@google.com>
+
+ Reviewed by Nate Chapin.
+
+ bufferSubData causes crash in WebGLBuffer::associateBufferSubData
+ https://bugs.webkit.org/show_bug.cgi?id=42004
+
+ Test: fast/canvas/webgl/index-validation-crash-with-buffer-sub-data.html
+
+ * html/canvas/WebGLBuffer.cpp:
+ (WebCore::WebGLBuffer::associateBufferData):
+ - Allocate m_elementArrayBuffer for entry point taking only size.
+ Guard against allocation failures of m_elementArrayBuffer.
+ (WebCore::WebGLBuffer::associateBufferSubData):
+ - Guard against any possibility of crashes due to m_elementArrayBuffer being NULL.
+
+2010-07-09 Dumitru Daniliuc <dumi@chromium.org>
+
+ Unreviewed, but pre-approved by Eric Seidel.
+
+ Remove unnecessary includes in header files in WebCore/css.
+ https://bugs.webkit.org/show_bug.cgi?id=41941
+
+ * css/CSSComputedStyleDeclaration.h:
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::getFontData):
+ * css/CSSFontFaceSource.h:
+ * css/CSSPrimitiveValueMappings.h:
+ * css/StyleMedia.h:
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Get rid of manual case maps in HTMLTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=42000
+
+ No functional change, thus no tests.
+
+ * html/HTMLTreeBuilder.cpp:
+
+2010-07-09 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Implement performance.timing.navigationStart
+ https://bugs.webkit.org/show_bug.cgi?id=41815
+
+ See: http://dev.w3.org/2006/webapi/WebTiming/#nt-navigation-start
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::loadWithDocumentLoader):
+ * loader/FrameLoaderTypes.h:
+ (WebCore::FrameLoadTimeline::FrameLoadTimeline):
+ * page/Timing.cpp:
+ (WebCore::Timing::navigationStart):
+
+2010-07-09 Jesus Sanchez-Palencia <jesus.palencia@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] GraphicsLayerQt must have syncCompositingStateForThisLayerOnly() implemented
+ https://bugs.webkit.org/show_bug.cgi?id=41954
+
+ Add GraphicsLayerQt::syncCompositingStateForThisLayerOnly, a non-recursive
+ implementation of GraphicsLayerQt::syncCompositingState and which targets
+ the current layer only.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::GraphicsLayerQt::syncCompositingStateForThisLayerOnly):
+ * platform/graphics/qt/GraphicsLayerQt.h:
+
+2010-07-09 David Kozub <zub@linux.fjfi.cvut.cz>
+
+ Reviewed by Darin Adler.
+
+ Fix build by adding missing html/TimeRanges.idl to CMakeLists.txt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41945
+
+ No functional changes, thus no tests.
+
+ * CMakeLists.txt:
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Fix SVG tag name casing for HTMLTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=41998
+
+ Tested by html5lib/runner.html
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::):
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Implement SVG attribute case mapping for HTMLTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=41949
+
+ Tested by html5lib/runner.html.
+
+ * html/HTMLTreeBuilder.cpp:
+
+2010-07-09 Andy Estes <aestes@apple.com>
+
+ Reviewed by Adele Peterson.
+
+ Remove the workaround for a Core Animation bug on platforms where the
+ bug has been fixed.
+ https://bugs.webkit.org/show_bug.cgi?id=41927
+ <rdar://problem/7920153>
+
+ * platform/graphics/mac/GraphicsLayerCA.mm:
+ (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Add
+ a compile-time check for platforms that have a Core Animation bug that
+ needs working around.
+
+2010-07-08 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ Implement unloadEventEnd, loadEventStart, and loadEventEnd for Web Timing
+ https://bugs.webkit.org/show_bug.cgi?id=41332
+
+ Test: fast/dom/webtiming.html
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::stopLoading):
+ (WebCore::FrameLoader::loadWithDocumentLoader):
+ * loader/FrameLoader.h:
+ (WebCore::FrameLoader::frameLoadTimeline):
+ * loader/FrameLoaderTypes.h:
+ (WebCore::FrameLoadTimeline::FrameLoadTimeline):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::dispatchLoadEvent):
+ * page/Timing.cpp:
+ (WebCore::Timing::navigationStart):
+ (WebCore::Timing::unloadEventEnd):
+ (WebCore::Timing::loadEventStart):
+ (WebCore::Timing::loadEventEnd):
+ * page/Timing.h:
+ * page/Timing.idl:
+
+2010-07-09 Dumitru Daniliuc <dumi@chromium.org>
+
+ Unreviewed, but pre-approved by Eric Seidel.
+
+ Remove all unnecessary includes from the header files in WebCore/accessibility/.
+ https://bugs.webkit.org/show_bug.cgi?id=41941
+
+ * accessibility/AXObjectCache.h:
+ * accessibility/AccessibilityListBox.cpp:
+ * accessibility/AccessibilityListBox.h:
+ * accessibility/AccessibilityMenuList.h:
+ * accessibility/mac/AccessibilityObjectWrapper.h:
+
+2010-07-09 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Kent Tamura.
+
+ [WINCE] Buildfix for EventHandlerWin
+ https://bugs.webkit.org/show_bug.cgi?id=41909
+
+ Use Clipboard.h instead of ClipboardWin.h on WinCE.
+
+ * page/win/EventHandlerWin.cpp:
+
+2010-07-09 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62946.
+ http://trac.webkit.org/changeset/62946
+ https://bugs.webkit.org/show_bug.cgi?id=41965
+
+ AppCache inspector support should be enabled in WebKit ToT.
+ (Requested by pfeldman_ on #webkit).
+
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel):
+ (WebInspector.StoragePanel.prototype.reset):
+ (WebInspector.StoragePanel.prototype.addApplicationCache):
+
+2010-07-09 François Sausset <sausset@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Implement MathML mathcolor & mathbackground attributes
+ https://bugs.webkit.org/show_bug.cgi?id=41895
+
+ Test: mathml/presentation/attributes.xhtml
+
+ * dom/MappedAttributeEntry.h:
+ (WebCore::):
+ * mathml/MathMLElement.cpp:
+ (WebCore::MathMLElement::MathMLElement):
+ (WebCore::MathMLElement::mapToEntry):
+ (WebCore::MathMLElement::parseMappedAttribute):
+ * mathml/MathMLElement.h:
+ * mathml/mathattrs.in:
+
+2010-07-09 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by David Levin.
+
+ Fix characters with unicode-bidi-mirror property are not correctly
+ mirrored in Linux.
+ https://bugs.webkit.org/show_bug.cgi?id=41305
+
+ Since harfbuzz does not do mirroring, chromium should iterate each
+ character in the string and mirror it if needed before passing the
+ string to harfbuzz for shaping.
+
+ Test: fast/text/international/bidi-mirror-he-ar.html
+
+ * platform/graphics/chromium/FontLinux.cpp:
+ (WebCore::TextRunWalker::TextRunWalker):
+ (WebCore::TextRunWalker::~TextRunWalker):
+ (WebCore::TextRunWalker::mirrorCharacters):
+
+
+2010-07-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Instantiate Netscape plug-ins, pass geometry information to Plugin
+ https://bugs.webkit.org/show_bug.cgi?id=41960
+
+ * WebCore.exp.in:
+ Export ScrollView::contentsToWindow.
+
+2010-07-09 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Kent Tamura.
+
+ [WINCE] Buildfix for FrameWince after r47440
+ https://bugs.webkit.org/show_bug.cgi?id=41904
+
+ * page/wince/FrameWince.cpp: Added property svn:eol-style.
+ (WebCore::computePageRectsForFrame):
+ (WebCore::imageFromSelection):
+
+2010-07-09 Vitaly Repeshko <vitalyr@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ [v8] Call JS gc in a fresh context to avoid retaining the current one.
+ https://bugs.webkit.org/show_bug.cgi?id=41963
+ http://crbug.com/46571
+
+ * bindings/v8/ScriptController.cpp:
+ (WebCore::ScriptController::collectGarbage):
+
+2010-07-09 Kenneth Russell <kbr@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ Crash with uniform array test
+ https://bugs.webkit.org/show_bug.cgi?id=36028
+
+ * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
+ (WebCore::vertexAttribAndUniformHelperf):
+ (WebCore::uniformHelperi):
+ (WebCore::uniformMatrixHelper):
+ - Fixed type tests and casting of incoming arrays.
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::getUniform):
+ - Fixed crash when null WebGLUniform is passed to getUniform.
+
+2010-07-09 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX: text editing not spoken by VO on web view contenteditable textbox
+ https://bugs.webkit.org/show_bug.cgi?id=41912
+
+ Test: platform/mac/accessibility/selection-value-changes-for-aria-textbox.html
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::renderObjectIsObservable):
+
+2010-07-09 Michael Nordman <michaeln@google.com>
+
+ Reviewed by Dumitru Daniliuc.
+
+ Use class ProgressEvent when raising appcache related progress events and
+ set the 'total', 'loaded', and 'lengthComputable' attributes.
+ Also raise the final progress event with the 'total' and 'loaded' attribute
+ values are equal to one another to keep pace with the spec for this feature.
+ https://bugs.webkit.org/show_bug.cgi?id=37602
+
+ Test: http/tests/appcache/progress-counter.html
+
+ * loader/appcache/ApplicationCacheGroup.cpp:
+ (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
+ (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
+ (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
+ (WebCore::ApplicationCacheGroup::startLoadingEntry):
+ (WebCore::CallCacheListenerTask::create):
+ (WebCore::CallCacheListenerTask::performTask):
+ (WebCore::CallCacheListenerTask::CallCacheListenerTask):
+ (WebCore::ApplicationCacheGroup::postListenerTask):
+ * loader/appcache/ApplicationCacheGroup.h:
+ (WebCore::ApplicationCacheGroup::postListenerTask):
+ * loader/appcache/ApplicationCacheHost.cpp:
+ (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
+ (WebCore::ApplicationCacheHost::stopDeferringEvents):
+ (WebCore::ApplicationCacheHost::dispatchDOMEvent):
+ * loader/appcache/ApplicationCacheHost.h:
+ (WebCore::ApplicationCacheHost::DeferredEvent::DeferredEvent):
+
+2010-07-09 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ Bug 41340 - [GStreamer] Subtle race condition during seeks
+ https://bugs.webkit.org/show_bug.cgi?id=41340
+
+ * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
+ (webKitWebSrcStop):
+ (webKitWebSrcNeedDataMainCb):
+ (webKitWebSrcNeedDataCb):
+ (webKitWebSrcEnoughDataMainCb):
+ (webKitWebSrcEnoughDataCb):
+ (webKitWebSrcSeekDataCb):
+ (StreamingClient::didFinishLoading):
+ Fix two subtle race conditions that can happen during seeks:
+ - The timeout callback could be called before the callback ID is
+ assigned to the instance private data. This causes the ID to
+ be set after the callback has finished and breaks all future
+ processing.
+ - The source must not go EOS while a seek is pending because
+ this confuses appsrc due to the different threads involved here.
+
+2010-07-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Removed hard-coded enabled default of video support
+
+ Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.
+
+ * WebCore.pri:
+
+2010-07-09 Ben Murdoch <benm@google.com>
+
+ Reviewed by Steve Block.
+
+ [Arm] Missing NaN check in XPath substring function
+ https://bugs.webkit.org/show_bug.cgi?id=41862
+
+ Test: fast/xpath/substring-nan-position.html
+
+ * xml/XPathFunctions.cpp:
+ (WebCore::XPath::FunSubstring::evaluate): Add an isnan()
+ to the value returned from evaluating the position
+ argument and early out and return the empty string.
+
+2010-07-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Prospective build fix.
+
+ Moved the media element detection from WebCore.pro into WebCore.pri, where
+ all the features are detected. This is also used by build-webkit to determine
+ the defaults, which may be the reason for the build breakage.
+
+ * WebCore.pri:
+ * WebCore.pro:
+
+2010-07-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Re-enable support for QtMultimediaKit as backend for the media elements
+
+ Experimental support is re-enabled if QtMobility is available and the Qt
+ version is 4.7 or above.
+
+ * WebCore.pro:
+ * platform/graphics/MediaPlayer.cpp:
+ * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
+ (WebCore::MediaPlayerPrivate::supportsType): Adapt to latest QtMultimediaKit API changes.
+ (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
+ (WebCore::MediaPlayerPrivate::totalBytes):
+
+2010-07-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: do not show default tooltip when detailed network info is available.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41957
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel):
+ (WebInspector.ResourcesPanel.prototype.reset):
+ (WebInspector.ResourcesPanel.prototype.showResource):
+ (WebInspector.ResourcesPanel.prototype._getPopoverAnchor):
+ (WebInspector.ResourcesPanel.prototype._showPopover):
+ (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):
+
+2010-07-09 François Sausset <sausset@gmail.com>
+
+ Reviewed by Beth Dakin.
+
+ Correct the default font variant of mtext (regular instead of italic).
+ https://bugs.webkit.org/show_bug.cgi?id=41626
+
+ Add test to be sure that only <mi> elements use italic fonts by default.
+ Update test with fractions to take into account the correct behaviour of mtext (regular instead of italic).
+
+ * css/mathml.css:
+ (mi):
+
+2010-07-09 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Implement performance.navigation.type
+ https://bugs.webkit.org/show_bug.cgi?id=41564
+
+ Tests: fast/dom/navigation-type-back-forward.html
+ fast/dom/navigation-type-navigate.html
+ fast/dom/navigation-type-reload.html
+
+ * page/Navigation.cpp:
+ (WebCore::Navigation::type):
+ * page/Navigation.h:
+ (WebCore::Navigation::):
+ * page/Navigation.idl:
+
+2010-07-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: hide AppCache until implemented.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41858
+
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel):
+ (WebInspector.StoragePanel.prototype.reset):
+ (WebInspector.StoragePanel.prototype.addApplicationCache):
+
+2010-07-09 François Sausset <sausset@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Set the good default behaviour for the columalign attribute on MathML mtable element
+ https://bugs.webkit.org/show_bug.cgi?id=41631
+
+ Test update: mathml/tables.xhtml
+
+ * css/mathml.css:
+ (math):
+
+2010-07-09 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62937.
+ http://trac.webkit.org/changeset/62937
+ https://bugs.webkit.org/show_bug.cgi?id=41955
+
+ Crashes SnowLeopard leaks and Windows debug bot in fast/xsl
+ /xslt-relative-path.xml, with assertion in
+ XSLTProcessorLibxslt.cpp:264 (Requested by WildFox on
+ #webkit).
+
+ * xml/XSLTProcessor.h:
+ (WebCore::XSLTProcessor::XSLTProcessor):
+ * xml/XSLTProcessorLibxslt.cpp:
+ (WebCore::docLoaderFunc):
+ (WebCore::setXSLTLoadCallBack):
+ (WebCore::xsltStylesheetPointer):
+ (WebCore::XSLTProcessor::transformToString):
+
+2010-07-09 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ NotificationPresenter needs a cancelRequestPermission API
+ https://bugs.webkit.org/show_bug.cgi?id=41783
+
+ Updated NotificationPresenter API, to use ScriptExecutionContext instead of origin.
+ Added new API NotificationPresenter::cancelRequestsForPermision
+ The new API will be implemented and a test will be added in a followup patch.
+
+ * notifications/Notification.cpp:
+ (WebCore::Notification::Notification):
+ * notifications/NotificationCenter.cpp:
+ (WebCore::NotificationCenter::checkPermission):
+ (WebCore::NotificationCenter::requestPermission):
+ (WebCore::NotificationCenter::disconnectFrame):
+ * notifications/NotificationCenter.h:
+ * notifications/NotificationPresenter.h:
+
+2010-07-09 Andreas Wictor <andreas.wictor@xcerion.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Remove global variables from XSLTProcessorLibxslt.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=41348
+
+ Remove the globalProcessor and globalDocLoader global variables
+ by using the _private field that exists on most libxml structs.
+
+ No new tests, existing tests covers this.
+
+ * xml/XSLTProcessor.h:
+ (WebCore::XSLTProcessor::sourceNode):
+ (WebCore::XSLTProcessor::XSLTProcessor):
+ * xml/XSLTProcessorLibxslt.cpp:
+ (WebCore::registeredXSLTProcessors):
+ (WebCore::registeredXSLStyleSheets):
+ (WebCore::docLoaderFunc):
+ (WebCore::clearSavedStyleSheetPointers):
+ (WebCore::xsltStylesheetPointer):
+ (WebCore::XSLTProcessor::transformToString):
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Unreviewed build fix.
+
+ We recently taught the HTMLTokenizer to recognize self-closing tags,
+ <http://trac.webkit.org/changeset/62926>, but that confused the
+ LegacyHTMLTreeBuilder. It turns out that it's much happier if we never
+ say a tag is self-closing.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::convertToOldStyle):
+
+2010-07-09 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Rob Buis.
+
+ svg/custom/use-instanceRoot-event-bubbling.xhtml test crashes
+ https://bugs.webkit.org/show_bug.cgi?id=41931
+
+ Be careful to not mutate (marking it for recreation) the shadow tree, while building it.
+ The recent change that cloneNode() properly synchronizes the style/SVG attributes caused this problem.
+
+ Fixes crash seen on the buildbots in svg/custom/use-instanceRoot-event-bubbling.xhtml.
+
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::SVGUseElement):
+ (WebCore::SVGUseElement::recalcStyle):
+ (WebCore::SVGUseElement::buildShadowAndInstanceTree):
+ (WebCore::SVGUseElement::invalidateShadowTree):
+ * svg/SVGUseElement.h:
+ (WebCore::SVGUseElement::setUpdatesBlocked):
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Skip leading newlines in <textarea>
+ https://bugs.webkit.org/show_bug.cgi?id=41947
+
+ We would have caught this earlier with the ASSERT.
+
+ * html/HTMLTokenizer.cpp:
+ (WebCore::HTMLTokenizer::nextToken):
+
+2010-07-08 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Provide detailed network info in the resources panel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=40227
+
+ * English.lproj/localizedStrings.js:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::willSendRequest):
+ (WebCore::InspectorController::didReceiveResponse):
+ * inspector/InspectorController.h:
+ * inspector/InspectorResource.cpp:
+ (WebCore::InspectorResource::InspectorResource):
+ (WebCore::InspectorResource::updateResponse):
+ (WebCore::InspectorResource::updateScriptObject):
+ (WebCore::InspectorResource::buildObjectForTiming):
+ * inspector/InspectorResource.h:
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel):
+ (WebInspector.ResourcesPanel.prototype.elementsToRestoreScrollPositionsFor):
+ (WebInspector.ResourcesPanel.prototype._getPopoverAnchor):
+ (WebInspector.ResourcesPanel.prototype._showPopover):
+ (WebInspector.ResourcesPanel.prototype.hide):
+ (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):
+ (WebInspector.ResourceGraph):
+ * inspector/front-end/inspector.js:
+ (WebInspector.updateResource):
+ * platform/network/ResourceLoadTiming.h:
+ (WebCore::ResourceLoadTiming::create):
+ (WebCore::ResourceLoadTiming::deepCopy):
+ (WebCore::ResourceLoadTiming::operator==):
+ (WebCore::ResourceLoadTiming::ResourceLoadTiming):
+ * platform/network/ResourceRequestBase.h:
+ (WebCore::ResourceRequestBase::reportLoadTiming):
+ (WebCore::ResourceRequestBase::setReportLoadTiming):
+ (WebCore::ResourceRequestBase::ResourceRequestBase):
+ * platform/network/ResourceResponseBase.cpp:
+ (WebCore::ResourceResponseBase::connectionID):
+ (WebCore::ResourceResponseBase::setConnectionID):
+ * platform/network/ResourceResponseBase.h:
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Implement self closing start tag state in the tokenizer
+ https://bugs.webkit.org/show_bug.cgi?id=41946
+
+ Amazingly we got this far w/o needing self closing.
+ The LegacyHTMLTreeBuilder clearly uses the self-closing
+ state, but the fact that we never exposed it seems to
+ not have caused any test failures. Sad.
+
+ The new HTMLTreeBuilder only needs the self closing state
+ for foreign content mode (and a few parse error cases).
+
+ * html/HTMLToken.h:
+ (WebCore::HTMLToken::setSelfClosing):
+ * html/HTMLTokenizer.cpp:
+ (WebCore::HTMLTokenizer::nextToken):
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::):
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add basic "in foreign content" support to the TreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=41943
+
+ This is covered by numerous tests in html5lib/runner.html.
+
+ "in foreign content" mode requires us to be able to process
+ tokens using the "secondary insertion mode". We have to set
+ a fake insertion mode to do that, so much of this code is enabling
+ setting of fake insertion modes, and then later restoration of the
+ insertion mode after execution.
+
+ There is a lot more of foreign content mode to implement, but this is
+ a good start resulting in huge test progressions.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
+ - Use createHTMLElementAndAttachToCurrent instead of copy/paste code.
+ - No need to include HTMLElementFactory in this file.
+ * html/HTMLConstructionSite.h:
+ - RedirectToFosterParentGuard does not need to be a friend class.
+ * html/HTMLElementStack.cpp:
+ (WebCore::HTMLElementStack::isOnlyHTMLElementsInScope):
+ * html/HTMLElementStack.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::):
+ * html/HTMLTreeBuilder.h:
+ (WebCore::HTMLTreeBuilder::setInsertionMode):
+ (WebCore::HTMLTreeBuilder::isFakeInsertionMode):
+ (WebCore::HTMLTreeBuilder::setFakeInsertionMode):
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Coalesce text nodes when foster parenting
+ https://bugs.webkit.org/show_bug.cgi?id=41921
+
+ Introduces the notion of an AttachmentSite to the overall
+ HTMLConstructionSite. Maybe we should rename HTMLConstructionSite to
+ HTMLConstructionArea since we construct things all over the tree? :)
+
+ There's something wrong in the internal layering in this class, but I
+ can't quite see what it is. I added a FIXME for the some of the
+ symptoms.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::attach):
+ (WebCore::HTMLConstructionSite::attachAtSite):
+ (WebCore::HTMLConstructionSite::insertTextNode):
+ (WebCore::HTMLConstructionSite::findFosterSite):
+ (WebCore::HTMLConstructionSite::fosterParent):
+ * html/HTMLConstructionSite.h:
+
+2010-07-08 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ RenderSVGRoot does not include border/padding while repainting
+ https://bugs.webkit.org/show_bug.cgi?id=41854
+
+ RenderSVGRoot does not include border/padding in the repaint rect.
+ clippedOverflowRectForRepaint() was missing. Affects all DRT results,
+ as <svg> now gets properly sized.
+
+ Test: svg/custom/repaint-moving-svg-and-div.xhtml
+
+ * rendering/RenderSVGRoot.cpp:
+ (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
+ (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
+ * rendering/RenderSVGRoot.h:
+
+2010-07-09 Albert J. Wong <ajwong@chromium.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Add RuntimeEnabledFeatures::timeRangesEnabled() required by r62880
+
+ https://bugs.webkit.org/show_bug.cgi?id=41935
+
+ * bindings/generic/RuntimeEnabledFeatures.cpp:
+ (WebCore::RuntimeEnabledFeatures::timeRangesEnabled):
+ Add in timeRangesEnabled() implementation.
+ * bindings/generic/RuntimeEnabledFeatures.h:
+ Add in timeRangesEnabled() declaration.
+
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add setInsertionMode setter in preparation for "in foreign content" mode
+ https://bugs.webkit.org/show_bug.cgi?id=41942
+
+ "in foreign content" mode needs to be able to use a fake
+ insertion mode for processing. We need to be able to save the
+ original insertion mode, set a fake one, and then restore the original
+ if it wasn't changed. To detect changes, we need all callsites to
+ use a setInsertionMode accessor instead of m_insertionMode =
+
+ No functional changes, thus no tests.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::setInsertionModeAndEnd):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
+ (WebCore::HTMLTreeBuilder::processEndTagForInCell):
+ (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
+ (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode):
+ (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
+ (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
+ (WebCore::HTMLTreeBuilder::processScriptStartTag):
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add insertForeignElement in preparation for adding "in foreign content" support
+ https://bugs.webkit.org/show_bug.cgi?id=41940
+
+ No functional changes, thus no tests.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::insertForeignElement):
+ (WebCore::HTMLConstructionSite::createElement):
+ (WebCore::HTMLConstructionSite::createHTMLElement):
+ * html/HTMLConstructionSite.h:
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implementing pending table characters
+ https://bugs.webkit.org/show_bug.cgi?id=41916
+
+ This turned out to not be as scary as I thought it would be.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processDoctypeToken):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processComment):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Handle whitespace correctly
+ https://bugs.webkit.org/show_bug.cgi?id=41907
+
+ This patch introduces an extra memcpy in the character token pipeline.
+ I'll remove the memcpy in a future patch.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::insertTextNode):
+ * html/HTMLConstructionSite.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Move more mode handling into functions for later re-use
+ https://bugs.webkit.org/show_bug.cgi?id=41939
+
+ No functional changes, thus no tests.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
+ (WebCore::HTMLTreeBuilder::processEndTagForInRow):
+ (WebCore::HTMLTreeBuilder::processEndTagForInCell):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add new popUntilPopped functions to clean up code
+ https://bugs.webkit.org/show_bug.cgi?id=41936
+
+ Pretty self explanatory. Much awesome code reduction.
+
+ No functional changes, thus no tests.
+
+ * html/HTMLElementStack.cpp:
+ (WebCore::HTMLElementStack::popUntilPopped):
+ * html/HTMLElementStack.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
+ (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Unreviewed. Just renaming (discussed with Adam Barth).
+
+ Rename createElement* to createHTMLElement* to better reflect
+ behavior. This is in preparation for adding foreign content support.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::createHTMLElementAndAttachToCurrent):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
+ (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
+ (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
+ (WebCore::HTMLConstructionSite::insertHTMLElement):
+ (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
+ (WebCore::HTMLConstructionSite::createHTMLElement):
+ * html/HTMLConstructionSite.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+
+2010-07-09 Eric Seidel <eric@webkit.org>
+
+ Unreviewed. Just renaming (discussed with Adam Barth).
+
+ Rename insertElement to insertHTMLElement and
+ insertSelfClosingElement to insertSelfClosingHTMLElement
+ to better reflect what they actually do. This is in preparation
+ for adding foreign content support.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::insertHTMLElement):
+ (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
+ (WebCore::HTMLConstructionSite::insertFormattingElement):
+ (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements):
+ (WebCore::HTMLConstructionSite::fosterParent):
+ * html/HTMLConstructionSite.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+ (WebCore::HTMLTreeBuilder::processStartTagForInHead):
+ (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
+ (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
+
+2010-07-08 Rob Buis <rwlbuis@gmail.com>
+
+ Reviewed by Eric Seidel.
+
+ Implement SVGSVGElement.getElementById
+ https://bugs.webkit.org/show_bug.cgi?id=41655
+
+ Implement getElementById for SVGSVGElement by trying to
+ reuse Document.getElementById. If that fails to find an
+ SVG element in the document fragent do a subtree search.
+
+ Test: svg/custom/svg-getelementid.xhtml
+
+ * svg/SVGSVGElement.cpp:
+ (WebCore::SVGSVGElement::getElementById):
+ * svg/SVGSVGElement.h:
+ * svg/SVGSVGElement.idl:
+
+2010-07-08 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Unwrap a few || blocks for easier readability
+ https://bugs.webkit.org/show_bug.cgi?id=41838
+
+ No functional change, thus no tests.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::adjustedLexerState):
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processComment):
+ (WebCore::HTMLTreeBuilder::processStartTagForInHead):
+
+2010-07-08 Sam Magnuson <smagnuson@netflix.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] for debugging purposes nice I'm contributing back my FPS
+ counter in the AnimationQtBase
+ https://bugs.webkit.org/show_bug.cgi?id=40381
+
+ Simply start a timer and count frames in the AnimationQtBase and
+ spit out the FPS count at the end of a single animation.
+
+ No new tests: this is a simple debugging aid.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::AnimationQt::updateState):
+ (WebCore::AnimationQt::updateCurrentTime):
+ (WebCore::TransformAnimationQt::updateState):
+ (WebCore::OpacityAnimationQt::updateState):
+
+2010-07-08 Sam Magnuson <smagnuson@netflix.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] instance objects created for QObjects are somtimes GC'd
+ https://bugs.webkit.org/show_bug.cgi?id=40352
+
+ In markAggregate loop over all the current fields and for any that
+ still have a dynamic property or a child, mark them as
+ well. Otherwise the proxy instance will go away and the JS that
+ was bound to it will be lost.
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::getQtInstance):
+ (JSC::Bindings::QtInstance::removeCachedMethod):
+ (JSC::Bindings::QtInstance::markAggregate):
+ (JSC::Bindings::QtInstance::getPropertyNames):
+
+2010-07-08 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ WebInspector: migrate InspectorDOMAgent to the generated version of
+ InspectorFrontend interface. This is the next step on the way to
+ Remote Debugging.
+
+ * bindings/js/ScriptEventListener.cpp:
+ (WebCore::eventListenerHandlerBody):
+ (WebCore::eventListenerHandlerLocation):
+ * bindings/js/ScriptEventListener.h:
+ * bindings/v8/ScriptEventListener.cpp:
+ (WebCore::eventListenerHandlerBody):
+ (WebCore::eventListenerHandlerLocation):
+ * bindings/v8/ScriptEventListener.h:
+ * inspector/CodeGeneratorInspector.pm:
+ * inspector/InspectorCSSStore.cpp:
+ (WebCore::InspectorCSSStore::inspectorStyleSheet):
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::connectFrontend):
+ * inspector/InspectorController.h:
+ (WebCore::InspectorController::inspectorFrontend2):
+ * inspector/InspectorDOMAgent.cpp:
+ (WebCore::InspectorDOMAgent::InspectorDOMAgent):
+ (WebCore::InspectorDOMAgent::setDocument):
+ (WebCore::InspectorDOMAgent::handleEvent):
+ (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
+ (WebCore::InspectorDOMAgent::getEventListenersForNode):
+ (WebCore::InspectorDOMAgent::buildObjectForNode):
+ (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
+ (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
+ (WebCore::InspectorDOMAgent::buildObjectForEventListener):
+ (WebCore::InspectorDOMAgent::didInsertDOMNode):
+ (WebCore::InspectorDOMAgent::getStyles):
+ (WebCore::InspectorDOMAgent::getAllStyles):
+ (WebCore::InspectorDOMAgent::getStyleSheet):
+ (WebCore::InspectorDOMAgent::getRuleRangesForStyleSheetId):
+ (WebCore::InspectorDOMAgent::getInlineStyle):
+ (WebCore::InspectorDOMAgent::getComputedStyle):
+ (WebCore::InspectorDOMAgent::buildObjectForAttributeStyles):
+ (WebCore::InspectorDOMAgent::buildArrayForCSSRules):
+ (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
+ (WebCore::InspectorDOMAgent::applyStyleText):
+ (WebCore::InspectorDOMAgent::toggleStyleEnabled):
+ (WebCore::InspectorDOMAgent::setRuleSelector):
+ (WebCore::InspectorDOMAgent::addRule):
+ (WebCore::InspectorDOMAgent::buildObjectForStyle):
+ (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
+ (WebCore::InspectorDOMAgent::buildArrayForDisabledStyleProperties):
+ (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
+ (WebCore::InspectorDOMAgent::buildObjectForRule):
+ (WebCore::InspectorDOMAgent::toArray):
+ (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
+ * inspector/InspectorDOMAgent.h:
+ (WebCore::InspectorDOMAgent::create):
+ * inspector/InspectorFrontend.cpp:
+ * inspector/InspectorFrontend.h:
+ * inspector/InspectorFrontend2.idl:
+ * inspector/front-end/inspector.js:
+ (WebInspector.dispatchMessageFromBackend):
+
+2010-07-08 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Darin Adler.
+
+ compositing/iframes/iframe-resize.html displays incorrectly after the resize
+ https://bugs.webkit.org/show_bug.cgi?id=41794
+
+ The clip and scroll layers of a composited iframe's RenderLayerCompositor are updated from
+ from updateGraphicsLayerGeometry(), but this is too early to get the correct layoutWidth and
+ layoutHeight from the FrameView which happen later in layout. So when a widget size changes,
+ call updateAfterWidgetResize() directly on the RenderLayerBacking (if any).
+
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateAfterWidgetResize): New method that updates the clip
+ and scroll layers of the iframe's content RenderLayerCompositor.
+ (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Call updateAfterWidgetResize()
+ * rendering/RenderLayerBacking.h: Add updateAfterWidgetResize().
+ * rendering/RenderWidget.cpp:
+ (WebCore::RenderWidget::setWidgetGeometry): Call updateAfterWidgetResize().
+
+2010-07-08 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Calling layoutTestController.layerTreeAsText() should update layout
+ https://bugs.webkit.org/show_bug.cgi?id=41818
+
+ Call updateLayout() on the document before obtaining the layer tree.
+ This will update compositing layers.
+
+ * page/Frame.cpp:
+ (WebCore::Frame::layerTreeAsText):
+
+2010-07-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Get my head wrapped around processCharacter
+ https://bugs.webkit.org/show_bug.cgi?id=41812
+
+ The bulk of the patch is just stubbing out functions to document what
+ the spec tells us to do. I'll implement these functions in subsequent
+ patches.
+
+ * html/HTMLConstructionSite.h:
+ (WebCore::HTMLConstructionSite::insertLeadingWhitespace):
+ (WebCore::HTMLConstructionSite::insertLeadingWhitespaceWithActiveFormattingElements):
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ * html/HTMLTreeBuilder.h:
+ (WebCore::HTMLTreeBuilder::skipLeadingWhitespace):
+
+2010-07-08 Tony Chang <tony@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ WebCore::InsertLineBreakCommand::shouldUseBreakElement ReadAV@NULL
+ https://bugs.webkit.org/show_bug.cgi?id=30116
+ Fixing the crash causes text insertions on hidden elements to get ignored
+ (not a new bug). This is https://bugs.webkit.org/show_bug.cgi?id=40342
+
+ Test: editing/inserting/return-key-in-hidden-textarea.html
+
+ * editing/InsertLineBreakCommand.cpp:
+ (WebCore::InsertLineBreakCommand::doApply):
+ * editing/InsertParagraphSeparatorCommand.cpp:
+ (WebCore::InsertParagraphSeparatorCommand::doApply):
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=41923
+ TimeRanges should expose a JS constructor
+
+ * html/TimeRanges.idl: Remove [OmitConstructor].
+ * page/DOMWindow.idl: Add constructor.
+
+2010-07-08 Erik Arvidsson <arv@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ Add missing padding-end and margin-end CSS properties.
+ https://bugs.webkit.org/show_bug.cgi?id=25761
+
+ Tests: fast/css/margin-start-end.html
+ fast/css/padding-start-end.html
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseValue):
+ * css/CSSPropertyNames.in:
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::applyProperty):
+ * inspector/front-end/SourceCSSTokenizer.js:
+ (WebInspector.SourceCSSTokenizer):
+
+2010-07-08 Aaron Boodman <aa@chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Add the ability for user scripts and user styles to affect just the top frame.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41529
+
+ Tests: userscripts/user-script-all-frames.html
+ userscripts/user-script-top-frame-only.html
+ userscripts/user-style-all-frames.html
+ userscripts/user-style-top-frame-only.html
+
+ * WebCore.base.exp: Update PageGroup method signatures.
+ * dom/Document.cpp:
+ (WebCore::Document::pageGroupUserSheets): Check allFrames before injecting.
+ * page/Frame.cpp:
+ (WebCore::Frame::injectUserScriptsForWorld): Ditto.
+ * page/PageGroup.cpp:
+ (WebCore::PageGroup::addUserScriptToWorld):
+ (WebCore::PageGroup::addUserStyleSheetToWorld):
+ * page/PageGroup.h:
+ * page/UserScript.h:
+ (WebCore::UserScript::UserScript):
+ (WebCore::UserScript::injectedFrames):
+ * page/UserScriptTypes.h:
+ (WebCore::):
+ * page/UserStyleSheet.h:
+ (WebCore::UserStyleSheet::UserStyleSheet):
+ (WebCore::UserStyleSheet::injectedFrames):
+
+2010-07-08 Adele Peterson <adele@apple.com>
+
+ Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=41721
+ <rdar://problem/8158561> Missing plug-in indicator should have a pressed state
+
+ Test: plugins/clicking-missing-plugin-fires-delegate.html
+
+ * html/HTMLPlugInElement.cpp:
+ (WebCore::HTMLPlugInElement::HTMLPlugInElement): Initialize m_isCapturingMouseEvents.
+ (WebCore::HTMLPlugInElement::detach): If we're still capturing when getting detached, clear the capturing node on the EventHandler.
+ (WebCore::HTMLPlugInElement::defaultEventHandler): Call handleMissingPluginIndicatorEvent when the missing plugin indicator is showing.
+ * html/HTMLPlugInElement.h:
+ (WebCore::HTMLPlugInElement::isCapturingMouseEvents):
+ (WebCore::HTMLPlugInElement::setIsCapturingMouseEvents):
+ * page/ChromeClient.h:
+ (WebCore::ChromeClient::shouldMissingPluginMessageBeButton): Added default implementation.
+ * rendering/RenderEmbeddedObject.cpp:
+ (WebCore::replacementTextRoundedRectPressedColor):
+ (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
+ (WebCore::RenderEmbeddedObject::setMissingPluginIndicatorIsPressed): Added. Causes a repaint when the state changes.
+ (WebCore::RenderEmbeddedObject::paintReplaced): Call getReplacementTextGeometry.
+ (WebCore::RenderEmbeddedObject::getReplacementTextGeometry): Factored this out so it can be used in paintReplaced and in isInMissingPluginIndicator.
+ (WebCore::RenderEmbeddedObject::isInMissingPluginIndicator): Hit test to see if the mouse event is in the missing plugin indicator.
+ (WebCore::RenderEmbeddedObject::handleMissingPluginIndicatorEvent): Capture mouse events as needed and track the pressed appearance.
+ * rendering/RenderEmbeddedObject.h:
+
+2010-07-08 James Robinson <jamesr@google.com>
+
+ Reviewed by Darin Fisher.
+
+ Allow resizing and getting the texture id from an offscreen GLES2Context
+ https://bugs.webkit.org/show_bug.cgi?id=41828
+
+ When using an offscreen GLES2Context the caller needs to be able to resize the backing store
+ managed by the embedder and get access to a texture id to pass to the compositor. WebGL
+ does these actions in an indirect way, it will be refactored to use this path.
+
+ * platform/chromium/GLES2Context.h:
+
+2010-07-02 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Crash in RenderObject::containingBlock when clearing selection in a display:none node.
+ https://bugs.webkit.org/show_bug.cgi?id=41523
+
+ updateStyleIfNeeded before clearing the selection in the RenderView. Otherwise,
+ m_selectionStart and m_selectionEnd in RenderView point to garbage object.
+ This fixes the crash because updateStyleIfNeeded clears the selection before
+ clobbering nodes that contain the selection.
+
+ Test: editing/selection/crash-on-clear-selection.html
+
+ * editing/SelectionController.cpp:
+ (WebCore::SelectionController::updateAppearance):
+
+2010-07-08 Brent Fulgham <bfulgham@webkit.org>
+
+ Reviewed by Xan Lopez.
+
+ Correct a mistake in calculating squiggle extents. The entire
+ quantity was being divided by two, rather than just the unitWidth.
+ This error caused the squiggle to be about half the expected length.
+
+ * platform/graphics/cairo/DrawErrorUnderline.h:
+ (drawErrorUnderline):
+
+2010-07-08 John Abd-El-Malek <jam@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [V8] Navigation policy doesn't play nicely with pepper plugins
+ https://bugs.webkit.org/show_bug.cgi?id=41864
+
+ * bindings/v8/V8Utilities.cpp:
+ (WebCore::callingOrEnteredFrame):
+ (WebCore::shouldAllowNavigation):
+ (WebCore::navigateIfAllowed):
+
+2010-07-08 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Missing plug-ins may cause an assertion failure.
+ https://bugs.webkit.org/show_bug.cgi?id=41900
+
+ Reviewed by Adele Peterson.
+
+ Test: plugins/missing-plugin.html
+
+ * plugins/PluginView.cpp:
+ (WebCore::PluginView::~PluginView):
+ Check whether m_instance is null before trying to remove it from the
+ map. Trying to remove a null instance results in an assertion failure.
+ (WebCore::PluginView::PluginView):
+ Initialize m_instance to 0, because there is an early return that may
+ skip its being assigned its proper value.
+
+2010-07-08 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fix a test failure seen only on the Leopard bot.
+
+ * bindings/js/JSSharedWorkerCustom.cpp:
+ (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker):
+ If SharedWorker::create returns an exception, don't try to create a wrapper
+ for its return value, which can be 0.
+
+2010-07-08 Albert J. Wong <ajwong@chromium.org>
+
+ Not reviewed, build break fix for chromium.
+
+ A new MediaControlElementType enum was added which caused a warning in
+ the Chromium build.
+
+ * rendering/RenderMediaControlsChromium.cpp:
+ (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):
+ Add MediaVolumeSliderMuteButton enumartion entry.
+
+2010-07-08 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by David Levin.
+
+ Remove IDL declarations and stubs for navigator.registerProtocolHandler and navigator.registerContentHandler.
+ https://bugs.webkit.org/show_bug.cgi?id=41878
+
+ This is practically a rollback of http://trac.webkit.org/changeset/50477.
+
+ * page/Chrome.cpp:
+ * page/Chrome.h:
+ * page/ChromeClient.h:
+ * page/Navigator.cpp:
+ * page/Navigator.h:
+ * page/Navigator.idl:
+
+2010-07-08 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Darin Adler.
+
+ Fix adoptRef assertion failures caused by stack-allocated ResourceHandle objects
+ https://bugs.webkit.org/show_bug.cgi?id=41823
+
+ Create the ResourceHandle manually for now instead of calling
+ ::create, since that methods does a few extra checks that make us
+ fail a couple of HTTP tests.
+
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::):
+
+2010-07-08 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by David Levin.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41886
+ Shorten access control failure explanation messages
+
+ * loader/CrossOriginAccessControl.cpp:
+ (WebCore::passesAccessControlCheck):
+ * loader/CrossOriginPreflightResultCache.cpp:
+ (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod):
+ (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
+ Removed "response header field" parts from error text - it's long, but doesn't add much
+ to header field name.
+
+ * platform/network/ResourceErrorBase.cpp:
+ * platform/network/ResourceErrorBase.h:
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::didFail):
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
+ (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
+ (WebCore::DocumentThreadableLoader::didReceiveResponse):
+ (WebCore::DocumentThreadableLoader::preflightFailure):
+ Renamed the constant for domain. WebCore shouldn't be creating errors observable by WebKit
+ clients, because it can't create a platform error, and cannot load a localized string.
+ We don't treat cross origin access check failures as true loading failures, so we don't tell
+ clients about these.
+
+2010-07-08 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Mac OS X media controls should have a way to adjust volume incrementally
+ https://bugs.webkit.org/show_bug.cgi?id=41718
+ <rdar://problem/5679472>
+
+ * css/CSSPrimitiveValueMappings.h:
+ (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Handle MediaVolumeSliderMuteButtonPart.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId): Handle PseudoMediaControlsVolumeSliderMuteButton.
+ (WebCore::nameToPseudoTypeMap): Define mediaControlsVolumeSliderMuteButton.
+ (WebCore::CSSSelector::extractPseudoType): Handle PseudoMediaControlsVolumeSliderMuteButton.
+
+ * css/CSSSelector.h:
+ (WebCore::CSSSelector::): Define PseudoMediaControlsVolumeSliderMuteButton.
+
+ * css/CSSValueKeywords.in: Define media-volume-slider-mute-button.
+
+ * css/mediaControls.css:
+ (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button): New.
+
+ * css/mediaControlsQuickTime.css:
+ (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel): Add "overflow: visible"
+ so volume slider pop-up will be visible.
+
+ (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button): Make
+ mute button 14x12 instead of 15x14 so it matches the size in the volume slider.
+
+ (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
+ (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
+ (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
+ New.
+
+ * platform/ThemeTypes.h: Define MediaVolumeSliderMuteButtonPart.
+
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlInputElement::MediaControlInputElement): Handle MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON.
+ (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Add ButtonLocation
+ parameter both mute buttons can be created.
+ (WebCore::MediaControlMuteButtonElement::create): Ditto.
+
+ * rendering/MediaControlElements.h: Define MediaVolumeSliderMuteButton and ButtonLocation.
+
+ * rendering/RenderMedia.cpp:
+ (WebCore::RenderMedia::styleDidChange): Update volume slider mute button.
+ (WebCore::RenderMedia::createMuteButton): Pass ButtonLocation parameter to MediaControlMuteButtonElement::create.
+ (WebCore::RenderMedia::createVolumeSliderMuteButton): New.
+ (WebCore::RenderMedia::updateControls): Deal with volume slider mute button.
+ (WebCore::RenderMedia::updateVolumeSliderContainer): Don't assume all ports want to position
+ the volume slider in the same place, call new volumeSliderOffsetFromMuteButton theme function.
+ (WebCore::RenderMedia::forwardEvent): Handle volume slider mute button.
+ * rendering/RenderMedia.h:
+
+ * rendering/RenderTheme.cpp:
+ (WebCore::RenderTheme::paint): Handle MediaVolumeSliderMuteButtonPart.
+ (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton): New, return location previously hard
+ coded in RenderMedia::updateVolumeSliderContainer.
+ * rendering/RenderTheme.h:
+
+ * rendering/RenderThemeMac.h:
+ * rendering/RenderThemeMac.mm:
+ (WebCore::RenderThemeMac::adjustMediaSliderThumbSize): Deal with the volume slider thumb.
+ (WebCore::RenderThemeMac::paintMediaVolumeSliderContainer): New, call the WKSI paint function
+ for this button.
+ (WebCore::RenderThemeMac::paintMediaVolumeSliderTrack): Ditto.
+ (WebCore::RenderThemeMac::paintMediaVolumeSliderThumb): Ditto.
+ (WebCore::RenderThemeMac::shouldRenderMediaControlPart): Draw the volume slider parts when
+ using the new controller UI for a movie that has audio.
+ (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): New, position the volume slider
+ directly above the mute button.
+
+ * rendering/style/RenderStyleConstants.h: Define MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON.
+
+2010-07-08 Antonio Gomes <tonikitoo@webkit.org>
+
+ Unreviewed complementary fix for r62815
+
+ One last time change made me blind to a "!" in a if statment.
+
+ * editing/EditorCommand.cpp:
+ (WebCore::executeToggleStyle):
+
+2010-07-07 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Regression: Selection anchor + focus swap when arrow keys after setBaseAndExtent
+ https://bugs.webkit.org/show_bug.cgi?id=32605
+
+ Only have selections be non-directional when they are set via the mouse.
+ Otherwise, all selections are directional.
+
+ Test: editing/selection/extend-forward-after-set-base-and-extent.html
+
+ * WebCore.base.exp:
+ * editing/SelectionController.cpp:
+ (WebCore::SelectionController::setSelection):
+ * editing/SelectionController.h:
+ (WebCore::SelectionController::setSelection):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::selectClosestWordFromMouseEvent):
+ (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
+ (WebCore::EventHandler::handleMousePressEventTripleClick):
+ (WebCore::EventHandler::handleMousePressEventSingleClick):
+ (WebCore::EventHandler::updateSelectionForMouseDrag):
+
+2010-07-08 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Ojan Vafai.
+
+ Refactor platform dependent editing behavior code out of Settings (part II)
+ https://bugs.webkit.org/show_bug.cgi?id=39854
+
+ Mac port is currently the only port relying on a style to be present on the start
+ of a selection to consider the style as applied or not. All other ports
+ have to have the style present in all text node of the selection for such.
+
+ Patch makes situations that depend on this check like this to be controlled by
+ the EditingBehavior class.
+
+ Refactoring, so no new tests needed.
+
+ * editing/EditingBehavior.h:
+ (WebCore::EditingBehavior::shouldToggleStyleBasedOnStartOfSelection):
+ * editing/EditorCommand.cpp:
+ (WebCore::executeToggleStyle):
+
+2010-07-08 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add stubbed out PluginView class
+ https://bugs.webkit.org/show_bug.cgi?id=41879
+
+ Export functions needed by WebKit2.
+
+ * WebCore.exp.in:
+
+2010-07-08 Ben Murdoch <benm@google.com>
+
+ Reviewed by Pavel Feldman.
+
+ Fix build break in V8ConsoleCustom.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=40825
+
+ No new tests as just fixing a build break.
+
+ * bindings/v8/custom/V8ConsoleCustom.cpp: Guard profilesAccessorGetter
+ appropriately.
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Pass Page to BackForwardControllerClient::createBackForwardList since it
+ may be called before implementations of BackForwardControllerClient have
+ access to a Page.
+
+ * history/BackForwardController.cpp:
+ (WebCore::BackForwardController::BackForwardController):
+ * history/BackForwardControllerClient.h:
+
+2010-07-08 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62778.
+ http://trac.webkit.org/changeset/62778
+ https://bugs.webkit.org/show_bug.cgi?id=41866
+
+ Broke svg/W3C-SVG-1.1/text-intro-05-t.svg in debug (Requested
+ by pfeldman on #webkit).
+
+ * platform/graphics/chromium/FontLinux.cpp:
+ (WebCore::TextRunWalker::TextRunWalker):
+ (WebCore::TextRunWalker::~TextRunWalker):
+
+2010-07-08 Vitaly Repeshko <vitalyr@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Fix adoptRef usage violation in IDBObjectStoreRequest
+ https://bugs.webkit.org/show_bug.cgi?id=41869
+
+ * storage/IDBObjectStoreRequest.cpp:
+ (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Another chromium build fix.
+
+ * history/BackForwardListChromium.cpp:
+ (WebCore::BackForwardListImpl::goBack):
+ (WebCore::BackForwardListImpl::goForward):
+ (WebCore::BackForwardListImpl::backListWithLimit):
+ (WebCore::BackForwardListImpl::forwardListWithLimit):
+ (WebCore::BackForwardListImpl::containsItem):
+ (WebCore::BackForwardListImpl::removeItem):
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Fix Chromium build.
+
+ * WebCore.gyp/WebCore.gyp:
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
+ Convert BackForwardList to an abstract base class and add BackForwardListImpl
+ as the concrete implementation of it.
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.exp.in:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * history/BackForwardController.cpp:
+ (WebCore::BackForwardController::BackForwardController):
+ * history/BackForwardController.h:
+ * history/BackForwardList.cpp: Removed.
+ * history/BackForwardList.h:
+ (WebCore::BackForwardList::~BackForwardList):
+ (WebCore::BackForwardList::isBackForwardListImpl):
+ (WebCore::BackForwardList::BackForwardList):
+ * history/BackForwardListChromium.cpp:
+ * history/BackForwardListImpl.cpp: Copied from WebCore/history/BackForwardList.cpp.
+ * history/BackForwardListImpl.h: Copied from WebCore/history/BackForwardList.h.
+ (WebCore::BackForwardListImpl::isBackForwardListImpl):
+
+2010-07-08 Vitaly Repeshko <vitalyr@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Fix adoptRef usage violations (mostly in chromium)
+ https://bugs.webkit.org/show_bug.cgi?id=41863
+
+ * bindings/v8/V8DOMWrapper.cpp:
+ (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
+ * bindings/v8/V8NodeFilterCondition.h:
+ (WebCore::V8NodeFilterCondition::create):
+ * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
+ (WebCore::getNamedItems):
+ * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
+ (WebCore::getNamedItems):
+ * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
+ (WebCore::V8HTMLFormElement::namedPropertyGetter):
+ * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
+ (WebCore::V8HTMLSelectElement::namedPropertyGetter):
+ * bindings/v8/custom/V8NamedNodesCollection.h:
+ (WebCore::V8NamedNodesCollection::create):
+ (WebCore::V8NamedNodesCollection::V8NamedNodesCollection):
+ * storage/IDBDatabaseRequest.cpp:
+ (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
+ * storage/IndexedDatabaseRequest.cpp:
+ (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
+
+2010-07-08 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ Silence a few noisy build rules.
+
+ * GNUmakefile.am:
+
+2010-07-08 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Canvas putImageData() resets painter state
+ https://bugs.webkit.org/show_bug.cgi?id=41827
+
+ Use drawImage() to copy pixels in putImageData() instead of QPixmap::operator=
+
+ Test: fast/canvas/canvas-state-intact-after-putImageData.html
+
+ * platform/graphics/qt/ImageBufferQt.cpp:
+ (WebCore::putImageData):
+
+2010-07-08 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Do not invoke shortcuts popup upon bare '?' if it's typed
+ into an input field.
+ https://bugs.webkit.org/show_bug.cgi?id=41760
+
+ * inspector/front-end/inspector.js:
+ (WebInspector.documentKeyDown):
+
+2010-07-08 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Kent Tamura.
+
+ [WINCE] Buildfix for EventHandler
+ https://bugs.webkit.org/show_bug.cgi?id=41829
+
+ SM_MENUDROPALIGNMENT isn't supported on WinCE.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::sendContextMenuEventForKey):
+
+2010-07-08 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by David Levin.
+
+ Fix characters with unicode-bidi-mirror property are not correctly
+ mirrored in Linux.
+ https://bugs.webkit.org/show_bug.cgi?id=41305
+
+ Since harfbuzz does not do mirroring, chromium should iterate each
+ character in the string and mirror it if needed before passing the
+ string to harfbuzz for shaping.
+
+ Test: fast/text/international/bidi-mirror-he-ar.html
+
+ * platform/graphics/chromium/FontLinux.cpp:
+ (WebCore::TextRunWalker::TextRunWalker):
+ (WebCore::TextRunWalker::~TextRunWalker):
+
+2010-07-08 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Rob Buis & Dirk Schulze.
+
+ SVG text transformed incorrectly when a transform and gradient applied
+ https://bugs.webkit.org/show_bug.cgi?id=41563
+
+ When rendering filled/stroked text with a gradient, RenderSVGResourceGradient creates a mask image,
+ renders the text into the image, and then clips the current context against that image buffer,
+ and filling a rect afterwards. This happened in the wrong coordinate space so far. Don't actually
+ try to compute the right transformation matrix (which failed), but extract it directly from the
+ GraphicsContext and apply this transformation to the mask image context.
+
+ Fixes pixellation in svg/batik/text/textEffect3.svg and makes the new test svg/custom/text-rotated-gradient.svg pass.
+ Only affects CoreGraphics platforms.
+
+ Test: svg/custom/text-rotated-gradient.svg
+
+ * rendering/RenderSVGResourceGradient.cpp:
+ (WebCore::absoluteTransformFromContext):
+ (WebCore::createMaskAndSwapContextForTextGradient):
+ (WebCore::clipToTextMask):
+
+2010-07-07 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Crash when re-entering message loop
+ https://bugs.webkit.org/show_bug.cgi?id=41697
+
+ A Chromium-specific test case will be submitted into Chromium shortly.
+
+ * page/PageGroupLoadDeferrer.cpp:
+ (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
+ * page/PageGroupLoadDeferrer.h:
+ (WebCore::PageGroupLoadDeferrer::nextDeferrer):
+
+2010-07-07 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: skip breakpoints when script is already paused
+ https://bugs.webkit.org/show_bug.cgi?id=41768
+
+ Test: inspector/debugger-no-nested-pause.html
+
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::handleV8DebugEvent):
+
+2010-07-08 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ WebCore/benchmarks/parser/html-parser.html spends a lot of time in deprecatedParseURL
+ https://bugs.webkit.org/show_bug.cgi?id=41807
+
+ Wow. This was an awful bug. We were always taking the slow case
+ every time we parsed a URL. This is about a 10% speedup on our
+ parsing benchmark, and might cause as much as a 1% speedup for Apple's
+ PLT (even though I can't run that).
+
+ We still spend a lot of time in deprecatedParseURL. We might consider
+ inlining it if its being kept around much longer.
+
+ No behavioral change, just fixing a broken optimization.
+
+ * css/CSSHelper.cpp:
+ (WebCore::deprecatedParseURL):
+ - We only need to strip characters <= '\r', not >.
+
+2010-07-08 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: factor out common part of debugger tests
+ https://bugs.webkit.org/show_bug.cgi?id=41836
+
+ * bindings/js/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::recompileAllJSFunctions): postpone script recompilation if JS stack is not empty.
+
+2010-07-08 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Kent Tamura.
+
+ Buildfix for !ENABLE(SVG_ANIMATION) after r51567.
+ https://bugs.webkit.org/show_bug.cgi?id=41803
+
+ * svg/SVGDocumentExtensions.cpp:
+ (WebCore::SVGDocumentExtensions::sampleAnimationAtTime):
+
+2010-07-07 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ [V8] Fix document wrapper memory leak in bindings.
+ https://bugs.webkit.org/show_bug.cgi?id=41771
+
+ * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
+ (WebCore::V8HTMLDocument::WrapInShadowObject): Do not create static persistent handle
+ to shadowConstructor because it keeps the first context alive forever.
+
+2010-07-07 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Enable smooth pixmap transforms by default
+ https://bugs.webkit.org/show_bug.cgi?id=41774
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
+ (WebCore::GraphicsContext::setImageInterpolationQuality):
+
+2010-07-07 Jesus Sanchez-Palencia <jesus@webkit.org>
+
+ Reviewed by Antti Koivisto.
+
+ [Qt] Missing include to build QtWebKit with WebKit2 in MediaPlayerPrivatePhonon.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=41767
+
+ * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp: Add Logging.h include
+
+2010-07-07 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Move v8-related script offset conversion to DebuggerScript.js
+ https://bugs.webkit.org/show_bug.cgi?id=41755
+
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::dispatchDidParseSource):
+
+2010-07-07 Nicolas Weber <thakis@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+ https://bugs.webkit.org/show_bug.cgi?id=41580
+
+ Fix rendering of radial gradients in skia if both points of the
+ gradient are the same and r0 > 0.
+
+ Test: fast/gradients/radial-centered.html
+
+ * platform/graphics/skia/GradientSkia.cpp:
+ (WebCore::Gradient::platformGradient):
+
+2010-06-18 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Ojan Vafai.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26526
+ Add support for input events (oninput) to contentEditable elements
+
+ Made a default event handler on the Node to dispatch an input event when
+ webkitEditableContentChanged arrived.
+
+ Test: fast/events/event-input-contentEditable.html
+
+ * dom/Node.cpp:
+ (WebCore::Node::defaultEventHandler):
+
+2010-07-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Fix adoptRef assertion failures caused by stack-allocated ResourceHandle objects
+ https://bugs.webkit.org/show_bug.cgi?id=41823
+
+ * platform/network/android/ResourceHandleAndroid.cpp:
+ (WebCore::ResourceHandle::loadResourceSynchronously): Use adoptRef and new instead
+ of allocating an object on the stack.
+ * platform/network/curl/ResourceHandleCurl.cpp:
+ (WebCore::ResourceHandle::loadResourceSynchronously): Ditto.
+ * platform/network/qt/ResourceHandleQt.cpp:
+ (WebCore::ResourceHandle::loadResourceSynchronously): Ditto.
+
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::ResourceHandle::loadResourceSynchronously): Use create instead of
+ allocating an object on the stack.
+
+2010-07-07 Joseph Pecoraro <joepeck@webkit.org>
+
+ Rubber-stamped by Pavel Feldman.
+
+ Web Inspector: All RefPtr arguments and return values should be changed to PassRefPtr according to common practice.
+ https://bugs.webkit.org/show_bug.cgi?id=41759
+
+ * inspector/CodeGeneratorInspector.pm:
+
+2010-07-07 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX: TextArea should return AXSelectedTextRange of 0,0 if the cursor is not in the text area
+ https://bugs.webkit.org/show_bug.cgi?id=41810
+
+ Test: platform/mac/accessibility/selected-text-range-for-empty-textarea.html
+
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
+
+2010-07-07 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ AX: Data table heuristics: assume data table if at least one row or column of TH cells exist
+ https://bugs.webkit.org/show_bug.cgi?id=41806
+
+ Test: platform/mac/accessibility/table-with-row-col-of-headers.html
+
+ * accessibility/AccessibilityTable.cpp:
+ (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
+
+2010-07-07 Mark Rowe <mrowe@apple.com>
+
+ Fix the build.
+
+ Xcode decided to change the reference type from "Relative to Build Product" to "Relative to Group"
+ when I moved the file between folders. That's incredibly confusing so I'll file a bug against Xcode.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-07-07 Mark Rowe <mrowe@apple.com>
+
+ Fix the MathML build.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): Fix a typo in a variable name.
+
+2010-07-07 James Hawkins <jhawkins@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Move setSuggestedValue() and suggestedValue() back to public as it's
+ now used by WebInputElement.
+ https://bugs.webkit.org/show_bug.cgi?id=41785
+
+ No new tests, as the method is only being used by Chromium's WebKit
+ API.
+
+ * html/HTMLInputElement.h:
+
+2010-07-07 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Clean up the project file slightly.
+
+ Remove obsolete .exp files, add the new .exp.in file, and move ExportFileGenerator.cpp in to the Exports collection.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-07-07 James Robinson <jamesr@chromium.org> and Vincent Scheib <schieb@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ WebCore::GLES2Context should allow creating onscreen and offscreen contexts
+ https://bugs.webkit.org/show_bug.cgi?id=41492
+
+ You should be able to create a GLES2Context for rendering both on screen
+ and off screen (to a texture). Chromium's layer renderer (used for compositing)
+ does the former. Currently WebGL does the latter by side stepping the
+ WebCore::GLES2Context API completely. Longer term it should move over to using this.
+
+ * platform/chromium/GLES2Context.h:
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::initGL):
+
+2010-07-07 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Document::ownerElement() should return an HTMLFrameOwnerElement
+ https://bugs.webkit.org/show_bug.cgi?id=41789
+
+ Change return type of RenderLayerCompositor::enclosingIFrameElement() to
+ HTMLFrameOwnerElement*. No behavioral changes.
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame):
+ (WebCore::RenderLayerCompositor::enclosingIFrameElement):
+ * rendering/RenderLayerCompositor.h:
+
+2010-07-07 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Sam Weinig.
+
+ Add reverseFind to Vector and deploy in HTML5 parser
+ https://bugs.webkit.org/show_bug.cgi?id=41778
+
+ This patch moves reverseFind from begin an
+ HTMLFormattingElementList-specific concept to begin a general Vector
+ concept. Also, instead of using Entry as the type for operator==, we
+ now use elements directly. The old code compiled because the Entry
+ constructor wasn't explicit, which means we were churning refs on every
+ comparison!
+
+ * html/HTMLFormattingElementList.cpp:
+ (WebCore::HTMLFormattingElementList::find):
+ (WebCore::HTMLFormattingElementList::bookmarkFor):
+ (WebCore::HTMLFormattingElementList::insertAt):
+ (WebCore::HTMLFormattingElementList::remove):
+ * html/HTMLFormattingElementList.h:
+ (WebCore::HTMLFormattingElementList::Entry::operator==):
+ (WebCore::HTMLFormattingElementList::Entry::operator!=):
+
+2010-07-07 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Turn on adoptRef assertion for RefCounted
+ https://bugs.webkit.org/show_bug.cgi?id=41547
+
+ The WebCore part of this fixes all the assertions I saw in testing.
+
+ * html/FileReader.cpp:
+ (WebCore::FileReader::readAsBinaryString): Added null checks.
+ Callers from JavaScript can pass the wrong type, which becomes null.
+ (WebCore::FileReader::readAsText): Ditto.
+ (WebCore::FileReader::readAsDataURL): Ditto.
+
+ * html/FileStreamClient.h: Removed unneeded include.
+
+ * html/FileStreamProxy.cpp:
+ (WebCore::FileStreamProxy::FileStreamProxy): Made inline and moved
+ some of the code, including the ref, into the create function.
+ (WebCore::FileStreamProxy::create): Moved some of the code from
+ the constructor here. It's safe to ref once the object has been
+ created and adopted.
+
+ * html/FileStreamProxy.h: Changed create function to no longer be
+ inlined. Also removed an unneeded include.
+
+ * page/EventSource.cpp:
+ (WebCore::EventSource::EventSource): Made inline, changed arguments
+ and moved code that involves the need to ref this object into the
+ create function. Also moved failure handling out there since it's
+ cleaner to have a function that fails than a constructor. For
+ example, the function can return 0.
+ (WebCore::EventSource::create): Moved some of the code from the
+ constructor here.
+
+ * page/EventSource.h: Removed unneeded includes. Made the
+ creation function non-inline. Changed the arguments to the constructor.
+
+ * storage/StorageAreaSync.cpp:
+ (WebCore::StorageAreaSync::StorageAreaSync): Made inline. Moved
+ code that requires ref'ing this object out to the create function.
+ (WebCore::StorageAreaSync::create): Moved some of the code from the
+ constructor here.
+
+ * storage/StorageAreaSync.h: Removed unneeded includes. Changed
+ the type of one of the constructor arguments from String to
+ const String&.
+
+ * workers/SharedWorker.cpp:
+ (WebCore::SharedWorker::SharedWorker): Made inline. Moved most of
+ the setup code out of here into the create function.
+ (WebCore::SharedWorker::create): Moved the code here.
+
+ * workers/SharedWorker.h: Removed unneeded includes. Made the
+ create function non-inline. Marked the toSharedWorker override private
+ to catch people doing an unnecessary virtual function call if they
+ already have a SharedWorker*.
+
+ * workers/Worker.cpp:
+ (WebCore::Worker::Worker): Made inline. Moved most of the setup code
+ out of here into the create function.
+ (WebCore::Worker::create): Moved the code here.
+
+ * workers/Worker.h: Made the create function non-inline. Changed
+ the arguments to the constructor.
+
+2010-07-07 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ AX: when a node's role changes, the AX tree might need to be updated
+ https://bugs.webkit.org/show_bug.cgi?id=41784
+
+ Test: platform/mac/accessibility/update-children-when-aria-role-changes.html
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
+ (WebCore::AccessibilityRenderObject::updateAccessibilityRole):
+
+2010-07-07 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ AX: when an element uses role="text" but no aria-label, it should default to textUnderElement()
+ https://bugs.webkit.org/show_bug.cgi?id=41780
+
+ Test: platform/mac/accessibility/static-text-role-uses-text-under-element.html
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::stringValue):
+ Fallback to textUnderElement() if text() does not return any explicitly set text.
+ (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
+ Remove erroneous check to ignore text elements that didn't have a explicit text value.
+
+2010-07-07 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Document::ownerElement() should return an HTMLFrameOwnerElement
+ https://bugs.webkit.org/show_bug.cgi?id=41789
+
+ Change the return type of Document::ownerElement() to an HTMLFrameOwnerElement, for better
+ type checking. No behavioral changes.
+
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ * dom/Document.cpp:
+ (WebCore::Document::ownerElement):
+ * dom/Document.h:
+ * editing/SelectionController.cpp:
+ * rendering/RenderBoxModelObject.cpp:
+ * rendering/RenderLayer.cpp:
+ * rendering/RenderView.cpp:
+
+2010-07-07 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ REGRESSION: GMail becomes blank after closing other tabs
+ https://bugs.webkit.org/show_bug.cgi?id=40421
+
+ RenderLayerCompositor's attach/detachRootPlatformLayer methods use
+ setNeedsStyleRecalc() in order to trigger acclerated compositing layers
+ to be hooked together across iframe boundaries. However, it was possible
+ for these to get called while inside of Document::recalcStyle(), which
+ is bad because it can cause the recalc to fail to get processed.
+
+ Fix this by using the existing queuePostAttachCallback() functionality
+ to delay the call to setNeedsStyleRecalc() if post-attach callbacks
+ are suspended (indicating that we're inside recalcStyle()).
+
+ No new tests because I wasn't able to make a test that shows the problem.
+
+ * dom/ContainerNode.h: Make queuePostAttachCallback() public.
+ * dom/ContainerNode.cpp:
+ (WebCore::ContainerNode::postAttachCallbacksAreSuspended): Added; returns
+ whether s_attachDepth is non-zero.
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::attachRootPlatformLayer): Call scheduleNeedsStyleRecalc()
+ instead of setNeedsStyleRecalc().
+ (WebCore::RenderLayerCompositor::detachRootPlatformLayer): Ditto.
+ (WebCore::needsStyleRecalcCallback): Here we call setNeedsStyleRecalc().
+ (WebCore::RenderLayerCompositor::scheduleNeedsStyleRecalc):
+ (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
+ * rendering/RenderLayerCompositor.h: Add scheduleNeedsStyleRecalc().
+
+2010-07-06 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Incorrect compositing order with negative z-index
+ https://bugs.webkit.org/show_bug.cgi?id=38959
+
+ When painting the contents of compositing layers whose phase is "GraphicsLayerPaintBackground"
+ (indicating that they are used for the background of elements with negative z-index children),
+ we need to paint the non-composited negative-z-order descendants at the end of the background phase, so
+ they appear behind composited negative-z-order descendants.
+
+ Test: compositing/z-order/negative-z-index.html
+
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::paintIntoLayer):
+
+2010-07-06 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Incorrect compositing order with negative z-index
+ https://bugs.webkit.org/show_bug.cgi?id=38959
+
+ Prerequisite: adopt new paintList() method that was added when painting compositing layer contents.
+ No behavioral changes.
+
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::paintIntoLayer):
+
+2010-07-07 Adam Barth <abarth@webkit.org>
+
+ Unreviewed.
+
+ Fix ASSERT in Eric's previous patch. I think he tested his patch in
+ Release and not Debug.
+
+ * html/HTMLFormattingElementList.h:
+ (WebCore::HTMLFormattingElementList::Entry::Entry):
+ (WebCore::HTMLFormattingElementList::findIndex):
+
+2010-07-07 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Grease the TreeBuilder's lightning
+ https://bugs.webkit.org/show_bug.cgi?id=41756
+
+ Brings the new TreeBuilder from 7s to 3s on the parser benchmark.
+ This makes performance comparable to the old parser.
+
+ We have not begun to fight! There is so much fat left on these bones.
+
+ * html/HTMLFormattingElementList.cpp:
+ (WebCore::HTMLFormattingElementList::find):
+ (WebCore::HTMLFormattingElementList::bookmarkFor):
+ (WebCore::HTMLFormattingElementList::insertAt):
+ (WebCore::HTMLFormattingElementList::remove):
+ * html/HTMLFormattingElementList.h:
+ (WebCore::HTMLFormattingElementList::findIndex):
+
+2010-07-07 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ HTMLTreeBuilder is way too slow
+ https://bugs.webkit.org/show_bug.cgi?id=41754
+
+ This takes us from 14s to 7s on our parsing benchmark.
+ That's still much slower than the old tree builder, but there
+ is a huge amount of fat left to trim.
+
+ Vector<T> wasn't able to inline all the Entry functions when
+ they were buried in the cpp. Turns out the active formatting elements
+ list is very hot.
+
+ I'm not sure Vector<T> is going to be the right data structure for us
+ in the end, but it has done alright for bring-up.
+
+ * html/HTMLFormattingElementList.cpp:
+ * html/HTMLFormattingElementList.h:
+ (WebCore::HTMLFormattingElementList::Entry::Entry):
+ (WebCore::HTMLFormattingElementList::Entry::~Entry):
+ (WebCore::HTMLFormattingElementList::Entry::isMarker):
+ (WebCore::HTMLFormattingElementList::Entry::element):
+ (WebCore::HTMLFormattingElementList::Entry::replaceElement):
+ (WebCore::HTMLFormattingElementList::Entry::operator==):
+ (WebCore::HTMLFormattingElementList::Entry::operator!=):
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ More OwnPtr work, including making clear set the pointer to 0 before deletion
+ https://bugs.webkit.org/show_bug.cgi?id=41727
+
+ * WebCore.exp.in: Updated.
+
+ * css/CSSSelector.h:
+ (WebCore::CSSSelector::RareData::RareData): Use adoptPtr.
+ (WebCore::CSSSelector::createRareData): Ditto.
+ * dom/SpaceSplitString.h:
+ (WebCore::SpaceSplitString::SpaceSplitString): Ditto.
+ (WebCore::SpaceSplitString::set): Ditto.
+ * history/CachedFrame.cpp:
+ (WebCore::CachedFrame::CachedFrame): Ditto.
+ (WebCore::CachedFrame::setCachedFramePlatformData): Ditto.
+
+ * history/CachedFrame.h: Use PassOwnPtr.
+
+ * loader/appcache/ApplicationCacheGroup.cpp:
+ (WebCore::CallCacheListenerTask::create): Use adoptPtr.
+ * loader/appcache/ApplicationCacheStorage.cpp:
+ (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
+ * platform/PurgeableBuffer.h:
+ (WebCore::PurgeableBuffer::create): Ditto.
+ * platform/graphics/GlyphMetricsMap.h:
+ (WebCore::::locatePageSlowCase): Ditto.
+ * platform/graphics/GraphicsLayer.h:
+ (WebCore::AnimationValue::AnimationValue): Ditto.
+ (WebCore::TransformAnimationValue::TransformAnimationValue): Ditto.
+ * platform/graphics/MediaPlayer.h:
+ (WebCore::MediaPlayer::create): Ditto.
+ * platform/graphics/SimpleFontData.h:
+ (WebCore::SimpleFontData::boundsForGlyph): Ditto.
+ * platform/mac/PurgeableBufferMac.cpp:
+ (WebCore::PurgeableBuffer::create): Ditto.
+ * rendering/InlineFlowBox.h:
+ (WebCore::InlineFlowBox::setHorizontalOverflowPositions): Ditto.
+ (WebCore::InlineFlowBox::setVerticalOverflowPositions): Ditto.
+ * rendering/RootInlineBox.h:
+ (WebCore::RootInlineBox::floats): Ditto.
+ * rendering/style/RenderStyle.h:
+ (WebCore::InheritedFlags::inheritAnimations): Ditto.
+ (WebCore::InheritedFlags::inheritTransitions): Ditto.
+
+ * rendering/style/SVGRenderStyleDefs.h: Use PassOwnPtr.
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
+ Add basic piping for BackForwardControllerClient.
+
+ * WebCore.exp.in:
+ * WebCore.xcodeproj/project.pbxproj:
+ * history/BackForwardController.cpp:
+ (WebCore::BackForwardController::BackForwardController):
+ * history/BackForwardControllerClient.h:
+ * page/Page.cpp:
+ (WebCore::Page::Page):
+ * page/Page.h:
+ * svg/graphics/SVGImage.cpp:
+ (WebCore::SVGImage::dataChanged):
+
+2010-07-07 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed build fix after r62577.
+
+ [EFL] build fix after r62577
+ https://bugs.webkit.org/show_bug.cgi?id=41764
+
+ No new functionality so no new tests.
+
+2010-07-07 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Scrollbars sometimes go dead and stop scrolling the view
+ https://bugs.webkit.org/show_bug.cgi?id=41711
+
+ Rework the setGtkAdjustment function slightly, make it have an
+ early return, and be more readable.
+
+ * platform/gtk/ScrollViewGtk.cpp:
+ (WebCore::ScrollView::setGtkAdjustments):
+
+2010-07-07 Kristian Monsen <kristianm@google.com>
+
+ Reviewed by Steve Block.
+
+ Updating Android to use the UserGestureIndicator class instead of Android specific code.
+ The rest of the changes are in parts of the Android port which are yet to be upstreamed.
+
+ No change in behavior, so no new test.
+
+ * platform/network/android/ResourceRequest.h:
+ (WebCore::ResourceRequest::ResourceRequest):
+ (WebCore::ResourceRequest::doUpdateResourceRequest):
+
+2010-07-07 Andy Estes <aestes@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Allow a beforeload listener to prevent loading of images in <object> tags.
+ https://bugs.webkit.org/show_bug.cgi?id=41027
+ <rdar://problem/8120596>
+
+ Tests: fast/dom/beforeload/image-object-before-load-innerHTML.html
+ fast/dom/beforeload/image-object-before-load.html
+
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::attach): Do not call
+ RenderImage::setCachedImage() at the end of attach(). Instead, allow
+ this to happen conditionally after beforeload is dispatched.
+ * loader/ImageLoader.cpp:
+ (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent): Render fallback
+ content if an object's load was cancelled.
+
+2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ <use> on <font-face> causes crashes, if SVGUseElement gets detached
+ https://bugs.webkit.org/show_bug.cgi?id=41621
+
+ Do not call removeFromMappedElementSheet() from the SVGFontFaceElement destructor,
+ as that can potentially cause the element to be reattached while destructing.
+
+ In order to fix the crash in the testcase, the order of calling the base-class detach
+ method in SVGUseElement and the instance/shadow tree destruction has to be reversed,
+ matching the order in removedFromDocument().
+
+ Test: svg/custom/use-font-face-crash.svg
+
+ * svg/SVGFontFaceElement.cpp:
+ (WebCore::SVGFontFaceElement::~SVGFontFaceElement): Remove removeFromMappedElementSheet() call.
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::detach): Reverse order of calling base-class detach method and instance/shadow tree destruction.
+
+2010-07-07 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ document.createEvent() should support DeviceOrientationEvent
+ https://bugs.webkit.org/show_bug.cgi?id=41618
+
+ Tests: fast/dom/DeviceOrientation/create-event.html
+
+ * dom/Document.cpp:
+ (WebCore::Document::createEvent):
+
+2010-07-07 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: show functions from internal browser scripts on the call stack if they
+ are there.
+ https://bugs.webkit.org/show_bug.cgi?id=41762
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/CallStackSidebarPane.js:
+ (WebInspector.CallStackSidebarPane.prototype.update):
+
+2010-07-07 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: All RefPtr arguments and return values should be
+ changed to PassRefPtr whenever it is possible according to common practice.
+ https://bugs.webkit.org/show_bug.cgi?id=41759
+
+ * inspector/CodeGeneratorInspector.pm:
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::pushGCEventRecords):
+ (WebCore::InspectorTimelineAgent::didInstallTimer):
+ (WebCore::InspectorTimelineAgent::didRemoveTimer):
+ (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
+ (WebCore::InspectorTimelineAgent::willSendResourceRequest):
+ (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
+ (WebCore::InspectorTimelineAgent::didMarkTimeline):
+ (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
+ (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
+ (WebCore::InspectorTimelineAgent::addRecordToTimeline):
+ (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
+ (WebCore::InspectorTimelineAgent::pushCurrentRecord):
+ * inspector/InspectorTimelineAgent.h:
+ (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
+ * inspector/TimelineRecordFactory.cpp:
+ (WebCore::TimelineRecordFactory::createGenericRecord):
+ (WebCore::TimelineRecordFactory::createGCEventData):
+ (WebCore::TimelineRecordFactory::createFunctionCallData):
+ (WebCore::TimelineRecordFactory::createEventDispatchData):
+ (WebCore::TimelineRecordFactory::createGenericTimerData):
+ (WebCore::TimelineRecordFactory::createTimerInstallData):
+ (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
+ (WebCore::TimelineRecordFactory::createXHRLoadData):
+ (WebCore::TimelineRecordFactory::createEvaluateScriptData):
+ (WebCore::TimelineRecordFactory::createMarkTimelineData):
+ (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
+ (WebCore::TimelineRecordFactory::createResourceSendRequestData):
+ (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
+ (WebCore::TimelineRecordFactory::createResourceFinishData):
+ (WebCore::TimelineRecordFactory::createReceiveResourceData):
+ (WebCore::TimelineRecordFactory::createPaintData):
+ (WebCore::TimelineRecordFactory::createParseHTMLData):
+ * inspector/TimelineRecordFactory.h:
+
+2010-07-07 Antti Koivisto <koivisto@iki.fi>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Initial WebKit2 implementation
+ https://bugs.webkit.org/show_bug.cgi?id=40233
+
+ Export some event conversion functions needed for WebKit2.
+
+ * platform/PlatformKeyboardEvent.h:
+ * platform/qt/PlatformKeyboardEventQt.cpp:
+ (WebCore::keyIdentifierForQtKeyCode):
+ (WebCore::windowsKeyCodeForKeyEvent):
+
+2010-07-06 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ DeviceOrientationEventConstructor should be exposed at window.DeviceOrientationEvent
+ https://bugs.webkit.org/show_bug.cgi?id=41685
+
+ Test: fast/dom/Window/window-properties-device-orientation.html
+ fast/dom/DeviceOrientation/window-property.txt
+
+ * page/DOMWindow.idl:
+
+2010-07-07 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62645.
+ http://trac.webkit.org/changeset/62645
+ https://bugs.webkit.org/show_bug.cgi?id=41757
+
+ "Broken inspector tests on several platforms" (Requested by
+ eseidel on #webkit).
+
+ * inspector/front-end/ScriptView.js:
+ (WebInspector.ScriptView.prototype._addBreakpoint):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel):
+ (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
+ (WebInspector.ScriptsPanel.prototype._breakpointAdded):
+ (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
+ (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
+ (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
+ * inspector/front-end/SourceView.js:
+ (WebInspector.SourceView.prototype._addBreakpoint):
+
+2010-07-07 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ JavaInstanceV8 needs to push a local reference frame to avoid table overflow.
+ https://bugs.webkit.org/show_bug.cgi?id=41516
+
+ This change is required to help prevent the Java virtual machine from
+ running out of local references. The Java virtual machine supports only
+ a limited number of local references. Normally, local references are
+ cleared when the native method returns.
+
+ This change adds calls to PushLocalFrame() and PopLocalFrame() around
+ each invocation of a method on JavaInstance. These calls instruct the
+ virtual machine to clear local references when the frame is popped.
+ This means that in the case where many calls to JavaInstance methods
+ are made within the same native call, local references are cleared as
+ soon as they are no longer needed, thus conserving references.
+
+ This change mirrors exactly JavaInstanceJSC.
+
+ No new tests.
+
+ * bridge/jni/v8/JavaInstanceV8.cpp:
+ (JavaInstance::virtualBegin):
+ (JavaInstance::virtualEnd):
+ * bridge/jni/v8/JavaInstanceV8.h:
+
+2010-07-06 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Inspector should remember the size of sidebars set by the user
+ https://bugs.webkit.org/show_bug.cgi?id=19207
+
+ * inspector/front-end/AbstractTimelinePanel.js:
+ (WebInspector.AbstractTimelinePanel):
+ * inspector/front-end/AuditsPanel.js:
+ (WebInspector.AuditsPanel):
+ * inspector/front-end/ConsolePanel.js:
+ (WebInspector.ConsolePanel):
+ * inspector/front-end/ElementsPanel.js:
+ (WebInspector.ElementsPanel.prototype.rightSidebarResizerDragEnd):
+ * inspector/front-end/Panel.js:
+ (WebInspector.Panel):
+ (WebInspector.Panel.prototype.get toolbarItemClass):
+ (WebInspector.Panel.prototype.show):
+ (WebInspector.Panel.prototype.createSidebar):
+ (WebInspector.Panel.prototype.get _sidebarWidthSettingName):
+ (WebInspector.Panel.prototype._endSidebarDragging):
+ (WebInspector.Panel.prototype.updateSidebarWidth):
+ (WebInspector.Panel.prototype.restoreSidebarWidth):
+ (WebInspector.Panel.prototype.saveSidebarWidth):
+ * inspector/front-end/ProfilesPanel.js:
+ (WebInspector.ProfilesPanel):
+ * inspector/front-end/ResourcesPanel.js:
+ (WebInspector.ResourcesPanel):
+ (WebInspector.ResourcesPanel.prototype.resourceTrackingWasEnabled):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel):
+ (WebInspector.ScriptsPanel.prototype._endSidebarResizeDrag):
+ (WebInspector.ScriptsPanel.prototype._sidebarResizeDrag):
+ (WebInspector.ScriptsPanel.prototype.setSidebarWidth):
+ * inspector/front-end/Settings.js:
+ (WebInspector.populateApplicationSettings):
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel):
+ * inspector/front-end/TimelinePanel.js:
+ (WebInspector.TimelinePanel):
+
+2010-07-05 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ DeviceOrientation should be renamed to DeviceOrientationController
+ https://bugs.webkit.org/show_bug.cgi?id=41608
+
+ No new tests, renaming only.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/DeviceOrientation.cpp: Removed.
+ * dom/DeviceOrientation.h: Removed.
+ * dom/DeviceOrientationController.cpp: Copied from WebCore/dom/DeviceOrientation.cpp.
+ (WebCore::DeviceOrientationController::DeviceOrientationController):
+ (WebCore::DeviceOrientationController::onDeviceOrientationChange):
+ * dom/DeviceOrientationController.h: Copied from WebCore/dom/DeviceOrientation.h.
+ * page/Page.cpp:
+ (WebCore::Page::Page):
+ * page/Page.h:
+ (WebCore::Page::deviceOrientationController):
+
+2010-07-07 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: do not activate all breakpoints on page reload
+ https://bugs.webkit.org/show_bug.cgi?id=41461
+
+ Test: inspector/debugger-breakpoints-not-activated-on-reload.html
+
+ * inspector/front-end/ScriptView.js:
+ (WebInspector.ScriptView.prototype._addBreakpoint):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel):
+ (WebInspector.ScriptsPanel.prototype._breakpointAdded):
+ (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
+ * inspector/front-end/SourceView.js:
+ (WebInspector.SourceView.prototype._addBreakpoint):
+
+2010-07-07 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Not reviewed. Rollout r62633 - test crashes after some last-minute modifications.
+
+ * svg/SVGFontFaceElement.cpp:
+ (WebCore::SVGFontFaceElement::~SVGFontFaceElement):
+
+2010-07-07 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Fix </html> handling in before head mode
+ https://bugs.webkit.org/show_bug.cgi?id=41752
+
+ Covered by html5lib/runner.html.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processEndTag):
+
+2010-07-07 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ </div> pops too many <div> elements in body
+ https://bugs.webkit.org/show_bug.cgi?id=41751
+
+ Another missing return!
+
+ While tracking this down I added some debugging code to both the
+ open elements stack and the active formatting elements list.
+
+ I also unwrapped a very long || chain to make it more readable.
+
+ * html/HTMLElementStack.cpp:
+ (WebCore::HTMLElementStack::show):
+ * html/HTMLElementStack.h:
+ * html/HTMLFormattingElementList.cpp:
+ (WebCore::HTMLFormattingElementList::show):
+ * html/HTMLFormattingElementList.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ HTMLTreeBuilder needs to handle <table><input>
+ https://bugs.webkit.org/show_bug.cgi?id=41744
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Teach HTMLTreeBuilder how to handle <button><button>
+ https://bugs.webkit.org/show_bug.cgi?id=41743
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Teach TreeBuilder how to handle <form><form>
+ https://bugs.webkit.org/show_bug.cgi?id=41741
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ <table> should auto-close <p> when not in quirks mode
+ https://bugs.webkit.org/show_bug.cgi?id=41740
+
+ This is already covered by multiple tests in html5lib/runner.html
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Make "in body" character handling reconstruct active formatting elements
+ https://bugs.webkit.org/show_bug.cgi?id=41739
+
+ This fixes a bunch of tests, and due to some other bug in our
+ formatting code, regresses two. I'll fix that bug in a separate
+ patch.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processCharacter):
+
+2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Darin Adler.
+
+ <use> on <font-face> causes crashes, if SVGUseElement gets detached
+ https://bugs.webkit.org/show_bug.cgi?id=41621
+
+ Do not call removeFromMappedElementSheet() from the destructor, as the call to document()->updateStyleSelector() that can potentially
+ cause the element to be reattached while destructing. It's not needed at all, because removedFromDocument() is called before destruction,
+ which already calls removeFromMappedElementSheet() - at this point it's still safe to update the style selector.
+
+ The crash is reproducable when using <use> on <font-face>.
+
+ Test: svg/custom/use-font-face-crash.svg
+
+ * svg/SVGFontFaceElement.cpp:
+ (WebCore::SVGFontFaceElement::~SVGFontFaceElement):
+
+2010-07-07 Hayato Ito <hayato@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Rolling out 'page-break-inside:avoid' part of the r54929.
+ Rebased the related layout tests, which are now expected to fail, as well.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41532
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::paintChildren):
+
+2010-07-07 Mark Rowe <mrowe@apple.com>
+
+ Fix failures in a handful of Java-related tests.
+
+ * WebCore.exp.in: Remove an extraneous ENABLE_ from an #if so that the condition
+ evalutes to true when we expect it to.
+
+2010-07-06 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Joseph Pecoraro.
+
+ Web Inspector: provide line numbers for inline styles.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41691
+
+ Test: inspector/styles-source-lines-inline.html
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseSheet):
+ * css/CSSParser.h:
+ * css/CSSStyleSheet.cpp:
+ (WebCore::CSSStyleSheet::parseString):
+ (WebCore::CSSStyleSheet::parseStringAtLine):
+ * css/CSSStyleSheet.h:
+ * dom/StyleElement.cpp:
+ (WebCore::StyleElement::process):
+ (WebCore::StyleElement::createSheet):
+ * dom/StyleElement.h:
+ * html/HTMLStyleElement.cpp:
+ (WebCore::HTMLStyleElement::HTMLStyleElement):
+ (WebCore::HTMLStyleElement::finishParsingChildren):
+ * html/HTMLStyleElement.h:
+ * inspector/InspectorCSSStore.cpp:
+ (WebCore::InspectorCSSStore::getRuleRangesForStyleSheet):
+ * inspector/InspectorDOMAgent.cpp:
+ (WebCore::InspectorDOMAgent::buildObjectForRule):
+ * inspector/front-end/DOMAgent.js:
+ (WebInspector.CSSStyleDeclaration.parseRule):
+ * inspector/front-end/StylesSidebarPane.js:
+ (WebInspector.StylePropertiesSection.else.linkifyUncopyable):
+ (WebInspector.StylePropertiesSection):
+
+2010-07-06 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Jon Honeycutt.
+
+ <rdar://problem/8163651> Wrong value type being supplied for kCTTypesetterOptionForcedEmbeddingLevel key
+
+ No change in behavior, so no new test.
+
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Use CFNumber instances
+ as the values of the kCTTypesetterOptionForcedEmbeddingLevel key, instead of CFBooleans.
+
+2010-07-06 Mark Rowe <mrowe@apple.com>
+
+ Fix production builds on Mac OS X.
+
+ * DerivedSources.make: Don't try and generate the export file during the installhdrs build phase.
+ It's not useful until much later in the build process, and it's not possible to generate it until
+ after the tool has been compiled anyway.
+ * WebCore.xcodeproj/project.pbxproj: Tweak how the ICU and forwarding headers are copied so that it
+ works in production builds once more.
+
+2010-07-06 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Expose URL matching from WebUserContentURLPattern
+ https://bugs.webkit.org/show_bug.cgi?id=41726
+ <rdar://problem/7910144>
+
+ * WebCore.exp.in: Export UserContentURLPattern::matches for use in WebKit.
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Fix <nobr><nobr> case in HTMLTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=41735
+
+ We were both not handling <nobr> correctly, as well as
+ never hitting the <nobr> case because our formatting
+ elements check was overzealous.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement start table tag in table mode
+ https://bugs.webkit.org/show_bug.cgi?id=41736
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement "act as if the banana has been peeled" (for lack of a better term)
+ https://bugs.webkit.org/show_bug.cgi?id=41734
+
+ The spec has a tricky passage that says "whenever a node would be
+ inserted into the current node, it must instead be foster parented."
+ This patch attempts to implement that requirement.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::attach):
+ (WebCore::HTMLConstructionSite::HTMLConstructionSite):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
+ (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
+ (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
+ (WebCore::HTMLConstructionSite::insertScriptElement):
+ (WebCore::HTMLConstructionSite::fosterParent):
+ * html/HTMLConstructionSite.h:
+ (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::RedirectToFosterParentGuard):
+ (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::~RedirectToFosterParentGuard):
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Fix </optgroup> in "in select" mode
+ https://bugs.webkit.org/show_bug.cgi?id=41733
+
+ I had to add a oneBelowTop() accessor.
+ I added some ASSERTs after looking at the fragment case
+ documentation. I'm now convinced that top() and oneBeforeTop()
+ should never be NULL, so we just ASSERT they aren't.
+
+ This is a very obscure corner of the HTML spec, but at least
+ we have a test for it. This makes one more html5lib test pass.
+
+ * html/HTMLConstructionSite.h:
+ (WebCore::HTMLConstructionSite::oneBelowTop):
+ * html/HTMLElementStack.cpp:
+ (WebCore::HTMLElementStack::topRecord):
+ (WebCore::HTMLElementStack::top):
+ (WebCore::HTMLElementStack::oneBelowTop):
+ * html/HTMLElementStack.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processEndTag):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Fix "in row" "Anything else" handling of end tags
+ https://bugs.webkit.org/show_bug.cgi?id=41731
+
+ I also fixed </br> handling to follow the spec more closely
+ since it implementation was old and didn't use all our
+ new processFake* hotness.
+
+ This is already covered by 3 tests, however we don't
+ pass them yet, due to lack of table foster parenting
+ code (which Adam is working on as we speak).
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+
+2010-07-06 Mark Rowe <mrowe@apple.com>
+
+ Fix clean builds on Mac OS X.
+
+ Since "Copy Forwarding and ICU Headers" was split in to a separate target
+ from the WebCore framework it no longer had automatica access to the
+ PRIVATE_HEADERS_FOLDER_PATH variable. This caused it to copy the header
+ files in to the wrong location. Fix that by giving PRIVATE_HEADERS_FOLDER_PATH
+ its correct value and ensuring that the path exists.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-07-06 Sam Weinig <sam@webkit.org>
+
+ Fix Gtk build.
+
+ * GNUmakefile.am:
+
+2010-07-06 Mark Rowe <mrowe@apple.com>
+
+ Tiger build fix.
+
+ Don't use WebCore's LDFLAGS when building WebCoreExportFileGenerator.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ "In cell" does not correctly handle <td><tr> or <td><td>
+ https://bugs.webkit.org/show_bug.cgi?id=41729
+
+ This change is mostly cleanup to try and prevent forgetting
+ tag name checks in the future by using inlines to reduce
+ copy/paste code.
+
+ 3 little bugs in InCellMode:
+ - Missing trTag from the long or statement (reason for the cleanup)
+ - Used || instead of &&
+ - Forgot to reprocess the tag after closeTheCell()
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Move fosterParent to HTMLConstructionSite
+ https://bugs.webkit.org/show_bug.cgi?id=41728
+
+ This paves the way for handling the default case of InTableMode
+ properly.
+
+ * html/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::fosterParent):
+ * html/HTMLConstructionSite.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Rubber-stamped by Eric Seidel.
+
+ Move HTMLConstructionSite to its own file. No behavior change.
+
+ * Android.mk:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * html/HTMLConstructionSite.cpp: Copied from WebCore/html/HTMLTreeBuilder.cpp.
+ (WebCore::HTMLNames::hasImpliedEndTag):
+ (WebCore::HTMLConstructionSite::attach):
+ (WebCore::HTMLConstructionSite::HTMLConstructionSite):
+ (WebCore::HTMLConstructionSite::~HTMLConstructionSite):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
+ (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
+ (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
+ * html/HTMLConstructionSite.h: Copied from WebCore/html/HTMLTreeBuilder.h.
+ * html/HTMLTreeBuilder.cpp:
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Mark Rowe <mrowe@apple.com>
+
+ Build fix.
+
+ The path to the generated file needs to be relative to the built product directory,
+ not to the project file.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-07-06 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <http://webkit.org/b/41725> REGRESSION(r62283): No longer possible to build for Tiger from SnowLeopard due to export file shenanigans
+
+ Change how the exports file is generated. Rather than having the logic for which symbols
+ to include be encoded in a Makefile that concatenated separate files, the logic is now
+ encoded as #if's in the base exports file. This ensures that the exact same preprocessor
+ settings are used when determining which symbols to export as when compiling the code that
+ defines the symbols.
+
+ * DerivedSources.make: Remove logic that determines which export files to concatenate.
+ Replace with an invocation of WebCoreExportFileGenerator.
+ * WebCore.3DRendering.exp: Removed.
+ * WebCore.AcceleratedCompositing.exp: Removed.
+ * WebCore.ClientBasedGeolocation.exp: Removed.
+ * WebCore.ContextMenus.exp: Removed.
+ * WebCore.DashboardSupport.exp: Removed.
+ * WebCore.DragSupport.exp: Removed.
+ * WebCore.Geolocation.exp: Removed.
+ * WebCore.Inspector.exp: Removed.
+ * WebCore.JNI.exp: Removed.
+ * WebCore.NPAPI.exp: Removed.
+ * WebCore.OrientationEvents.exp: Removed.
+ * WebCore.PluginHostProcess.exp: Removed.
+ * WebCore.ProtectionSpaceAuthCallback.exp: Removed.
+ * WebCore.SVG.Animation.exp: Removed.
+ * WebCore.SVG.Filters.exp: Removed.
+ * WebCore.SVG.ForeignObject.exp: Removed.
+ * WebCore.SVG.exp: Removed.
+ * WebCore.Tiger.exp: Removed.
+ * WebCore.Video.exp: Removed.
+ * WebCore.VideoProxy.exp: Removed.
+ * WebCore.exp.in: Renamed from WebCore/WebCore.base.exp. Merge the individual .exp
+ files in, wrapping the appropriate parts with the necessary #if's.
+ * WebCore.xcodeproj/project.pbxproj:
+ * make-exports-file-generator: Added.
+
+2010-07-06 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41723
+ Add BackForwardController class
+
+ - Add BackForwardController which currently only forwards to the existing
+ BackForwardList implementation. This is a first step toward allowing
+ for a proxying BackForwardList implementation.
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.base.exp:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * history/BackForwardController.cpp: Added.
+ (WebCore::BackForwardController::BackForwardController):
+ (WebCore::BackForwardController::~BackForwardController):
+ * history/BackForwardController.h: Added.
+ (WebCore::BackForwardController::client):
+ (WebCore::BackForwardController::list):
+ * history/BackForwardControllerClient.h: Added.
+ (WebCore::BackForwardControllerClient::~BackForwardControllerClient):
+ * page/Page.cpp:
+ (WebCore::Page::Page):
+ (WebCore::Page::~Page):
+ (WebCore::Page::backForwardList):
+ (WebCore::Page::goBack):
+ (WebCore::Page::goForward):
+ (WebCore::Page::canGoBackOrForward):
+ (WebCore::Page::goBackOrForward):
+ (WebCore::Page::getHistoryLength):
+ * page/Page.h:
+
+2010-07-06 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Unreviewed.
+
+ Fixes regression on API test by disabling the scrollbars before
+ configuring the adjustments.
+
+ * platform/gtk/ScrollViewGtk.cpp:
+ (WebCore::ScrollView::setGtkAdjustments):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add support for <li>, <dd> and <dt> nested tag closing
+ https://bugs.webkit.org/show_bug.cgi?id=41720
+
+ li, dd, and dt have nearly identical logic in HTML5, so I
+ attempted to make them share as much code as possible.
+
+ This fixes a bunch of subtests for html5lib/runner.html
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Factor HTMLConstructionSite out of HTMLTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=41716
+
+ The HTMLContructionSite is the model object on which the
+ HTMLTreeBuilder (a controller) acts.
+
+ No behavior change. I'll move this class into its own file in a
+ followup patch.
+
+ * html/HTMLFormattingElementList.h:
+ (WebCore::HTMLFormattingElementList::at):
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
+ (WebCore::HTMLConstructionSite::HTMLConstructionSite):
+ (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
+ (WebCore::HTMLTreeBuilder::processDoctypeToken):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
+ (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
+ (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
+ (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInScope):
+ (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
+ (WebCore::HTMLTreeBuilder::closeTheCell):
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
+ (WebCore::HTMLTreeBuilder::findFosterParentFor):
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
+ (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processComment):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode):
+ (WebCore::HTMLTreeBuilder::processStartTagForInHead):
+ (WebCore::HTMLConstructionSite::insertDoctype):
+ (WebCore::HTMLConstructionSite::insertComment):
+ (WebCore::HTMLConstructionSite::insertCommentOnDocument):
+ (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
+ (WebCore::HTMLConstructionSite::createElementAndAttachToCurrent):
+ (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
+ (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
+ (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
+ (WebCore::HTMLConstructionSite::insertElement):
+ (WebCore::HTMLConstructionSite::insertSelfClosingElement):
+ (WebCore::HTMLConstructionSite::insertFormattingElement):
+ (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
+ (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
+ (WebCore::HTMLConstructionSite::insertScriptElement):
+ (WebCore::HTMLTreeBuilder::processScriptStartTag):
+ (WebCore::HTMLConstructionSite::insertTextNode):
+ (WebCore::HTMLConstructionSite::createElement):
+ (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
+ (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
+ (WebCore::HTMLTreeBuilder::generateImpliedEndTagsWithExclusion):
+ (WebCore::HTMLTreeBuilder::generateImpliedEndTags):
+ * html/HTMLTreeBuilder.h:
+ (WebCore::HTMLConstructionSite::currentElement):
+ (WebCore::HTMLConstructionSite::openElements):
+ (WebCore::HTMLConstructionSite::activeFormattingElements):
+ (WebCore::HTMLConstructionSite::head):
+ (WebCore::HTMLConstructionSite::form):
+ (WebCore::HTMLConstructionSite::releaseForm):
+ (WebCore::HTMLConstructionSite::setForm):
+ (WebCore::HTMLConstructionSite::fragmentScriptingPermission):
+ (WebCore::HTMLConstructionSite::attach):
+
+2010-07-06 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Scrollbars sometimes go dead and stop scrolling the view
+ https://bugs.webkit.org/show_bug.cgi?id=41711
+
+ Fixes GtkScrolledWindow scrollbars not actually scrolling the page
+ in certain conditions. No tests because it is hard to reproduce,
+ and depends on interaction with a widget that is outside of the
+ WebView, which is tricky.
+
+ * platform/gtk/ScrollViewGtk.cpp:
+ (WebCore::ScrollView::setGtkAdjustments):
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Simplify access to element attribute map, removing unneeded functions
+ https://bugs.webkit.org/show_bug.cgi?id=41703
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::canShareStyleWithElement): Use the
+ attributeMap function instead of the mappedAttributes function.
+ (WebCore::CSSStyleSelector::styleForElement): Ditto.
+
+ * dom/Element.cpp:
+ (WebCore::Element::~Element): Renamed namedAttrMap to m_attributeMap.
+ (WebCore::Element::removeAttribute): Ditto.
+ (WebCore::Element::getAttribute): Ditto.
+ (WebCore::Element::setAttribute): Ditto.
+ (WebCore::Element::setAttributeMap): Ditto.
+ (WebCore::Element::hasAttributes): Ditto.
+ (WebCore::Element::createAttributeMap): Ditto.
+ (WebCore::Element::insertedIntoDocument): Ditto.
+ (WebCore::Element::removedFromDocument): Ditto.
+ (WebCore::Element::getURLAttribute): Ditto.
+
+ * dom/Element.h: Removed unneeded virtual attributes function.
+ Made read-only argument to attributes function default to false.
+ (Later, we'll eliminate this.) Renamed namedAttrMap to m_attributeMap
+ and made it private instead of protected.
+
+ * dom/StyledElement.cpp:
+ (WebCore::StyledElement::attributeChanged): Use attributeMap function
+ instead of namedAttrMap data member or mappedAttributes function.
+ (WebCore::StyledElement::classAttributeChanged): Ditto.
+ (WebCore::StyledElement::parseMappedAttribute): Ditto.
+
+ * dom/StyledElement.h: Removed mappedAttributes function and changed
+ callers to use attributeMap function instead.
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::setInputType): Use attributeMap instead of
+ mappedAttributes.
+ * svg/SVGStyledElement.cpp:
+ (WebCore::SVGStyledElement::getPresentationAttribute): Ditto.
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add a build rule that removes the old generated Obj-C bindings for PluginArray and MimeTypeArray.
+
+ * DerivedSources.make:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Unreviewed.
+
+ Make the remaining insertion modes explicit.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+
+2010-07-06 Alexey Proskuryakov <ap@apple.com>
+
+ Not reviewed, fixing a simple copy/paste mistake.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41156
+ Cross origin XMLHttpRequest should log the reason why connection failed
+
+ Covered by xmlhttprequest/access-control-basic-non-simple-deny-cached.html
+
+ * loader/CrossOriginPreflightResultCache.cpp:
+ (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders): Fix incorrectly
+ copy/pasted header field name.
+
+2010-07-06 Xan Lopez <xlopez@igalia.com>
+
+ GTK+ fixes for the DOM plug-in renaming Apocalypse.
+
+ * GNUmakefile.am:
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Yet another Windows build fix.
+
+ * DerivedSources.cpp:
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Fix Windows build.
+
+ * WebCore.vcproj/WebCore.vcproj:
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ More build fixes.
+
+ * WebCore.gypi:
+ * WebCore.pro:
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Try to fix Qt build.
+
+ * WebCore.pro:
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Attempt to fix GTK+ build.
+
+ * GNUmakefile.am:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Address reviewer comments from https://bugs.webkit.org/show_bug.cgi?id=41671
+
+ Deploy isTableBodyContextTag where possible. No behavior change.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Build fixes.
+
+ * WebCore.gypi:
+ * bindings/js/JSBindingsAllInOne.cpp:
+
+2010-07-06 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ DOM plug-in related renames
+ https://bugs.webkit.org/show_bug.cgi?id=41709
+
+ This is in preparation for using "Plugin" for something other than a DOM object.
+
+ MimeType => DOMMimeType
+ MimeTypeArray => DOMMimeTypeArray
+ Plugin => DOMPlugin
+ PluginArray => DOMPluginArray
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.pri:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSDOMMimeTypeArrayCustom.cpp: Added.
+ (WebCore::JSDOMMimeTypeArray::canGetItemsForName):
+ (WebCore::JSDOMMimeTypeArray::nameGetter):
+ * bindings/js/JSDOMPluginArrayCustom.cpp: Added.
+ (WebCore::JSDOMPluginArray::canGetItemsForName):
+ (WebCore::JSDOMPluginArray::nameGetter):
+ * bindings/js/JSDOMPluginCustom.cpp: Added.
+ (WebCore::JSDOMPlugin::canGetItemsForName):
+ (WebCore::JSDOMPlugin::nameGetter):
+ * bindings/js/JSMimeTypeArrayCustom.cpp: Removed.
+ * bindings/js/JSPluginArrayCustom.cpp: Removed.
+ * bindings/js/JSPluginCustom.cpp: Removed.
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * page/DOMWindow.idl:
+ * page/Navigator.cpp:
+ (WebCore::Navigator::plugins):
+ (WebCore::Navigator::mimeTypes):
+ * page/Navigator.h:
+ * page/Navigator.idl:
+ * plugins/DOMMimeType.cpp: Added.
+ (WebCore::DOMMimeType::DOMMimeType):
+ (WebCore::DOMMimeType::~DOMMimeType):
+ (WebCore::DOMMimeType::type):
+ (WebCore::DOMMimeType::suffixes):
+ (WebCore::DOMMimeType::description):
+ (WebCore::DOMMimeType::enabledPlugin):
+ * plugins/DOMMimeType.h: Added.
+ (WebCore::DOMMimeType::create):
+ (WebCore::DOMMimeType::mimeClassInfo):
+ * plugins/DOMMimeType.idl: Added.
+ * plugins/DOMMimeTypeArray.cpp: Added.
+ (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
+ (WebCore::DOMMimeTypeArray::~DOMMimeTypeArray):
+ (WebCore::DOMMimeTypeArray::length):
+ (WebCore::DOMMimeTypeArray::item):
+ (WebCore::DOMMimeTypeArray::canGetItemsForName):
+ (WebCore::DOMMimeTypeArray::namedItem):
+ (WebCore::DOMMimeTypeArray::getPluginData):
+ * plugins/DOMMimeTypeArray.h: Added.
+ (WebCore::DOMMimeTypeArray::create):
+ (WebCore::DOMMimeTypeArray::disconnectFrame):
+ * plugins/DOMMimeTypeArray.idl: Added.
+ * plugins/DOMPlugin.cpp: Added.
+ (WebCore::DOMPlugin::DOMPlugin):
+ (WebCore::DOMPlugin::~DOMPlugin):
+ (WebCore::DOMPlugin::name):
+ (WebCore::DOMPlugin::filename):
+ (WebCore::DOMPlugin::description):
+ (WebCore::DOMPlugin::length):
+ (WebCore::DOMPlugin::item):
+ (WebCore::DOMPlugin::canGetItemsForName):
+ (WebCore::DOMPlugin::namedItem):
+ * plugins/DOMPlugin.h: Added.
+ (WebCore::DOMPlugin::create):
+ (WebCore::DOMPlugin::pluginInfo):
+ * plugins/DOMPlugin.idl: Added.
+ * plugins/DOMPluginArray.cpp: Added.
+ (WebCore::DOMPluginArray::DOMPluginArray):
+ (WebCore::DOMPluginArray::~DOMPluginArray):
+ (WebCore::DOMPluginArray::length):
+ (WebCore::DOMPluginArray::item):
+ (WebCore::DOMPluginArray::canGetItemsForName):
+ (WebCore::DOMPluginArray::namedItem):
+ (WebCore::DOMPluginArray::refresh):
+ (WebCore::DOMPluginArray::pluginData):
+ * plugins/DOMPluginArray.h: Added.
+ (WebCore::DOMPluginArray::create):
+ (WebCore::DOMPluginArray::disconnectFrame):
+ * plugins/DOMPluginArray.idl: Added.
+ * plugins/MimeType.cpp: Removed.
+ * plugins/MimeType.h: Removed.
+ * plugins/MimeType.idl: Removed.
+ * plugins/MimeTypeArray.cpp: Removed.
+ * plugins/MimeTypeArray.h: Removed.
+ * plugins/MimeTypeArray.idl: Removed.
+ * plugins/Plugin.cpp: Removed.
+ * plugins/Plugin.h: Removed.
+ * plugins/Plugin.idl: Removed.
+ * plugins/PluginArray.cpp: Removed.
+ * plugins/PluginArray.h: Removed.
+ * plugins/PluginArray.idl: Removed.
+
+2010-07-06 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41156
+ Cross origin XMLHttpRequest should log the reason why connection failed
+
+ Covered by multiple existing tests.
+
+ * loader/CrossOriginAccessControl.cpp:
+ (WebCore::passesAccessControlCheck):
+ * loader/CrossOriginAccessControl.h:
+ * loader/CrossOriginPreflightResultCache.cpp:
+ (WebCore::CrossOriginPreflightResultCacheItem::parse):
+ (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod):
+ (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
+ (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest):
+ * loader/CrossOriginPreflightResultCache.h:
+ Functions that check requests now take a string argument for error explanation.
+
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Make an informative error
+ if crossOriginRequestPolicy is DenyCrossOriginRequests. This doesn't currently go anywhere,
+ since XMLHttpRequest is the only client that logs from didFail(), and it of course supports
+ cross origin requests.
+ (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Make an informative
+ error when trying to e.g. send a cross origin XMLHttpRequest to ftp://.
+ (WebCore::DocumentThreadableLoader::didReceiveResponse): Pass error explanation from cross
+ origin access control code.
+ (WebCore::DocumentThreadableLoader::preflightFailure): Ditto.
+
+ * loader/DocumentThreadableLoader.h: preflightFailure() now takes arguments.
+
+ * platform/network/ResourceErrorBase.cpp:
+ * platform/network/ResourceErrorBase.h:
+ Added a constant for WebKit error domain.
+
+ * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::didFail): Report the error to console.
+ One day we'll be able to also provide script file and line number here, so it's best to
+ pass error all the way down to XHR for reporting.
+
+2010-07-06 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: convert script offset to webkit format in v8 ScriptDebugServer
+ https://bugs.webkit.org/show_bug.cgi?id=41696
+
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::dispatchDidParseSource):
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement InTableBodyMode
+ https://bugs.webkit.org/show_bug.cgi?id=41671
+
+ In the process of implementing this patch, Eric and I discussed some of
+ the high-level organization of the HTMLTreeBuilder class. We'd like to
+ split it up into smaller pieces. In the meantime, I've reordered some
+ of the declarations in the header to make the relations between the
+ different kinds of functions clearer.
+
+ * html/HTMLElementStack.cpp:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTagForInTable):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTagForInTable):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Leandro Pereira <leandro@profusion.mobi>
+
+ Unreviewed build fix.
+
+ [EFL] Generate code for RemoteInspector.
+
+ * CMakeLists.txt:
+
+2010-07-06 Varun Jain <varunjain@chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ Implementing CURVE_TO_CUBIC specification for SVG Path Segments. Currently,
+ curves specified in relative cordinates such as using createCurvetoCubicRel()
+ javascript function are not displayed.
+
+ SVG CurvetoCubic Path not implemented for relative cordinates
+ https://bugs.webkit.org/show_bug.cgi?id=41294
+
+ Test: svg/custom/svg-curve-with-relative-cordinates.html
+
+ * svg/SVGPathSegList.cpp:
+ (WebCore::SVGPathSegList::toPathData):
+
+2010-07-06 Alexey Proskuryakov <ap@apple.com>
+
+ Roll out patch for https://bugs.webkit.org/show_bug.cgi?id=41348 "Remove global variables
+ from XSLTProcessorLibxslt.cpp", as it causes crashes on buildbot.
+
+ * xml/XSLTProcessor.h:
+ (WebCore::XSLTProcessor::xslStylesheet):
+ (WebCore::XSLTProcessor::XSLTProcessor):
+ * xml/XSLTProcessorLibxslt.cpp:
+ (WebCore::docLoaderFunc):
+ (WebCore::setXSLTLoadCallBack):
+ (WebCore::xsltStylesheetPointer):
+ (WebCore::XSLTProcessor::transformToString):
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add processing for "in cell" mode and end tag processing for "in row"
+ https://bugs.webkit.org/show_bug.cgi?id=41688
+
+ I added several new table tests, not all of which pass yet.
+ Remaining failures exist due to lack of full "in table body" mode
+ support, which Adam has an outstanding patch for.
+ I believe all of the various branches added by this change are
+ covered now by our tests.
+
+ * html/HTMLElementStack.cpp:
+ - Added QualifiedName versions of inScope functions.
+ Using tagName.localName() is wrong for non-HTML elements,
+ in preparation for supporting foreign content we should centralize
+ our handling of QualifiedName in these functions instead of
+ sprinkling more .localName() calls around the code.
+ (WebCore::HTMLElementStack::inScope):
+ (WebCore::HTMLElementStack::inListItemScope):
+ (WebCore::HTMLElementStack::inTableScope):
+ * html/HTMLElementStack.h:
+ * html/HTMLFormattingElementList.cpp:
+ (WebCore::HTMLFormattingElementList::Entry::operator==):
+ (WebCore::HTMLFormattingElementList::Entry::operator!=):
+ - Calling element() on markers will assert, so use m_element.
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::closeTheCell):
+ - Implemented per the spec.
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ - Use isTableBodyContextTag where possible.
+ - Add InCellMode.
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
+ - Use isTableBodyContextTag where possible.
+ (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
+ - This code is needed from at least two callsites.
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ - Add InCellMode and InRowMode
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Make <a> auto-close any parent <a> tag
+ https://bugs.webkit.org/show_bug.cgi?id=41684
+
+ I first fixed <a> to auto-close surrounding <a> tags.
+ That caused about 3 more test passes and one new test failure.
+ The test failure was due to <marque> not adding a marker
+ to the active formatting elements.
+
+ So I made a one-line change to fix <marque>. However that hit an
+ ASSERT due to a bug in indexOfFirstUnopenFormattingElement.
+ Fixing indexOfFirstUnopenFormattingElement fixed another bunch of
+ Adoption Agency related tests (clearly this was the second typo
+ which was causing all the adoption agency failures).
+
+ However fixing <marque> and indexOfFirstUnopenFormattingElement,
+ added yet another failure due to missing support for </p>
+ automatically adding an implicit <p> tag. Fixing </p> finally
+ got the tests to a stable (all improving) state.
+
+ In the end, these 4 minor (and very well tested) tweaks fixed a total
+ of 9 subtests in html5lib/runner.html.
+ Another subtest progressed, but did not fully pass due to missing
+ <table> foster-parenting support.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
+
+2010-07-02 Philippe Normand <pnormand@igalia.com>
+
+ Reviewed by Xan Lopez
+
+ [GStreamer] can't seek past maxTimeLoaded value
+ https://bugs.webkit.org/show_bug.cgi?id=40526
+
+ Extended the seekable range to the whole media. This allows video
+ played with progressive download to be seeked past the current
+ buffered position.
+
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
+ (WebCore::MediaPlayerPrivateGStreamer::updateStates):
+
+2010-07-06 Andreas Wictor <andreas.wictor@xcerion.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Remove global variables from XSLTProcessorLibxslt.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=41348
+
+ Remove the globalProcessor and globalDocLoader global variables
+ by using the _private field that exists on most libxml structs.
+
+ No new tests, existing tests covers this.
+
+ * xml/XSLTProcessor.h:
+ (WebCore::XSLTProcessor::sourceNode):
+ (WebCore::XSLTProcessor::XSLTProcessor):
+ * xml/XSLTProcessorLibxslt.cpp:
+ (WebCore::registredXSLTProcessors):
+ (WebCore::registredXSLStyleSheets):
+ (WebCore::docLoaderFunc):
+ (WebCore::xsltStylesheetPointer):
+ (WebCore::XSLTProcessor::transformToString):
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Fix Cairo build.
+
+ * platform/graphics/cairo/GraphicsContextCairo.cpp:
+ (WebCore::GraphicsContext::createPlatformShadow): Removed unnneded release
+ in code that passes a PassOwnPtr to another PassOwnPtr.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Fix Chromium build.
+
+ * platform/graphics/skia/SkiaUtils.cpp:
+ (WebCore::scratchContext): Use leakPtr instead of release.
+
+2010-07-06 Martin Robinson <mrobinson@igalia.com>
+
+ Unreviewed.
+
+ Build fix after r62549.
+
+ * GNUmakefile.am: Generate RemoteInspector files by manually listing
+ them instead of building them into libWebCoreJS.la.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Add adoptPtr and leakPtr functions for OwnPtr and PassOwnPtr
+ https://bugs.webkit.org/show_bug.cgi?id=41320
+
+ Made code changes required because of the change to the release function.
+ The equivalent to the old release function is now named leakPtr and
+ should be used sparingly. The new release function returns a PassOwnPtr.
+
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::getFontData): Changed code to call
+ leakPtr instead of release.
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::addProperty): Ditto.
+
+ * css/CSSSegmentedFontFace.cpp:
+ (WebCore::CSSSegmentedFontFace::getFontData): Removed unneeded type
+ casting. Not sure why this changed the type to FontData* and then
+ casted back to SimpleFontData*.
+
+ * css/MediaQuery.cpp:
+ (WebCore::MediaQuery::MediaQuery): Removed call to release on a
+ PassOwnPtr, since the data member is now an OwnPtr.
+ (WebCore::MediaQuery::~MediaQuery): Removed now-unneeded delete.
+ * css/MediaQuery.h: Changed m_expressions to be an OwnPtr.
+
+ * html/HTMLToken.h:
+ (WebCore::AtomicHTMLToken::AtomicHTMLToken): Use assignment instead
+ of the set function since there are no raw pointers involved.
+ * loader/CachedResource.cpp:
+ (WebCore::CachedResource::makePurgeable): Ditto.
+
+ * loader/CrossOriginPreflightResultCache.cpp:
+ (WebCore::CrossOriginPreflightResultCache::appendEntry): Use
+ leakPtr instead of release, and also add FIXME about deleting the
+ old value if the original and URL are already in the map. I
+ believe dealing with this FIXME may fix a storage leak.
+
+ * loader/CrossOriginPreflightResultCache.h: Change the argument
+ to be PassOwnPtr instead of a raw pointer, since this function
+ does take ownership.
+
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
+ Use assignment instead of the set function since there are no raw
+ pointers involved.
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::startIconLoader): Ditto.
+ * loader/TextResourceDecoder.cpp:
+ (WebCore::TextResourceDecoder::decode): Ditto.
+ (WebCore::TextResourceDecoder::flush): Ditto.
+
+ * page/DOMTimer.cpp:
+ (WebCore::DOMTimer::fired): Use OwnPtr instead of an explicit
+ delete.
+
+ * platform/CrossThreadCopier.h: Removed explicit code that tried
+ to copy PassOwnPtr in a complicated way. It did nothing different
+ from just returning the PassOwnPtr. This presumably was done because
+ PassRefPtr has issues when copied cross-thread, but there are no
+ similar issues for PassOwnPtr. Someone with more experience than I
+ might be able to remove the specialization altogether, because
+ CrossThreadCopierPassThrough does the right thing in this case.
+
+ * platform/SharedBuffer.cpp:
+ (WebCore::SharedBuffer::adoptPurgeableBuffer): Changed argument to
+ be a PassOwnPtr.
+ (WebCore::SharedBuffer::releasePurgeableBuffer): Changed result to
+ be a PassOwnPtr.
+ * platform/SharedBuffer.h: Updated for changes above.
+
+ * rendering/RenderSVGResourceFilter.cpp:
+ (WebCore::RenderSVGResourceFilter::applyResource): Changed one site
+ to use assignment instead of the set function since there are no raw
+ pointers involved. Changed another site to use leakPtr instead
+ of release.
+
+ * rendering/RenderSVGResourceGradient.cpp:
+ (WebCore::createMaskAndSwapContextForTextGradient): Use assignment
+ instead of the set function since there are no raw pointers involved.
+
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::setContent): Use leakPtr instead of release.
+ (WebCore::RenderStyle::setBoxShadow): Ditto.
+
+ * workers/DefaultSharedWorkerRepository.cpp:
+ (WebCore::DefaultSharedWorkerRepository::connectToWorker):
+ Removed unneeded call to release function in a code path that passes
+ a PassOwnPtr to a function that takes a PassOwnPtr.
+
+ * workers/WorkerContext.cpp:
+ (WebCore::WorkerContext::setTimeout): Changed argument type to PassOwnPtr.
+ (WebCore::WorkerContext::setInterval): Ditto.
+ * workers/WorkerContext.h: Updated for changes above.
+
+ * workers/WorkerMessagingProxy.cpp:
+ (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
+ (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
+ Removed unneeded call to release function in code paths that pass
+ a PassOwnPtr to a function that takes a PassOwnPtr.
+
+2010-07-06 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ WebInspector: generator part of the patch for bug 40675.
+ On the way to Remote Debugging we want to support JSON serialization
+ on both sides of WebInspector transport.
+ As far as InspectorFrontend class is a simple proxy to WebInspector
+ it would be better to generate it from an IDL file.
+ We have generator infrastructure for binding and will reuse it for
+ new generator.
+ https://bugs.webkit.org/show_bug.cgi?id=41692
+
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.gyp/scripts/rule_binding.py:
+ * WebCore.gypi:
+ * WebCore.pri:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/scripts/CodeGenerator.pm:
+ * bindings/scripts/IDLParser.pm:
+ * bindings/scripts/generate-bindings.pl:
+ * inspector/CodeGeneratorInspector.pm: Added.
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::connectFrontend):
+ (WebCore::InspectorController::startTimelineProfiler):
+ * inspector/InspectorController.h:
+ * inspector/InspectorFrontend.cpp:
+ * inspector/InspectorFrontend.h:
+ * inspector/InspectorFrontend2.idl: Added.
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
+ (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
+ (WebCore::InspectorTimelineAgent::addRecordToTimeline):
+ * inspector/InspectorTimelineAgent.h:
+
+2010-07-06 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Rubber-stamped by Xan Lopez.
+
+ [GTK] Crashes when going back with page cache in unknown circunstances
+ https://bugs.webkit.org/show_bug.cgi?id=41710
+
+ Also NULL-check document, in hopes of fixing this hard to
+ reproduce crash that we are getting reported quite a bit.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::windowClipRect):
+
+2010-07-05 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: On the way to Remote Debuging we want to support JSON
+ serialization on both sides of WebInspector transport. As far as
+ InspectorFrontend class is a simple proxy to WebInspector it would
+ be better to generate it from an IDL file. We have generator
+ infostructure for binding and will reuse it for new generator.
+ https://bugs.webkit.org/show_bug.cgi?id=40675
+
+ * bindings/js/ScriptCallStack.cpp:
+ (WebCore::ScriptCallStack::stackTrace):
+ * bindings/js/ScriptCallStack.h:
+ * bindings/v8/ScriptCallStack.cpp:
+ (WebCore::ScriptCallStack::stackTrace):
+ * bindings/v8/ScriptCallStack.h:
+ * inspector/InspectorFrontend.cpp:
+ (WebCore::InspectorFrontend::addRecordToTimeline):
+ * inspector/InspectorFrontend.h:
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::pushGCEventRecords):
+ (WebCore::InspectorTimelineAgent::willCallFunction):
+ (WebCore::InspectorTimelineAgent::willDispatchEvent):
+ (WebCore::InspectorTimelineAgent::willLayout):
+ (WebCore::InspectorTimelineAgent::willRecalculateStyle):
+ (WebCore::InspectorTimelineAgent::willPaint):
+ (WebCore::InspectorTimelineAgent::willWriteHTML):
+ (WebCore::InspectorTimelineAgent::didWriteHTML):
+ (WebCore::InspectorTimelineAgent::didInstallTimer):
+ (WebCore::InspectorTimelineAgent::didRemoveTimer):
+ (WebCore::InspectorTimelineAgent::willFireTimer):
+ (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
+ (WebCore::InspectorTimelineAgent::willLoadXHR):
+ (WebCore::InspectorTimelineAgent::willEvaluateScript):
+ (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
+ (WebCore::InspectorTimelineAgent::willSendResourceRequest):
+ (WebCore::InspectorTimelineAgent::willReceiveResourceData):
+ (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
+ (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
+ (WebCore::InspectorTimelineAgent::didMarkTimeline):
+ (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
+ (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
+ (WebCore::InspectorTimelineAgent::addRecordToTimeline):
+ (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
+ (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
+ (WebCore::InspectorTimelineAgent::pushCurrentRecord):
+ * inspector/InspectorTimelineAgent.h:
+ (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
+ * inspector/TimelineRecordFactory.cpp:
+ (WebCore::TimelineRecordFactory::createGenericRecord):
+ (WebCore::TimelineRecordFactory::createGCEventData):
+ (WebCore::TimelineRecordFactory::createFunctionCallData):
+ (WebCore::TimelineRecordFactory::createEventDispatchData):
+ (WebCore::TimelineRecordFactory::createGenericTimerData):
+ (WebCore::TimelineRecordFactory::createTimerInstallData):
+ (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
+ (WebCore::TimelineRecordFactory::createXHRLoadData):
+ (WebCore::TimelineRecordFactory::createEvaluateScriptData):
+ (WebCore::TimelineRecordFactory::createMarkTimelineData):
+ (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
+ (WebCore::TimelineRecordFactory::createResourceSendRequestData):
+ (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
+ (WebCore::TimelineRecordFactory::createResourceFinishData):
+ (WebCore::TimelineRecordFactory::createReceiveResourceData):
+ (WebCore::TimelineRecordFactory::createPaintData):
+ (WebCore::TimelineRecordFactory::createParseHTMLData):
+ * inspector/TimelineRecordFactory.h:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement InColgroupMode
+ https://bugs.webkit.org/show_bug.cgi?id=41663
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Implement bookmarking for HTML5 Adoption Agency algorithm
+ https://bugs.webkit.org/show_bug.cgi?id=41659
+
+ Was easier than I expected it to be.
+ Fixes a bunch of html5lib/runner.html tests.
+
+ * html/HTMLFormattingElementList.cpp:
+ (WebCore::HTMLFormattingElementList::bookmarkFor):
+ (WebCore::HTMLFormattingElementList::insertAt):
+ * html/HTMLFormattingElementList.h:
+ (WebCore::HTMLFormattingElementList::Bookmark::Bookmark):
+ (WebCore::HTMLFormattingElementList::Bookmark::moveToAfter):
+ (WebCore::HTMLFormattingElementList::Bookmark::elementBefore):
+ (WebCore::HTMLFormattingElementList::Bookmark::elementAfter):
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement more of InTableMode
+ https://bugs.webkit.org/show_bug.cgi?id=41652
+
+ By the time we got around to landing this patch, it turns out to be
+ just a bit of cleanup (the functional changes where landed already.)
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+
+2010-07-06 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62529.
+ http://trac.webkit.org/changeset/62529
+ https://bugs.webkit.org/show_bug.cgi?id=41661
+
+ http/tests/inspector/resource-har-conversion.html is broken
+ (Requested by yutak on #webkit).
+
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::addResource):
+ (WebCore::InspectorController::removeResource):
+ * inspector/InspectorController.h:
+ * inspector/InspectorResource.cpp:
+ (WebCore::InspectorResource::InspectorResource):
+ (WebCore::InspectorResource::updateScriptObject):
+ (WebCore::InspectorResource::cachedResource):
+ (WebCore::InspectorResource::type):
+ (WebCore::InspectorResource::resourceData):
+ * inspector/InspectorResource.h:
+ (WebCore::InspectorResource::):
+ (WebCore::InspectorResource::create):
+ * inspector/front-end/Resource.js:
+ (WebInspector.Resource.Type.toString):
+ (WebInspector.Resource.prototype.set type):
+ (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
+ * inspector/front-end/ResourceView.js:
+ (WebInspector.ResourceView.prototype._refreshRequestHeaders):
+ (WebInspector.ResourceView.prototype._refreshResponseHeaders):
+ (WebInspector.ResourceView.prototype._refreshHeaders):
+ * inspector/front-end/inspector.css:
+ (.resources-category-scripts, .resources-category-xhr, .resources-category-fonts, .resources-category-other):
+ * inspector/front-end/inspector.js:
+ (WebInspector.loaded):
+ (WebInspector.updateResource):
+ * websockets/WebSocketChannel.cpp:
+ (WebCore::WebSocketChannel::WebSocketChannel):
+ (WebCore::WebSocketChannel::disconnect):
+ (WebCore::WebSocketChannel::didOpen):
+ (WebCore::WebSocketChannel::didClose):
+ (WebCore::WebSocketChannel::processBuffer):
+ * websockets/WebSocketChannel.h:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement InCaptionMode
+ https://bugs.webkit.org/show_bug.cgi?id=41660
+
+ Implementing this mode also turned up a subtle bug in the adoption
+ agency code.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
+ - We're supposed to reutrn the first *unopened* formatting element.
+ The old code returned the first *opened* formatting element.
+ * html/HTMLTreeBuilder.h:
+
+2010-07-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement defaut cases for InTableMode
+ https://bugs.webkit.org/show_bug.cgi?id=41656
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-05 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ SVGRenderContainer forces too many kids to relayout
+ https://bugs.webkit.org/show_bug.cgi?id=15391
+
+ Fixing a long-standing performance issue. We should only ever need to relayout container children when the parent bounds change.
+ The bounds of a container can only change, if the outermost RenderSVGRoot container uses relative length values and its size changes.
+ This can either happen when the window resizes for standalone SVG documents, or if an enclosing RenderBox changes width/height values.
+
+ Only relayout container children if the container has selfNeedsLayout() true, or if the parent bounds change.
+ Lively Kernel doesn't do any relayouts anymore, except if you change the Safari window size, this is a great progression.
+
+ * rendering/RenderPath.cpp:
+ (WebCore::RenderPath::layout): No need to special case Path updates, if the element uses relative lengths. SVGRenderSupport now handles this case.
+ * rendering/RenderSVGContainer.cpp:
+ (WebCore::RenderSVGContainer::layout): Fix some style issues.
+ * rendering/RenderSVGContainer.h:
+ (WebCore::RenderSVGContainer::setDrawsContents): Inlined for speed.
+ (WebCore::RenderSVGContainer::drawsContents): Ditto.
+ * rendering/RenderSVGRoot.cpp:
+ (WebCore::RenderSVGRoot::RenderSVGRoot): Initialize m_isLayoutSizeChanged to false.
+ (WebCore::RenderSVGRoot::layout): Set m_isLayoutSizeChanged=true when the RenderSVGRoot size changes during layout.
+ (WebCore::RenderSVGRoot::calcViewport): Remove hasRelativeLengths() special case.
+ * rendering/RenderSVGRoot.h:
+ (WebCore::RenderSVGRoot::isLayoutSizeChanged): New function, which returns true during layout() if the outermost <svg> size changes.
+ * rendering/RenderSVGViewportContainer.cpp:
+ (WebCore::RenderSVGViewportContainer::calcViewport): Cleanup code, and remove obsolete hasRelativeLengths() special case.
+ * rendering/SVGRenderSupport.cpp:
+ (WebCore::svgRootTreeObject): Added helper function, that returns the RenderSVGRoot for a given RenderObject.
+ (WebCore::SVGRenderSupport::layoutChildren): Remove FIXME, only relayout container children, if the parent bounds change and the child uses relative lengths.
+ * svg/SVGStyledElement.cpp:
+ (WebCore::SVGStyledElement::updateRelativeLengthsInformation): Implemented this function. Keeps track of relative lengths elements, so that the
+ hasRelativeLengths() information is always up2date.
+ * svg/SVGStyledElement.h:
+ (WebCore::SVGStyledElement::hasRelativeLengths): Don't call the virtual selfHasRelativeLengths() information, just return wheter m_elementsWithRelativeLengths is not empty.
+
+2010-07-05 Yuzo Fujishima <yuzo@google.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix for Bug 41509 - Ranges for @font-face unicode-range must be separated by commas
+ https://bugs.webkit.org/show_bug.cgi?id=41509
+
+ Test: fast/css/font-face-multiple-ranges-for-unicode-range.html
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseFontFaceUnicodeRange):
+
+2010-07-05 Yuta Kitamura <yutak@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Add WebSocket resource type to Web Inspector.
+
+ When a new WebSocket connection is established, a line for that connection
+ will appear in Web Inspector's Resources tab. If the resource name is
+ clicked, the details of handshake request and response will be shown.
+
+ Web Inspector: WebSocket in Resources tab
+ https://bugs.webkit.org/show_bug.cgi?id=40768
+
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::addResource): WebSocket resource does not
+ have an associated loader, thus frame might be null. Need to check it.
+ (WebCore::InspectorController::removeResource): Ditto.
+ (WebCore::InspectorController::didCreateWebSocket):
+ (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
+ (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
+ (WebCore::InspectorController::didCloseWebSocket):
+ * inspector/InspectorController.h:
+ * inspector/InspectorResource.cpp: Add null checks of m_loader and m_frame,
+ because WebSocket does not have a loader and we need to allow null for
+ these variables.
+ (WebCore::createReadableStringFromBinary):
+ (WebCore::InspectorResource::InspectorResource):
+ (WebCore::InspectorResource::create): Factory function of
+ regular (non-WebSocket) resources.
+ (WebCore::InspectorResource::createWebSocket): Factory function of
+ WebSocket resources.
+ (WebCore::InspectorResource::updateWebSocketRequest):
+ (WebCore::InspectorResource::updateWebSocketResponse):
+ (WebCore::InspectorResource::updateScriptObject):
+ (WebCore::InspectorResource::cachedResource):
+ (WebCore::InspectorResource::type):
+ (WebCore::InspectorResource::resourceData):
+ * inspector/InspectorResource.h:
+ (WebCore::InspectorResource::):
+ (WebCore::InspectorResource::markWebSocket):
+ * inspector/front-end/Resource.js:
+ (WebInspector.Resource.Type.toString):
+ (WebInspector.Resource.prototype.set type):
+ (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
+ * inspector/front-end/ResourceView.js:
+ (WebInspector.ResourceView.prototype._refreshRequestHeaders):
+ (WebInspector.ResourceView.prototype._refreshResponseHeaders):
+ (WebInspector.ResourceView.prototype._refreshHeaders):
+ * inspector/front-end/inspector.css:
+ (.resources-category-websockets, .resources-category-other):
+ (.resources-category-websockets .resources-graph-bar):
+ (.resources-category-websockets.resource-cached .resources-graph-bar):
+ * inspector/front-end/inspector.js:
+ (WebInspector.loaded):
+ (WebInspector.updateResource):
+ * websockets/WebSocketChannel.cpp:
+ (WebCore::WebSocketChannel::WebSocketChannel):
+ (WebCore::WebSocketChannel::disconnect):
+ (WebCore::WebSocketChannel::didOpen):
+ (WebCore::WebSocketChannel::didClose):
+ (WebCore::WebSocketChannel::processBuffer):
+ (WebCore::WebSocketChannel::identifier):
+ * websockets/WebSocketChannel.h:
+
+2010-07-05 Yury Semikhatsky <yurys@chromium.org>
+
+ Unreviewed. Fix Chromium build.
+
+ * inspector/InspectorApplicationCacheAgent.cpp:
+ (WebCore::InspectorApplicationCacheAgent::fillResourceList):
+ (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
+
+2010-07-05 Adam Barth <abarth@webkit.org>
+
+ Unreviewed.
+
+ Move processStartTagForInBody to its own function.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ * html/HTMLTreeBuilder.cpp.orig: Added.
+ * html/HTMLTreeBuilder.h:
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Fix one more notImplemented in h1-h6 start tag handling
+ https://bugs.webkit.org/show_bug.cgi?id=41654
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Unreviewed. Just fixing proess to process.
+ Clearly Adam and I can't spell. Thankfully MikeSmith can.
+
+ Add <isindex> support, per HTML5
+ https://bugs.webkit.org/show_bug.cgi?id=41650
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processFakeStartTag):
+ (WebCore::HTMLTreeBuilder::processFakeEndTag):
+ (WebCore::HTMLTreeBuilder::processIsindexStartTagForBody):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add <isindex> support, per HTML5
+ https://bugs.webkit.org/show_bug.cgi?id=41650
+
+ Covered by html5lib/runner.html including a new
+ isindex.dat test suite.
+
+ * html/HTMLToken.h:
+ (WebCore::AtomicHTMLToken::AtomicHTMLToken):
+ - Support passing attributes to the constructor.
+ (WebCore::AtomicHTMLToken::name):
+ (WebCore::AtomicHTMLToken::setName):
+ (WebCore::AtomicHTMLToken::getAttributeItem):
+ (WebCore::AtomicHTMLToken::attributes):
+ (WebCore::AtomicHTMLToken::takeAtributes):
+ - Reduces ref-churn, and makes it possible for callers
+ to modify attributes w/o affecting future uses of the attributes.
+ (WebCore::AtomicHTMLToken::usesName):
+ - Used by ASSERTS.
+ (WebCore::AtomicHTMLToken::usesAttributes):
+ - Used by ASSERTS.
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::convertToOldStyle):
+ - Can't be const, now that we use takeAttributes()
+ (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
+ (WebCore::HTMLTreeBuilder::proesssFakeStartTag):
+ - New function. I'm not sure this is the perfect design
+ (I'd kinda like AtomicHTMLToken to be copyable so we can
+ have create functions for it), but this makes the callsites
+ using fake tokens much more readable.
+ (WebCore::HTMLTreeBuilder::proesssFakeEndTag):
+ (WebCore::HTMLTreeBuilder::processFakeCharacters):
+ (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
+ (WebCore::HTMLTreeBuilder::processIsindexStartTagForBody):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::insertScriptElement):
+ - Use takeAttributes() for less ref-churn.
+ (WebCore::HTMLTreeBuilder::createElement): ditto
+ (WebCore::HTMLTreeBuilder::finished):
+ - Remove bogus use of AtomicHTMLToken constructor which
+ wasn't even being used now that we support emitting EOF tokens
+ from the Tokenizer directly.
+ * html/HTMLTreeBuilder.h:
+
+2010-07-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ ASSERT that we're processing the correct type of token
+ https://bugs.webkit.org/show_bug.cgi?id=41647
+
+ Making these asserts work required a small (non-observable) tweak to
+ some old code.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processDoctypeToken):
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processComment):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+ (WebCore::HTMLTreeBuilder::processStartTagForInHead):
+
+2010-07-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement in select in table
+ https://bugs.webkit.org/show_bug.cgi?id=41646
+
+ This mode is mostly a fall-through to the InSelectMode.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+
+2010-07-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement basic text node coalescing
+ https://bugs.webkit.org/show_bug.cgi?id=41623
+
+ This patch isn't the end-all, be-all of text node coalescing, but it's
+ a good start.
+
+ * dom/CharacterData.cpp:
+ (WebCore::CharacterData::parserAppendData):
+ (WebCore::CharacterData::appendData):
+ * dom/CharacterData.h:
+ - Added a new method to dance around mutation events.
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::insertTextNode):
+
+2010-07-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Implement InSelectMode
+ https://bugs.webkit.org/show_bug.cgi?id=41627
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processCharacter):
+ (WebCore::HTMLTreeBuilder::processEndOfFile):
+
+2010-07-05 Fady Samuel <fsamuel@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Fixed a svg crash when setting class of an svg ellipse object.
+
+ Altering the CSS class of an attached SVG element causes WebKit to crash
+ https://bugs.webkit.org/show_bug.cgi?id=40857
+
+ Test: svg/css/svg-ellipse-render-crash.html
+
+ * dom/StyledElement.cpp:
+ (WebCore::StyledElement::classAttributeChanged):
+
+2010-07-05 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Reproducible crash with Optimize Legibility extension
+ https://bugs.webkit.org/show_bug.cgi?id=41585
+
+ Test: fast/css/text-rendering-priority.html
+
+ Moved the text-rendering CSS property to the “high priority” group, because applying it
+ during style selection invalidates the font.
+
+ * css/CSSPropertyNames.in: Moved text-rendering to the “high priority” section at the top.
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::applyDeclarations): Updated compile-time assertion.
+
+2010-07-05 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ optimizeLegibility doesn't play nice with fonts that do not have a space glyph
+ https://bugs.webkit.org/show_bug.cgi?id=41599
+
+ No test because none of the fonts available to DumpRenderTree are missing a space glyph.
+
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::findNextLineBreak): When the font does not map the space character
+ to a glyph, a fallback font is used for space. Therefore, wordTrailingSpaceWidth must be
+ initialized with the width of a space as measured by the Font rather than with the cached
+ space width.
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Implement HTML5's "reset insertion mode appropriately"
+ https://bugs.webkit.org/show_bug.cgi?id=41628
+
+ This has some minimal testing. One from my previous
+ </table> patch, and a few from the main suite.
+
+ Mostly resetInsertionModeAppropriately isn't used yet
+ but we're about to add a bunch of states which do use it
+ and our test coverage will expand further as we do.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
+ (WebCore::HTMLTreeBuilder::setInsertionModeAndEnd):
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-04 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add </table> support for "in table" insertion mode
+ https://bugs.webkit.org/show_bug.cgi?id=41591
+
+ resetInsertionModeAppropriately isn't implemented yet, however
+ I've added a test for the usage I added.
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-05 Joseph Pecoraro <joepeck@webkit.org>
+
+ Unreviewed build fix for r62503.
+
+ Chromium missing method. Filed bug 41632 to track.
+
+ * loader/appcache/ApplicationCacheHost.h:
+ (WebCore::ApplicationCacheHost::applicationCache):
+
+2010-07-05 Joseph Pecoraro <joepeck@webkit.org>
+
+ Unreviewed build fix for r62503.
+
+ Missed GTK's build file.
+
+ * GNUmakefile.am:
+
+2010-07-05 Joseph Pecoraro <joepeck@webkit.org>
+
+ Unreviewed build fix for r62503.
+
+ Pass a blank ResourceResponse instead of passing 0.
+
+ * loader/appcache/ApplicationCacheGroup.cpp:
+ (WebCore::ApplicationCacheGroup::createResourceHandle):
+
+2010-07-05 Joseph Pecoraro <joepeck@webkit.org>
+
+ Unreviewed build fix for r62503.
+
+ Forward declare ApplicationCache for Chromium.
+
+ * loader/appcache/ApplicationCacheHost.h:
+
+2010-07-05 Joseph Pecoraro <joepeck@webkit.org>
+
+ Reviewed by Pavel Feldman.
+
+ WebInspector: HTML5 Offline Web Applications Support (ApplicationCache)
+ https://bugs.webkit.org/show_bug.cgi?id=24529
+
+ Parts of this patch were written by Kavita Kanetkar <kkanetkar@chromium.org>.
+
+ Part 2: Pulling ApplicationCache Resources to Display in the Inspector.
+
+ The InspectorApplicationCacheAgent gathers the information it
+ needs and forwards it on to the inspector.
+
+ * inspector/InspectorApplicationCacheAgent.cpp:
+ (WebCore::InspectorApplicationCacheAgent::fillResourceList): get information about the resources.
+ (WebCore::InspectorApplicationCacheAgent::getApplicationCaches): gathers all the information from the ApplicationCacheHost.
+ (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
+ (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
+ (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
+ * inspector/InspectorApplicationCacheAgent.h: defines structures to hold information about caches and resources.
+ (WebCore::InspectorApplicationCacheAgent::ApplicationCacheInfo::ApplicationCacheInfo):
+ (WebCore::InspectorApplicationCacheAgent::ResourceInfo::ResourceInfo):
+ (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent):
+ * loader/appcache/ApplicationCacheHost.h:
+ (WebCore::ApplicationCacheHost::applicationCacheForInspector): new convention, public cache accessor for the inspector.
+ (WebCore::ApplicationCacheHost::documentLoader): added const.
+
+ The User Interface uses a DataGrid, like Cookies.
+
+ * inspector/front-end/ApplicationCacheItemsView.js:
+ (WebInspector.ApplicationCacheItemsView.prototype._update):
+ (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
+ (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid):
+ (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid.numberCompare):
+ (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid.localeCompare):
+ (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):
+
+ The usual frontend pull workflow, except this goes through
+ InspectorApplicationCacheAgent instead of InspectorController.
+
+ * inspector/InspectorBackend.cpp:
+ (WebCore::InspectorBackend::getApplicationCaches):
+ (WebCore::InspectorBackend::inspectorApplicationCacheAgent):
+ * inspector/InspectorBackend.h:
+ * inspector/InspectorBackend.idl:
+ * inspector/InspectorFrontend.cpp:
+ (WebCore::InspectorFrontend::didGetApplicationCaches):
+ * inspector/InspectorFrontend.h:
+ * inspector/front-end/DOMAgent.js:
+ (WebInspector.DOMNode.prototype.hasChildNodes): style fix.
+ (WebInspector.DOMAgent.prototype.nodeForId): style fix.
+ (WebInspector.ApplicationCache.getApplicationCachesAsync): pull.
+ (WebInspector.Cookies.getCookiesAsync):
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel.prototype.updateManifest):
+ (WebInspector.ApplicationCacheSidebarTreeElement.prototype.onselect):
+ * inspector/front-end/inspector.js:
+ (WebInspector.updateResource):
+ (WebInspector._addAppCacheDomain):
+ (WebInspector.reset):
+
+ Miscellaneous. Localized Strings and fixes.
+
+ * English.lproj/localizedStrings.js: "Type", "%s (%s)"
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::deleteCookie):
+ * inspector/InspectorController.h:
+
+2010-07-04 Joseph Pecoraro <joepeck@webkit.org>
+
+ Reviewed by Pavel Feldman.
+
+ WebInspector: HTML5 Offline Web Applications Support (ApplicationCache)
+ https://bugs.webkit.org/show_bug.cgi?id=24529
+
+ Part 1: Backend -> Frontend Messages. ApplicationCache Status and Connectivity Status.
+
+ This patch adds an InspectorApplicationCacheAgent to monitor application
+ cache changes, starts a UI in the Storage panel, handles the boilerplate
+ of adding new files.
+
+ Added an agent to encapsulate and handle the application cache logic.
+ This is similar to the timeline agent.
+
+ * inspector/InspectorApplicationCacheAgent.cpp: Added.
+ (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
+ (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent):
+ (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse):
+ (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
+ (WebCore::InspectorApplicationCacheAgent::updateNetworkState):
+ * inspector/InspectorApplicationCacheAgent.h: Added.
+
+ InspectorController owns an InspectorApplicationCacheAgent. This
+ handles its lifetime management.
+
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::~InspectorController):
+ (WebCore::InspectorController::connectFrontend): create the agent with a frontend.
+ (WebCore::InspectorController::disconnectFrontend): remove the agent when closing.
+ (WebCore::InspectorController::releaseFrontendLifetimeAgents):
+ * inspector/InspectorController.h:
+
+ User Interface for ApplicationCache in the StoragePanel. This follows
+ very closely to Cookies, it will have a sortable table of items. The
+ status bar contains connectivity and application cache status
+ indicators which update when backend messages are received. There
+ are some stubs which the next part will implement.
+
+ * inspector/front-end/ApplicationCacheItemsView.js: Added.
+ (WebInspector.ApplicationCacheItemsView):
+ (WebInspector.ApplicationCacheItemsView.prototype.get statusBarItems): refresh, delete, connectivity, application cache status.
+ (WebInspector.ApplicationCacheItemsView.prototype.show):
+ (WebInspector.ApplicationCacheItemsView.prototype.hide):
+ (WebInspector.ApplicationCacheItemsView.prototype.updateStatus): this is the application cache status indicator.
+ (WebInspector.ApplicationCacheItemsView.prototype.updateNetworkState): this is the online/offline connectivity indicator.
+ (WebInspector.ApplicationCacheItemsView.prototype._update):
+ (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
+ (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid):
+ (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):
+ (WebInspector.ApplicationCacheItemsView.prototype.resize):
+ (WebInspector.ApplicationCacheItemsView.prototype._deleteButtonClicked):
+ (WebInspector.ApplicationCacheItemsView.prototype._deleteCallback):
+ (WebInspector.ApplicationCacheItemsView.prototype._refreshButtonClicked):
+
+ The usual dispatch flow from the backend, to the frontend, to the
+ panel, and then to the visible view. Some slight refactoring to
+ eliminate duplicated code.
+
+ * inspector/InspectorFrontend.cpp:
+ (WebCore::InspectorFrontend::updateDOMStorage):
+ (WebCore::InspectorFrontend::didGetApplicationCaches):
+ (WebCore::InspectorFrontend::updateApplicationCacheStatus):
+ * inspector/InspectorFrontend.h:
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel):
+ (WebInspector.StoragePanel.prototype.reset):
+ (WebInspector.StoragePanel.prototype.addApplicationCache):
+ (WebInspector.StoragePanel.prototype.showDatabase):
+ (WebInspector.StoragePanel.prototype.showDOMStorage):
+ (WebInspector.StoragePanel.prototype.showCookies):
+ (WebInspector.StoragePanel.prototype.showApplicationCache):
+ (WebInspector.StoragePanel.prototype._genericViewSetup):
+ (WebInspector.StoragePanel.prototype.updateApplicationCacheStatus):
+ (WebInspector.StoragePanel.prototype.updateNetworkState):
+ (WebInspector.CookieSidebarTreeElement.prototype.set subtitle):
+ (WebInspector.ApplicationCacheSidebarTreeElement):
+ (WebInspector.ApplicationCacheSidebarTreeElement.prototype.onselect):
+ (WebInspector.ApplicationCacheSidebarTreeElement.prototype.get mainTitle):
+ (WebInspector.ApplicationCacheSidebarTreeElement.prototype.set mainTitle):
+ (WebInspector.ApplicationCacheSidebarTreeElement.prototype.get subtitle):
+ (WebInspector.ApplicationCacheSidebarTreeElement.prototype.set subtitle):
+ * inspector/front-end/inspector.js:
+ (WebInspector.dispatch.delayDispatch):
+ (WebInspector.dispatch):
+ (WebInspector._addAppCacheDomain):
+ (WebInspector.addDOMStorage):
+ (WebInspector.updateDOMStorage):
+
+ Notify the InspectorApplicationCacheAgent on application cache changes
+ or specifics. Notify the InspectorController on generic resource events.
+ That is because ApplicationCacheController is a ResourceClient and needs
+ to trigger the resource events normally handled by ResourceLoader.
+
+ * loader/appcache/ApplicationCacheGroup.cpp:
+ (WebCore::inspectorUpdateApplicationCacheStatus): helper method to prevent duplicated code.
+ (WebCore::ApplicationCacheGroup::setNewestCache): status change.
+ (WebCore::ApplicationCacheGroup::makeObsolete): status change.
+ (WebCore::ApplicationCacheGroup::update): status change.
+ (WebCore::ApplicationCacheGroup::createResourceHandle): resource event.
+ (WebCore::ApplicationCacheGroup::willSendRequest): resource event.
+ (WebCore::ApplicationCacheGroup::didReceiveResponse): resource event.
+ (WebCore::ApplicationCacheGroup::didReceiveData): resource event.
+ (WebCore::ApplicationCacheGroup::didFinishLoading): resource event.
+ (WebCore::ApplicationCacheGroup::didFail): resource event.
+ (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): resource event.
+ (WebCore::ApplicationCacheGroup::manifestNotFound): status change.
+ (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): status change.
+ (WebCore::ApplicationCacheGroup::setUpdateStatus): single access point for status changes.
+ * loader/appcache/ApplicationCacheGroup.h:
+ * page/Page.cpp:
+ (WebCore::networkStateChanged): connectivity status change.
+
+ Final inspector details to add the new file, style new elements,
+ images, and localized strings.
+
+ * inspector/front-end/inspector.css:
+ (.application-cache-sidebar-tree-item .icon):
+ (.timeline-records-counter, .storage-application-cache-status, .storage-application-cache-connectivity):
+ (.storage-application-cache-status-icon, .storage-application-cache-connectivity-icon):
+ (.status-bar-divider):
+ (.storage-application-cache-status, .storage-application-cache-connectivity):
+ * inspector/front-end/inspector.html:
+ * inspector/front-end/Images/applicationCache.png: Added.
+ * English.lproj/localizedStrings.js: "APPLICATION CACHE", "No Application Cache information available.", "Online", "Offline"
+
+ Updated build files.
+
+ * CMakeLists.txt:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/front-end/WebKit.qrc:
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add basic <col> support to the treebuilder
+ https://bugs.webkit.org/show_bug.cgi?id=41590
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Add basic "in row" mode to support <td> and <th> insertion
+ https://bugs.webkit.org/show_bug.cgi?id=41588
+
+ Also fixed <td> or <th> as a direct child of <table>.
+
+ Most of this was covered by html5lib/runner.html tests,
+ but I had to add a new tables01.dat to cover the <th> cases.
+
+ * html/HTMLElementStack.cpp:
+ (WebCore::HTMLNames::isTableRowScopeMarker):
+ (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
+ * html/HTMLElementStack.h:
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processStartTag):
+
+2010-07-05 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Finish implementing "any other end tag" for "in body" mode
+ https://bugs.webkit.org/show_bug.cgi?id=41582
+
+ I believe I found a "bug" in the HTML5 spec when writing this:
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080
+
+ * html/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ * html/HTMLTreeBuilder.h:
+
+2010-07-05 Martin Robinson <mrobinson@igalia.com>
+
+ Unreviewed.
+
+ Add a missing slash to the list of generated sources. This
+ was missing from a previous build fix.
+
+ * GNUmakefile.am:
+
2010-07-05 Pavel Feldman <pfeldman@chromium.org>
Reviewed by Joseph Pecoraro.
diff --git a/WebCore/Configurations/FeatureDefines.xcconfig b/WebCore/Configurations/FeatureDefines.xcconfig
index 8f86fc3..9a3ec0b 100644
--- a/WebCore/Configurations/FeatureDefines.xcconfig
+++ b/WebCore/Configurations/FeatureDefines.xcconfig
@@ -31,6 +31,8 @@
// Set any ENABLE_FEATURE_NAME macro to an empty string to disable that feature.
+ENABLE_LINK_PREFETCH = ;
+
ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(TARGET_MAC_OS_X_VERSION_MAJOR));
ENABLE_3D_CANVAS_1050 = ENABLE_3D_CANVAS;
ENABLE_3D_CANVAS_1060 = ENABLE_3D_CANVAS;
@@ -84,5 +86,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(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_READER) $(ENABLE_FILE_WRITER) $(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_RUBY) $(ENABLE_SANDBOX) $(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);
-
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(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_READER) $(ENABLE_FILE_WRITER) $(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_RUBY) $(ENABLE_SANDBOX) $(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);
diff --git a/WebCore/DerivedSources.cpp b/WebCore/DerivedSources.cpp
index 5f2fe58..78c523f 100644
--- a/WebCore/DerivedSources.cpp
+++ b/WebCore/DerivedSources.cpp
@@ -79,7 +79,11 @@
#include "JSDOMCoreException.cpp"
#include "JSDOMFormData.cpp"
#include "JSDOMImplementation.cpp"
+#include "JSDOMMimeType.cpp"
+#include "JSDOMMimeTypeArray.cpp"
#include "JSDOMParser.cpp"
+#include "JSDOMPlugin.cpp"
+#include "JSDOMPluginArray.cpp"
#include "JSDOMSelection.cpp"
#include "JSDOMStringList.cpp"
#include "JSDOMStringMap.cpp"
@@ -178,6 +182,7 @@
#include "JSIDBErrorEvent.cpp"
#include "JSIDBEvent.cpp"
#include "JSIDBIndexRequest.cpp"
+#include "JSIDBKey.cpp"
#include "JSIDBKeyRange.cpp"
#include "JSIDBObjectStoreRequest.cpp"
#include "JSIDBRequest.cpp"
@@ -196,8 +201,6 @@
#include "JSMessageChannel.cpp"
#include "JSMessageEvent.cpp"
#include "JSMessagePort.cpp"
-#include "JSMimeType.cpp"
-#include "JSMimeTypeArray.cpp"
#include "JSMouseEvent.cpp"
#include "JSMutationEvent.cpp"
#include "JSNamedNodeMap.cpp"
@@ -213,8 +216,6 @@
#include "JSOverflowEvent.cpp"
#include "JSPageTransitionEvent.cpp"
#include "JSPerformance.cpp"
-#include "JSPlugin.cpp"
-#include "JSPluginArray.cpp"
#include "JSPopStateEvent.cpp"
#include "JSPositionError.cpp"
#include "JSProcessingInstruction.cpp"
diff --git a/WebCore/DerivedSources.make b/WebCore/DerivedSources.make
index 5e80f2e..8430024 100644
--- a/WebCore/DerivedSources.make
+++ b/WebCore/DerivedSources.make
@@ -113,7 +113,11 @@ DOM_CLASSES = \
DOMCoreException \
DOMFormData \
DOMImplementation \
+ DOMMimeType \
+ DOMMimeTypeArray \
DOMParser \
+ DOMPlugin \
+ DOMPluginArray \
DOMSelection \
DOMStringList \
DOMStringMap \
@@ -221,6 +225,7 @@ DOM_CLASSES = \
IDBErrorEvent \
IDBEvent \
IDBIndexRequest \
+ IDBKey \
IDBKeyRange \
IDBObjectStoreRequest \
IDBRequest \
@@ -238,8 +243,6 @@ DOM_CLASSES = \
MessageChannel \
MessageEvent \
MessagePort \
- MimeType \
- MimeTypeArray \
MouseEvent \
MutationEvent \
NamedNodeMap \
@@ -255,8 +258,6 @@ DOM_CLASSES = \
OverflowEvent \
PageTransitionEvent \
Performance \
- Plugin \
- PluginArray \
PopStateEvent \
PositionError \
ProcessingInstruction \
@@ -470,11 +471,15 @@ DOM_CLASSES = \
XSLTProcessor \
#
+INSPECTOR_CLASSES = InspectorFrontend2
+
.PHONY : all
-JS_DOM_HEADERS=$(filter-out JSEventListener.h JSEventTarget.h,$(DOM_CLASSES:%=JS%.h))
+JS_DOM_HEADERS=$(filter-out JSEventListener.h JSEventTarget.h,$(DOM_CLASSES:%=JS%.h) $(INSPECTOR_CLASSES:%=Remote%.h))
all : \
+ remove-stray-plugin-and-mime-type-files \
+ \
$(JS_DOM_HEADERS) \
\
JSJavaScriptCallFrame.h \
@@ -540,6 +545,12 @@ endif
# --------
+# Temporary build rule. Take out once some time has passed.
+
+.PHONY : remove-stray-plugin-and-mime-type-files
+remove-stray-plugin-and-mime-type-files :
+ (rm DOMMimeTypeArray.h DOMMimeTypeArray.mm DOMMimeTypeArrayInternal.h DOMPluginArray.h DOMPluginArray.mm DOMPluginArrayInternal.h 2> /dev/null) || echo -n
+
# CSS property names and value keywords
WEBCORE_CSS_PROPERTY_NAMES := $(WebCore)/css/CSSPropertyNames.in
@@ -703,12 +714,6 @@ XMLNames.cpp : dom/make_names.pl xml/xmlattrs.in
# SVG tag and attribute names, and element factory
-ifeq ($(findstring ENABLE_SVG,$(FEATURE_DEFINES)), ENABLE_SVG)
-
-ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.exp
-endif
-
ifeq ($(findstring ENABLE_SVG_USE,$(FEATURE_DEFINES)), ENABLE_SVG_USE)
SVG_FLAGS := $(SVG_FLAGS) ENABLE_SVG_USE=1
endif
@@ -719,9 +724,6 @@ endif
ifeq ($(findstring ENABLE_FILTERS,$(FEATURE_DEFINES)), ENABLE_FILTERS)
SVG_FLAGS := $(SVG_FLAGS) ENABLE_FILTERS=1
-ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.Filters.exp
-endif
endif
ifeq ($(findstring ENABLE_SVG_AS_IMAGE,$(FEATURE_DEFINES)), ENABLE_SVG_AS_IMAGE)
@@ -730,16 +732,10 @@ endif
ifeq ($(findstring ENABLE_SVG_ANIMATION,$(FEATURE_DEFINES)), ENABLE_SVG_ANIMATION)
SVG_FLAGS := $(SVG_FLAGS) ENABLE_SVG_ANIMATION=1
-ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.Animation.exp
-endif
endif
ifeq ($(findstring ENABLE_SVG_FOREIGN_OBJECT,$(FEATURE_DEFINES)), ENABLE_SVG_FOREIGN_OBJECT)
SVG_FLAGS := $(SVG_FLAGS) ENABLE_SVG_FOREIGN_OBJECT=1
-ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.ForeignObject.exp
-endif
endif
# SVG tag and attribute names (need to pass an extra flag if svg experimental features are enabled)
@@ -760,24 +756,6 @@ JSSVGElementWrapperFactory.cpp : SVGNames.cpp
XLinkNames.cpp : dom/make_names.pl svg/xlinkattrs.in
perl -I $(WebCore)/bindings/scripts $< --attrs $(WebCore)/svg/xlinkattrs.in
-else
-
-SVGElementFactory.cpp :
- echo > $@
-
-SVGNames.cpp :
- echo > $@
-
-XLinkNames.cpp :
- echo > $@
-
-# This file is autogenerated by make_names.pl when SVG is enabled.
-
-JSSVGElementWrapperFactory.cpp :
- echo > $@
-
-endif
-
# --------
# WML tag and attribute names, and element factory
@@ -801,39 +779,37 @@ endif
# MathML tag and attribute names, and element factory
-ifeq ($(findstring ENABLE_MATHML,$(FEATURE_DEFINES)), ENABLE_MATHML)
-
MathMLElementFactory.cpp MathMLNames.cpp : dom/make_names.pl mathml/mathtags.in mathml/mathattrs.in
perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/mathml/mathtags.in --attrs $(WebCore)/mathml/mathattrs.in --factory --wrapperFactory
-else
+# --------
-MathMLElementFactory.cpp :
- echo > $@
+# Common generator things
-MathMLNames.cpp :
- echo > $@
+GENERATE_SCRIPTS = \
+ bindings/scripts/CodeGenerator.pm \
+ bindings/scripts/IDLParser.pm \
+ bindings/scripts/IDLStructure.pm \
+ bindings/scripts/generate-bindings.pl
-endif
+generator_script = perl $(addprefix -I $(WebCore)/, $(sort $(dir $(1)))) $(WebCore)/bindings/scripts/generate-bindings.pl
+# JS bindings generator
+IDL_INCLUDES = dom html css page notifications xml svg
+IDL_COMMON_ARGS = $(IDL_INCLUDES:%=--include %) --write-dependencies --outputDir .
-# --------
+JS_BINDINGS_SCRIPTS = $(GENERATE_SCRIPTS) bindings/scripts/CodeGeneratorJS.pm
-# JavaScript bindings
+JS%.h : %.idl $(JS_BINDINGS_SCRIPTS)
+ $(call generator_script, $(JS_BINDINGS_SCRIPTS)) $(IDL_COMMON_ARGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_JAVASCRIPT" --generator JS $<
-GENERATE_BINDINGS = perl -I $(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl \
- --include dom --include html --include css --include page --include notifications --include xml --include svg --write-dependencies --outputDir .
+# Inspector interfaces generator
-GENERATE_BINDINGS_SCRIPTS = \
- bindings/scripts/CodeGenerator.pm \
- bindings/scripts/IDLParser.pm \
- bindings/scripts/IDLStructure.pm \
- bindings/scripts/generate-bindings.pl \
-#
+INSPECTOR_GENERATOR_SCRIPTS = $(GENERATE_SCRIPTS) inspector/CodeGeneratorInspector.pm
-JS%.h : %.idl $(GENERATE_BINDINGS_SCRIPTS) bindings/scripts/CodeGeneratorJS.pm
- $(GENERATE_BINDINGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_JAVASCRIPT" --generator JS $<
+Remote%.h : %.idl $(INSPECTOR_GENERATOR_SCRIPTS)
+ $(call generator_script, $(INSPECTOR_GENERATOR_SCRIPTS)) --outputDir . --defines "LANGUAGE_JAVASCRIPT" --generator Inspector $<
-include $(JS_DOM_HEADERS:.h=.dep)
@@ -843,11 +819,11 @@ JS%.h : %.idl $(GENERATE_BINDINGS_SCRIPTS) bindings/scripts/CodeGeneratorJS.pm
ifeq ($(OS),MACOS)
-OBJC_DOM_HEADERS=$(filter-out DOMDOMWindow.h DOMMimeType.h DOMPlugin.h,$(DOM_CLASSES:%=DOM%.h))
+OBJC_DOM_HEADERS=$(filter-out DOMDOMWindow.h DOMDOMMimeType.h DOMDOMPlugin.h,$(DOM_CLASSES:%=DOM%.h))
all : $(OBJC_DOM_HEADERS)
-all : CharsetData.cpp WebCore.exp WebCore.LP64.exp
+all : CharsetData.cpp
# --------
@@ -858,88 +834,26 @@ CharsetData.cpp : platform/text/mac/make-charset-table.pl platform/text/mac/char
# --------
-# export file
-
-ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_JAVA_BRIDGE | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.JNI.exp
-endif
-
-ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_NETSCAPE_PLUGIN_API | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.NPAPI.exp
-endif
-
-# FIXME: WTF_USE_PLUGIN_HOST_PROCESS is only true when building for x86_64, but we shouldn't have to know about that here.
-ifeq ($(findstring x86_64,$(ARCHS)) $(findstring x86_64,$(VALID_ARCHS)), x86_64 x86_64)
-ifeq ($(shell gcc -arch x86_64 -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep WTF_USE_PLUGIN_HOST_PROCESS | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.PluginHostProcess.exp
-endif
-endif
+ifneq ($(ACTION),installhdrs)
-ifeq ($(findstring ENABLE_3D_RENDERING,$(FEATURE_DEFINES)), ENABLE_3D_RENDERING)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.3DRendering.exp
-endif
+all : WebCore.exp WebCore.LP64.exp
-ifeq ($(shell gcc -arch x86_64 -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep WTF_USE_ACCELERATED_COMPOSITING | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.AcceleratedCompositing.exp
-endif
-
-ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_CONTEXT_MENUS | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.ContextMenus.exp
-endif
-
-ifeq ($(ENABLE_DASHBOARD_SUPPORT), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.DashboardSupport.exp
-endif
-
-ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_DRAG_SUPPORT | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.DragSupport.exp
-endif
-
-ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_INSPECTOR | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Inspector.exp
-endif
+WebCore.exp : $(BUILT_PRODUCTS_DIR)/WebCoreExportFileGenerator
+ $^ > $@
-ifeq ($(ENABLE_ORIENTATION_EVENTS), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.OrientationEvents.exp
-endif
-
-ifeq ($(findstring 10.4,$(MACOSX_DEPLOYMENT_TARGET)), 10.4)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Tiger.exp
-endif
-
-ifeq ($(findstring ENABLE_PLUGIN_PROXY_FOR_VIDEO,$(FEATURE_DEFINES)), ENABLE_PLUGIN_PROXY_FOR_VIDEO)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.VideoProxy.exp
-endif
-
-ifeq ($(findstring ENABLE_VIDEO,$(FEATURE_DEFINES)), ENABLE_VIDEO)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Video.exp
-endif
-
-ifeq ($(findstring ENABLE_GEOLOCATION,$(FEATURE_DEFINES)), ENABLE_GEOLOCATION)
-ifeq ($(findstring ENABLE_CLIENT_BASED_GEOLOCATION,$(FEATURE_DEFINES)), ENABLE_CLIENT_BASED_GEOLOCATION)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.ClientBasedGeolocation.exp
-else
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Geolocation.exp
-endif
-endif
-
-ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK | cut -d' ' -f3), 1)
- WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.ProtectionSpaceAuthCallback.exp
-endif
-
-WebCore.exp : WebCore.base.exp $(WEBCORE_EXPORT_DEPENDENCIES)
- cat $^ > $@
-
-# Switch NSRect, NSSize and NSPoint with their CG counterparts for 64-bit.
+# Switch NSRect, NSSize and NSPoint with their CG counterparts for the 64-bit exports file.
WebCore.LP64.exp : WebCore.exp
cat $^ | sed -e s/7_NSRect/6CGRect/ -e s/7_NSSize/6CGSize/ -e s/8_NSPoint/7CGPoint/ > $@
+endif # installhdrs
+
# --------
# Objective-C bindings
-DOM%.h : %.idl $(GENERATE_BINDINGS_SCRIPTS) bindings/scripts/CodeGeneratorObjC.pm bindings/objc/PublicDOMInterfaces.h
- $(GENERATE_BINDINGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_OBJECTIVE_C" --generator ObjC $<
+DOM_BINDINGS_SCRIPTS = $(GENERATE_BINDING_SCRIPTS) bindings/scripts/CodeGeneratorObjC.pm
+DOM%.h : %.idl $(DOM_BINDINGS_SCRIPTS) bindings/objc/PublicDOMInterfaces.h
+ $(call generator_script, $(DOM_BINDINGS_SCRIPTS)) $(IDL_COMMON_ARGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_OBJECTIVE_C" --generator ObjC $<
-include $(OBJC_DOM_HEADERS:.h=.dep)
diff --git a/WebCore/English.lproj/localizedStrings.js b/WebCore/English.lproj/localizedStrings.js
index 7ffafdf..e624b16 100644
--- a/WebCore/English.lproj/localizedStrings.js
+++ b/WebCore/English.lproj/localizedStrings.js
Binary files differ
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index bf197fc..278aa9b 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -99,11 +99,13 @@ webcore_built_sources += \
DerivedSources/WebCore/HTMLNames.cpp \
DerivedSources/WebCore/HTMLNames.h \
DerivedSources/WebCore/JSHTMLElementWrapperFactory.cpp \
+ DerivedSources/WebCore/RemoteInspectorFrontend2.cpp \
+ DerivedSources/WebCore/RemoteInspectorFrontend2.h \
DerivedSources/WebCore/UserAgentStyleSheets.h \
DerivedSources/WebCore/UserAgentStyleSheetsData.cpp \
DerivedSources/WebCore/XMLNSNames.cpp \
DerivedSources/WebCore/XMLNSNames.h \
- DerivedSources/WebCore/XMLNames.cpp
+ DerivedSources/WebCore/XMLNames.cpp \
DerivedSources/WebCore/XMLNames.h
IDL_BINDINGS += \
@@ -314,10 +316,10 @@ IDL_BINDINGS += \
WebCore/page/Timing.idl \
WebCore/page/WebKitPoint.idl \
WebCore/page/WorkerNavigator.idl \
- WebCore/plugins/MimeType.idl \
- WebCore/plugins/MimeTypeArray.idl \
- WebCore/plugins/Plugin.idl \
- WebCore/plugins/PluginArray.idl \
+ WebCore/plugins/DOMMimeType.idl \
+ WebCore/plugins/DOMMimeTypeArray.idl \
+ WebCore/plugins/DOMPlugin.idl \
+ WebCore/plugins/DOMPluginArray.idl \
WebCore/workers/AbstractWorker.idl \
WebCore/workers/DedicatedWorkerContext.idl \
WebCore/workers/SharedWorker.idl \
@@ -333,6 +335,12 @@ IDL_BINDINGS += \
WebCore/xml/XMLSerializer.idl \
WebCore/xml/XSLTProcessor.idl
+# This IDL file should not be used when calculating the source list
+# of libWebCoreJS, so we add it directly to the header list here, so
+# that it will be included in the distribution.
+noinst_HEADERS += \
+ WebCore/inspector/InspectorFrontend2.idl
+
webcoregtk_dom_sources = \
WebCore/bindings/gobject/ConvertToUTF8String.cpp \
WebCore/bindings/gobject/ConvertToUTF8String.h \
@@ -493,7 +501,7 @@ webcore_sources += \
WebCore/bindings/js/JSMessageEventCustom.cpp \
WebCore/bindings/js/JSMessagePortCustom.cpp \
WebCore/bindings/js/JSMessagePortCustom.h \
- WebCore/bindings/js/JSMimeTypeArrayCustom.cpp \
+ WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp \
WebCore/bindings/js/JSNamedNodeMapCustom.cpp \
WebCore/bindings/js/JSNavigatorCustom.cpp \
WebCore/bindings/js/JSNodeCustom.cpp \
@@ -505,8 +513,8 @@ webcore_sources += \
WebCore/bindings/js/JSNodeListCustom.cpp \
WebCore/bindings/js/JSOptionConstructor.cpp \
WebCore/bindings/js/JSOptionConstructor.h \
- WebCore/bindings/js/JSPluginArrayCustom.cpp \
- WebCore/bindings/js/JSPluginCustom.cpp \
+ WebCore/bindings/js/JSDOMPluginArrayCustom.cpp \
+ WebCore/bindings/js/JSDOMPluginCustom.cpp \
WebCore/bindings/js/JSPluginElementFunctions.cpp \
WebCore/bindings/js/JSPluginElementFunctions.h \
WebCore/bindings/js/JSPopStateEventCustom.cpp \
@@ -565,6 +573,7 @@ webcore_sources += \
WebCore/bindings/js/StringSourceProvider.h \
WebCore/bindings/js/WebCoreJSClientData.h \
WebCore/bindings/ScriptControllerBase.cpp \
+ WebCore/bindings/ScriptControllerBase.h \
WebCore/bridge/Bridge.h \
WebCore/bridge/IdentifierRep.cpp \
WebCore/bridge/IdentifierRep.h \
@@ -753,8 +762,6 @@ webcore_sources += \
WebCore/dom/CDATASection.h \
WebCore/dom/CSSMappedAttributeDeclaration.cpp \
WebCore/dom/CSSMappedAttributeDeclaration.h \
- WebCore/dom/CanvasSurface.cpp \
- WebCore/dom/CanvasSurface.h \
WebCore/dom/CharacterData.cpp \
WebCore/dom/CharacterData.h \
WebCore/dom/CheckedRadioButtons.cpp \
@@ -793,9 +800,9 @@ webcore_sources += \
WebCore/dom/DatasetDOMStringMap.h \
WebCore/dom/DecodedDataDocumentParser.cpp \
WebCore/dom/DecodedDataDocumentParser.h \
- WebCore/dom/DeviceOrientation.cpp \
- WebCore/dom/DeviceOrientation.h \
WebCore/dom/DeviceOrientationClient.h \
+ WebCore/dom/DeviceOrientationController.cpp \
+ WebCore/dom/DeviceOrientationController.h \
WebCore/dom/DeviceOrientationEvent.cpp \
WebCore/dom/DeviceOrientationEvent.h \
WebCore/dom/Document.cpp \
@@ -1049,8 +1056,12 @@ webcore_sources += \
WebCore/editing/visible_units.cpp \
WebCore/editing/visible_units.h \
WebCore/editing/gtk/SelectionControllerGtk.cpp \
- WebCore/history/BackForwardList.cpp \
+ WebCore/history/BackForwardController.cpp \
+ WebCore/history/BackForwardController.h \
+ WebCore/history/BackForwardControllerClient.h \
WebCore/history/BackForwardList.h \
+ WebCore/history/BackForwardListImpl.cpp \
+ WebCore/history/BackForwardListImpl.h \
WebCore/history/CachedFrame.cpp \
WebCore/history/CachedFrame.h \
WebCore/history/CachedFramePlatformData.h \
@@ -1168,6 +1179,8 @@ webcore_sources += \
WebCore/html/HTMLDivElement.h \
WebCore/html/HTMLDocument.cpp \
WebCore/html/HTMLDocument.h \
+ WebCore/html/HTMLConstructionSite.cpp \
+ WebCore/html/HTMLConstructionSite.h \
WebCore/html/HTMLElement.cpp \
WebCore/html/HTMLElement.h \
WebCore/html/HTMLElementStack.cpp \
@@ -1348,6 +1361,8 @@ webcore_sources += \
WebCore/inspector/InjectedScript.h \
WebCore/inspector/InjectedScriptHost.cpp \
WebCore/inspector/InjectedScriptHost.h \
+ WebCore/inspector/InspectorApplicationCacheAgent.cpp \
+ WebCore/inspector/InspectorApplicationCacheAgent.h \
WebCore/inspector/InspectorBackend.cpp \
WebCore/inspector/InspectorBackend.h \
WebCore/inspector/InspectorCSSStore.cpp \
@@ -1590,6 +1605,7 @@ webcore_sources += \
WebCore/page/Timing.h \
WebCore/page/UserContentURLPattern.cpp \
WebCore/page/UserContentURLPattern.h \
+ WebCore/page/UserContentTypes.h \
WebCore/page/UserScript.h \
WebCore/page/UserScriptTypes.h \
WebCore/page/UserStyleSheet.h \
@@ -1892,14 +1908,14 @@ webcore_sources += \
WebCore/platform/text/UnicodeRange.h \
WebCore/platform/text/transcoder/FontTranscoder.cpp \
WebCore/platform/text/transcoder/FontTranscoder.h \
- WebCore/plugins/MimeType.cpp \
- WebCore/plugins/MimeType.h \
- WebCore/plugins/MimeTypeArray.cpp \
- WebCore/plugins/MimeTypeArray.h \
- WebCore/plugins/Plugin.cpp \
- WebCore/plugins/Plugin.h \
- WebCore/plugins/PluginArray.cpp \
- WebCore/plugins/PluginArray.h \
+ WebCore/plugins/DOMMimeType.cpp \
+ WebCore/plugins/DOMMimeType.h \
+ WebCore/plugins/DOMMimeTypeArray.cpp \
+ WebCore/plugins/DOMMimeTypeArray.h \
+ WebCore/plugins/DOMPlugin.cpp \
+ WebCore/plugins/DOMPlugin.h \
+ WebCore/plugins/DOMPluginArray.cpp \
+ WebCore/plugins/DOMPluginArray.h \
WebCore/plugins/PluginData.cpp \
WebCore/plugins/PluginData.h \
WebCore/plugins/PluginDatabase.cpp \
@@ -2493,6 +2509,7 @@ webcore_sources += \
WebCore/storage/DatabaseTracker.cpp \
WebCore/storage/DatabaseTracker.h \
WebCore/storage/DatabaseTrackerClient.h \
+ WebCore/storage/IDBKey.h \
WebCore/storage/OriginQuotaManager.cpp \
WebCore/storage/OriginQuotaManager.h \
WebCore/storage/OriginUsageRecord.cpp \
@@ -3126,6 +3143,8 @@ webcore_sources += \
WebCore/mathml/RenderMathMLUnderOver.cpp \
WebCore/mathml/RenderMathMLUnderOver.h
+endif # END ENABLE_MATHML
+
webcore_built_sources += \
DerivedSources/WebCore/MathMLElementFactory.cpp \
DerivedSources/WebCore/MathMLElementFactory.h \
@@ -3139,14 +3158,7 @@ DerivedSources/WebCore/MathMLNames.h: DerivedSources/WebCore/MathMLNames.cpp
DerivedSources/WebCore/MathMLElementFactory.cpp DerivedSources/WebCore/MathMLNames.cpp: $(WebCore)/dom/make_names.pl $(WebCore)/mathml/mathtags.in $(WebCore)/mathml/mathattrs.in
$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --tags $(WebCore)/mathml/mathtags.in --attrs $(WebCore)/mathml/mathattrs.in --factory --wrapperFactory --outputDir "$(GENSOURCES_WEBCORE)"
-else
-DerivedSources/WebCore/MathMLElementFactory.cpp:
- echo > $@
-
-DerivedSources/WebCore/MathMLNames.cpp:
- echo > $@
-endif # END ENABLE_MATHML
# ----
# Notifications support
@@ -3178,12 +3190,6 @@ FEATURE_DEFINES += ENABLE_SVG=1
WEBCORE_CSS_PROPERTY_NAMES += $(WebCore)/css/SVGCSSPropertyNames.in
WEBCORE_CSS_VALUE_KEYWORDS += $(WebCore)/css/SVGCSSValueKeywords.in
-webcore_built_sources += \
- DerivedSources/WebCore/JSSVGElementWrapperFactory.cpp \
- DerivedSources/WebCore/SVGElementFactory.cpp \
- DerivedSources/WebCore/SVGNames.cpp \
- DerivedSources/WebCore/XLinkNames.cpp
-
IDL_BINDINGS += \
WebCore/svg/ElementTimeControl.idl \
WebCore/svg/SVGAElement.idl \
@@ -3790,6 +3796,14 @@ SVG_FEATURES += ENABLE_SVG_ANIMATION=1
webcore_cppflags += -DENABLE_SVG_ANIMATION=1
endif
+endif # END ENABLE_SVG
+
+webcore_built_sources += \
+ DerivedSources/WebCore/JSSVGElementWrapperFactory.cpp \
+ DerivedSources/WebCore/SVGElementFactory.cpp \
+ DerivedSources/WebCore/SVGNames.cpp \
+ DerivedSources/WebCore/XLinkNames.cpp
+
# SVG tag and attribute names (need to pass an extra flag if svg experimental features are enabled)
DerivedSources/WebCore/SVGNames.cpp: DerivedSources/WebCore/SVGElementFactory.cpp;
DerivedSources/WebCore/JSSVGElementWrapperFactory.cpp: DerivedSources/WebCore/SVGElementFactory.cpp
@@ -3810,8 +3824,6 @@ DerivedSources/WebCore/XLinkNames.h: DerivedSources/WebCore/XLinkNames.cpp;
DerivedSources/WebCore/XLinkNames.cpp : $(WebCore)/dom/make_names.pl $(WebCore)/svg/xlinkattrs.in
$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --attrs $(WebCore)/svg/xlinkattrs.in --outputDir "$(GENSOURCES_WEBCORE)"
-endif # END ENABLE_SVG
-
# ----
# Web Sockets Support
# ----
@@ -3970,6 +3982,10 @@ DerivedSources/WebCore/XMLNSNames.cpp DerivedSources/WebCore/XMLNSNames.h: $(Web
DerivedSources/WebCore/XMLNames.cpp DerivedSources/WebCore/XMLNames.h: $(WebCore)/dom/make_names.pl $(WebCore)/xml/xmlattrs.in
$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --attrs $(WebCore)/xml/xmlattrs.in --outputDir "$(GENSOURCES_WEBCORE)"
+# Remote Inspector frontend
+DerivedSources/WebCore/RemoteInspectorFrontend2.cpp DerivedSources/WebCore/RemoteInspectorFrontend2.h: $(WebCore)/inspector/InspectorFrontend2.idl $(SCRIPTS_BINDINGS) $(WebCore)/inspector/CodeGeneratorInspector.pm
+ $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts -I$(WebCore)/inspector $(WebCore)/bindings/scripts/generate-bindings.pl $(IDL_PATH:%=--include "%") --outputDir "$(GENSOURCES_WEBCORE)" --defines "LANGUAGE_JAVASCRIPT=1 $(FEATURE_DEFINES)" --generator Inspector $<
+
IDL_PATH := \
$(WebCore)/bindings/js \
$(WebCore)/css \
@@ -4041,7 +4057,7 @@ libWebCoreJS.la: $(libWebCoreJS_objects)
DerivedSources/webkit/webkitdomdummy.c:
- mkdir -p DerivedSources/webkit || echo > $@
+ $(AM_V_GEN)mkdir -p DerivedSources/webkit || echo > $@
# Because WebCore/bindings/gobject/WebKitDOMObject.h is static source but is also a distributed header
# required by other distributed headers (both static and auto-generated), need to move this to the
@@ -4163,10 +4179,10 @@ IDL_BINDINGS_GDOM += \
WebCore/page/Navigator.idl \
WebCore/page/Screen.idl \
WebCore/page/WebKitPoint.idl \
- WebCore/plugins/MimeType.idl \
- WebCore/plugins/MimeTypeArray.idl \
- WebCore/plugins/Plugin.idl \
- WebCore/plugins/PluginArray.idl \
+ WebCore/plugins/DOMMimeType.idl \
+ WebCore/plugins/DOMMimeTypeArray.idl \
+ WebCore/plugins/DOMPlugin.idl \
+ WebCore/plugins/DOMPluginArray.idl \
WebCore/storage/Database.idl \
WebCore/storage/Storage.idl \
WebCore/xml/XPathExpression.idl \
@@ -4268,6 +4284,8 @@ webcore_dist += \
WebCore/css/SVGCSSValueKeywords.in \
WebCore/css/makegrammar.pl \
WebCore/dom/make_names.pl \
+ WebCore/inspector/CodeGeneratorInspector.pm \
+ WebCore/mathml/mathattrs.in \
WebCore/mathml/mathtags.in \
WebCore/platform/text/mac/make-charset-table.pl \
WebCore/platform/ColorData.gperf \
diff --git a/WebCore/WebCore.3DRendering.exp b/WebCore/WebCore.3DRendering.exp
deleted file mode 100644
index 4a84c63..0000000
--- a/WebCore/WebCore.3DRendering.exp
+++ /dev/null
@@ -1 +0,0 @@
-_WebCoreHas3DRendering
diff --git a/WebCore/WebCore.AcceleratedCompositing.exp b/WebCore/WebCore.AcceleratedCompositing.exp
deleted file mode 100644
index 40abc69..0000000
--- a/WebCore/WebCore.AcceleratedCompositing.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-__ZN7WebCore13GraphicsLayer17removeAllChildrenEv
-__ZN7WebCore13GraphicsLayer6createEPNS_19GraphicsLayerClientE
diff --git a/WebCore/WebCore.ClientBasedGeolocation.exp b/WebCore/WebCore.ClientBasedGeolocation.exp
deleted file mode 100644
index c624acb..0000000
--- a/WebCore/WebCore.ClientBasedGeolocation.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-__ZN7WebCore21GeolocationController13errorOccurredEPNS_16GeolocationErrorE
-__ZN7WebCore21GeolocationController15positionChangedEPNS_19GeolocationPositionE
diff --git a/WebCore/WebCore.ContextMenus.exp b/WebCore/WebCore.ContextMenus.exp
deleted file mode 100644
index 62b2c1f..0000000
--- a/WebCore/WebCore.ContextMenus.exp
+++ /dev/null
@@ -1,5 +0,0 @@
-__ZN7WebCore11ContextMenu22setPlatformDescriptionEP14NSMutableArray
-__ZN7WebCore12EventHandler20sendContextMenuEventEP7NSEvent
-__ZN7WebCore15ContextMenuItem26releasePlatformDescriptionEv
-__ZN7WebCore21ContextMenuController16clearContextMenuEv
-__ZNK7WebCore11ContextMenu19platformDescriptionEv
diff --git a/WebCore/WebCore.DashboardSupport.exp b/WebCore/WebCore.DashboardSupport.exp
deleted file mode 100644
index 70fed73..0000000
--- a/WebCore/WebCore.DashboardSupport.exp
+++ /dev/null
@@ -1,3 +0,0 @@
-.objc_class_name_WebDashboardRegion
-__ZN7WebCore5Frame26dashboardRegionsDictionaryEv
-__ZN7WebCore8Settings41setUsesDashboardBackwardCompatibilityModeEb
diff --git a/WebCore/WebCore.DragSupport.exp b/WebCore/WebCore.DragSupport.exp
deleted file mode 100644
index 30786ba..0000000
--- a/WebCore/WebCore.DragSupport.exp
+++ /dev/null
@@ -1,9 +0,0 @@
-__ZN7WebCore12EventHandler17dragSourceEndedAtERKNS_18PlatformMouseEventENS_13DragOperationE
-__ZN7WebCore12EventHandler17eventMayStartDragEP7NSEvent
-__ZN7WebCore14DragController10dragExitedEPNS_8DragDataE
-__ZN7WebCore14DragController11dragEnteredEPNS_8DragDataE
-__ZN7WebCore14DragController11dragUpdatedEPNS_8DragDataE
-__ZN7WebCore14DragController11performDragEPNS_8DragDataE
-__ZN7WebCore14DragController14placeDragCaretERKNS_8IntPointE
-__ZN7WebCore14DragController9dragEndedEv
-__ZN7WebCore8DragDataC1EP11objc_objectRKNS_8IntPointES5_NS_13DragOperationEPNS_16PasteboardHelperE
diff --git a/WebCore/WebCore.Geolocation.exp b/WebCore/WebCore.Geolocation.exp
deleted file mode 100644
index 296c8aa..0000000
--- a/WebCore/WebCore.Geolocation.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-__ZN7WebCore22GeolocationServiceMock11setPositionEN3WTF10PassRefPtrINS_11GeopositionEEE
-__ZN7WebCore22GeolocationServiceMock8setErrorEN3WTF10PassRefPtrINS_13PositionErrorEEE
diff --git a/WebCore/WebCore.Inspector.exp b/WebCore/WebCore.Inspector.exp
deleted file mode 100644
index 5bf6f05..0000000
--- a/WebCore/WebCore.Inspector.exp
+++ /dev/null
@@ -1,30 +0,0 @@
-__ZN7WebCore19InspectorController10setSettingERKNS_6StringES3_
-__ZN7WebCore19InspectorController14enableDebuggerEv
-__ZN7WebCore19InspectorController14enableProfilerEbb
-__ZN7WebCore19InspectorController15disableDebuggerEb
-__ZN7WebCore19InspectorController15disableProfilerEb
-__ZN7WebCore19InspectorController18disconnectFrontendEv
-__ZN7WebCore19InspectorController20stopTimelineProfilerEv
-__ZN7WebCore19InspectorController21startTimelineProfilerEv
-__ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKNS_6StringE
-__ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtrINS_23InspectorFrontendClientEEE
-__ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv
-__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_EE
-__ZN7WebCore19InspectorController4showEv
-__ZN7WebCore19InspectorController5closeEv
-__ZN7WebCore19InspectorController7inspectEPNS_4NodeE
-__ZN7WebCore19InspectorController9showPanelENS0_13SpecialPanelsE
-__ZN7WebCore28InspectorFrontendClientLocal12moveWindowByEff
-__ZN7WebCore28InspectorFrontendClientLocal14frontendLoadedEv
-__ZN7WebCore28InspectorFrontendClientLocal15canAttachWindowEv
-__ZN7WebCore28InspectorFrontendClientLocal17setAttachedWindowEb
-__ZN7WebCore28InspectorFrontendClientLocal19requestAttachWindowEv
-__ZN7WebCore28InspectorFrontendClientLocal19requestDetachWindowEv
-__ZN7WebCore28InspectorFrontendClientLocal19windowObjectClearedEv
-__ZN7WebCore28InspectorFrontendClientLocal26changeAttachedWindowHeightEj
-__ZN7WebCore28InspectorFrontendClientLocal27restoreAttachedWindowHeightEv
-__ZN7WebCore28InspectorFrontendClientLocalC2EPNS_19InspectorControllerEPNS_4PageE
-__ZN7WebCore28InspectorFrontendClientLocalD2Ev
-__ZNK7WebCore19InspectorController17drawNodeHighlightERNS_15GraphicsContextE
-__ZNK7WebCore19InspectorController7enabledEv
-__ZNK7WebCore19InspectorController7settingERKNS_6StringE
diff --git a/WebCore/WebCore.JNI.exp b/WebCore/WebCore.JNI.exp
deleted file mode 100644
index d57b8c7..0000000
--- a/WebCore/WebCore.JNI.exp
+++ /dev/null
@@ -1,10 +0,0 @@
-_KJS_JSCreateNativeJSObject
-_KJS_JSObject_JSFinalize
-_KJS_JSObject_JSObjectCall
-_KJS_JSObject_JSObjectEval
-_KJS_JSObject_JSObjectGetMember
-_KJS_JSObject_JSObjectGetSlot
-_KJS_JSObject_JSObjectRemoveMember
-_KJS_JSObject_JSObjectSetMember
-_KJS_JSObject_JSObjectSetSlot
-_KJS_JSObject_JSObjectToString
diff --git a/WebCore/WebCore.NPAPI.exp b/WebCore/WebCore.NPAPI.exp
deleted file mode 100644
index 781332e..0000000
--- a/WebCore/WebCore.NPAPI.exp
+++ /dev/null
@@ -1,28 +0,0 @@
-__NPN_Construct
-__NPN_CreateObject
-__NPN_Enumerate
-__NPN_Evaluate
-__NPN_GetIntIdentifier
-__NPN_GetProperty
-__NPN_GetStringIdentifier
-__NPN_GetStringIdentifiers
-__NPN_HasMethod
-__NPN_HasProperty
-__NPN_IdentifierIsString
-__NPN_IntFromIdentifier
-__NPN_Invoke
-__NPN_InvokeDefault
-__NPN_ReleaseObject
-__NPN_ReleaseVariantValue
-__NPN_RemoveProperty
-__NPN_RetainObject
-__NPN_SetException
-__NPN_SetProperty
-__NPN_UTF8FromIdentifier
-__ZN7WebCore16ScriptController20windowScriptNPObjectEv
-__ZN7WebCore16ScriptController29cleanupScriptObjectsForPluginEPv
-__ZNK7WebCore12RenderObject4viewEv
-__ZNK7WebCore14SecurityOrigin9canAccessEPKS0_
-__ZNK7WebCore4KURL7hasPathEv
-__ZNK7WebCore4KURL9prettyURLEv
-__ZNK7WebCore9FrameView22windowClipRectForLayerEPKNS_11RenderLayerEb
diff --git a/WebCore/WebCore.OrientationEvents.exp b/WebCore/WebCore.OrientationEvents.exp
deleted file mode 100644
index ec0978d..0000000
--- a/WebCore/WebCore.OrientationEvents.exp
+++ /dev/null
@@ -1 +0,0 @@
-__ZN7WebCore5Frame26sendOrientationChangeEventEi
diff --git a/WebCore/WebCore.PluginHostProcess.exp b/WebCore/WebCore.PluginHostProcess.exp
deleted file mode 100644
index e9d4734..0000000
--- a/WebCore/WebCore.PluginHostProcess.exp
+++ /dev/null
@@ -1,28 +0,0 @@
-# This file gets appended to WebCore.exp when USE(PLUGIN_HOST_PROCESS) is 1.
-__ZN3JSC13RuntimeMethod11getCallDataERNS_8CallDataE
-__ZN3JSC13RuntimeMethod18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
-__ZN3JSC13RuntimeMethod24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
-__ZN3JSC13RuntimeMethod6s_infoE
-__ZN3JSC13RuntimeMethodC2EPNS_9ExecStateEPNS_14JSGlobalObjectERKNS_10IdentifierERN3WTF6VectorIPNS_8Bindings6MethodELm0EEE
-__ZN3JSC8Bindings10RootObjectD1Ev
-__ZN3JSC8Bindings13RuntimeObject11getCallDataERNS_8CallDataE
-__ZN3JSC8Bindings13RuntimeObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE
-__ZN3JSC8Bindings13RuntimeObject16getConstructDataERNS_13ConstructDataE
-__ZN3JSC8Bindings13RuntimeObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
-__ZN3JSC8Bindings13RuntimeObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE
-__ZN3JSC8Bindings13RuntimeObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
-__ZN3JSC8Bindings13RuntimeObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE
-__ZN3JSC8Bindings13RuntimeObject6s_infoE
-__ZN3JSC8Bindings13RuntimeObjectC2EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF10PassRefPtrINS0_8InstanceEEE
-__ZN3JSC8Bindings13RuntimeObjectD2Ev
-__ZN3JSC8Bindings8Instance19createRuntimeObjectEPNS_9ExecStateE
-__ZN3JSC8Bindings8InstanceC2EN3WTF10PassRefPtrINS0_10RootObjectEEE
-__ZN3JSC8Bindings8InstanceD2Ev
-__ZN7WebCore13IdentifierRep3getEPKc
-__ZN7WebCore13IdentifierRep3getEi
-__ZN7WebCore13IdentifierRep7isValidEPS0_
-__ZN7WebCore16ScriptController16createRootObjectEPv
-__ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE
-__ZN7WebCore16ScriptController24jsObjectForPluginElementEPNS_17HTMLPlugInElementE
-__ZNK3JSC8Bindings13RuntimeObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE
-__ZTVN3JSC13RuntimeMethodE
diff --git a/WebCore/WebCore.ProtectionSpaceAuthCallback.exp b/WebCore/WebCore.ProtectionSpaceAuthCallback.exp
deleted file mode 100644
index 4c27ed9..0000000
--- a/WebCore/WebCore.ProtectionSpaceAuthCallback.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-__ZN7WebCore3macERKNS_15ProtectionSpaceE
-__ZNK7WebCore15ProtectionSpace20authenticationSchemeEv
diff --git a/WebCore/WebCore.SVG.Animation.exp b/WebCore/WebCore.SVG.Animation.exp
deleted file mode 100644
index e90aec7..0000000
--- a/WebCore/WebCore.SVG.Animation.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-.objc_class_name_DOMSVGAnimateElement
-.objc_class_name_DOMSVGAnimateTransformElement
diff --git a/WebCore/WebCore.SVG.Filters.exp b/WebCore/WebCore.SVG.Filters.exp
deleted file mode 100644
index 5698258..0000000
--- a/WebCore/WebCore.SVG.Filters.exp
+++ /dev/null
@@ -1,25 +0,0 @@
-.objc_class_name_DOMSVGComponentTransferFunctionElement
-.objc_class_name_DOMSVGFEBlendElement
-.objc_class_name_DOMSVGFEColorMatrixElement
-.objc_class_name_DOMSVGFEComponentTransferElement
-.objc_class_name_DOMSVGFECompositeElement
-.objc_class_name_DOMSVGFEDiffuseLightingElement
-.objc_class_name_DOMSVGFEDisplacementMapElement
-.objc_class_name_DOMSVGFEDistantLightElement
-.objc_class_name_DOMSVGFEFloodElement
-.objc_class_name_DOMSVGFEFuncAElement
-.objc_class_name_DOMSVGFEFuncBElement
-.objc_class_name_DOMSVGFEFuncGElement
-.objc_class_name_DOMSVGFEFuncRElement
-.objc_class_name_DOMSVGFEGaussianBlurElement
-.objc_class_name_DOMSVGFEImageElement
-.objc_class_name_DOMSVGFEMergeElement
-.objc_class_name_DOMSVGFEMergeNodeElement
-.objc_class_name_DOMSVGFEMorphologyElement
-.objc_class_name_DOMSVGFEOffsetElement
-.objc_class_name_DOMSVGFEPointLightElement
-.objc_class_name_DOMSVGFESpecularLightingElement
-.objc_class_name_DOMSVGFESpotLightElement
-.objc_class_name_DOMSVGFETileElement
-.objc_class_name_DOMSVGFETurbulenceElement
-.objc_class_name_DOMSVGFilterElement
diff --git a/WebCore/WebCore.SVG.ForeignObject.exp b/WebCore/WebCore.SVG.ForeignObject.exp
deleted file mode 100644
index 255f600..0000000
--- a/WebCore/WebCore.SVG.ForeignObject.exp
+++ /dev/null
@@ -1 +0,0 @@
-.objc_class_name_DOMSVGForeignObjectElement
diff --git a/WebCore/WebCore.SVG.exp b/WebCore/WebCore.SVG.exp
deleted file mode 100644
index 1e56700..0000000
--- a/WebCore/WebCore.SVG.exp
+++ /dev/null
@@ -1,95 +0,0 @@
-.objc_class_name_DOMSVGAElement
-.objc_class_name_DOMSVGAltGlyphElement
-.objc_class_name_DOMSVGAngle
-.objc_class_name_DOMSVGAnimateColorElement
-.objc_class_name_DOMSVGAnimatedAngle
-.objc_class_name_DOMSVGAnimatedBoolean
-.objc_class_name_DOMSVGAnimatedEnumeration
-.objc_class_name_DOMSVGAnimatedInteger
-.objc_class_name_DOMSVGAnimatedLength
-.objc_class_name_DOMSVGAnimatedLengthList
-.objc_class_name_DOMSVGAnimatedNumber
-.objc_class_name_DOMSVGAnimatedNumberList
-.objc_class_name_DOMSVGAnimatedPreserveAspectRatio
-.objc_class_name_DOMSVGAnimatedRect
-.objc_class_name_DOMSVGAnimatedString
-.objc_class_name_DOMSVGAnimatedTransformList
-.objc_class_name_DOMSVGAnimationElement
-.objc_class_name_DOMSVGCircleElement
-.objc_class_name_DOMSVGClipPathElement
-.objc_class_name_DOMSVGColor
-.objc_class_name_DOMSVGCursorElement
-.objc_class_name_DOMSVGDefsElement
-.objc_class_name_DOMSVGDescElement
-.objc_class_name_DOMSVGDocument
-.objc_class_name_DOMSVGElement
-.objc_class_name_DOMSVGElementInstance
-.objc_class_name_DOMSVGElementInstanceList
-.objc_class_name_DOMSVGEllipseElement
-.objc_class_name_DOMSVGGElement
-.objc_class_name_DOMSVGGradientElement
-.objc_class_name_DOMSVGImageElement
-.objc_class_name_DOMSVGLength
-.objc_class_name_DOMSVGLengthList
-.objc_class_name_DOMSVGLineElement
-.objc_class_name_DOMSVGLinearGradientElement
-.objc_class_name_DOMSVGMarkerElement
-.objc_class_name_DOMSVGMaskElement
-.objc_class_name_DOMSVGMatrix
-.objc_class_name_DOMSVGMetadataElement
-.objc_class_name_DOMSVGNumber
-.objc_class_name_DOMSVGNumberList
-.objc_class_name_DOMSVGPaint
-.objc_class_name_DOMSVGPathElement
-.objc_class_name_DOMSVGPathSeg
-.objc_class_name_DOMSVGPathSegArcAbs
-.objc_class_name_DOMSVGPathSegArcRel
-.objc_class_name_DOMSVGPathSegClosePath
-.objc_class_name_DOMSVGPathSegCurvetoCubicAbs
-.objc_class_name_DOMSVGPathSegCurvetoCubicRel
-.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothAbs
-.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothRel
-.objc_class_name_DOMSVGPathSegCurvetoQuadraticAbs
-.objc_class_name_DOMSVGPathSegCurvetoQuadraticRel
-.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothAbs
-.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothRel
-.objc_class_name_DOMSVGPathSegLinetoAbs
-.objc_class_name_DOMSVGPathSegLinetoHorizontalAbs
-.objc_class_name_DOMSVGPathSegLinetoHorizontalRel
-.objc_class_name_DOMSVGPathSegLinetoRel
-.objc_class_name_DOMSVGPathSegLinetoVerticalAbs
-.objc_class_name_DOMSVGPathSegLinetoVerticalRel
-.objc_class_name_DOMSVGPathSegList
-.objc_class_name_DOMSVGPathSegMovetoAbs
-.objc_class_name_DOMSVGPathSegMovetoRel
-.objc_class_name_DOMSVGPatternElement
-.objc_class_name_DOMSVGPoint
-.objc_class_name_DOMSVGPointList
-.objc_class_name_DOMSVGPolygonElement
-.objc_class_name_DOMSVGPolylineElement
-.objc_class_name_DOMSVGPreserveAspectRatio
-.objc_class_name_DOMSVGRadialGradientElement
-.objc_class_name_DOMSVGRect
-.objc_class_name_DOMSVGRectElement
-.objc_class_name_DOMSVGRenderingIntent
-.objc_class_name_DOMSVGSVGElement
-.objc_class_name_DOMSVGScriptElement
-.objc_class_name_DOMSVGSetElement
-.objc_class_name_DOMSVGStopElement
-.objc_class_name_DOMSVGStringList
-.objc_class_name_DOMSVGStyleElement
-.objc_class_name_DOMSVGSwitchElement
-.objc_class_name_DOMSVGSymbolElement
-.objc_class_name_DOMSVGTRefElement
-.objc_class_name_DOMSVGTSpanElement
-.objc_class_name_DOMSVGTextContentElement
-.objc_class_name_DOMSVGTextElement
-.objc_class_name_DOMSVGTextPathElement
-.objc_class_name_DOMSVGTextPositioningElement
-.objc_class_name_DOMSVGTitleElement
-.objc_class_name_DOMSVGTransform
-.objc_class_name_DOMSVGTransformList
-.objc_class_name_DOMSVGUnitTypes
-.objc_class_name_DOMSVGUseElement
-.objc_class_name_DOMSVGViewElement
-.objc_class_name_DOMSVGZoomEvent
diff --git a/WebCore/WebCore.Tiger.exp b/WebCore/WebCore.Tiger.exp
deleted file mode 100644
index b45c753..0000000
--- a/WebCore/WebCore.Tiger.exp
+++ /dev/null
@@ -1,13 +0,0 @@
-_wkClearGlyphVector
-_wkConvertCharToGlyphs
-_wkCopyFullFontName
-_wkGetATSStyleGroup
-_wkGetCGFontFromNSFont
-_wkGetFontMetrics
-_wkGetGlyphVectorFirstRecord
-_wkGetGlyphVectorNumGlyphs
-_wkGetGlyphVectorRecordSize
-_wkGetNSFontATSUFontId
-_wkInitializeGlyphVector
-_wkReleaseStyleGroup
-_wkSupportsMultipartXMixedReplace
diff --git a/WebCore/WebCore.Video.exp b/WebCore/WebCore.Video.exp
deleted file mode 100644
index 631a601..0000000
--- a/WebCore/WebCore.Video.exp
+++ /dev/null
@@ -1,18 +0,0 @@
-__ZN7WebCore16HTMLMediaElement10screenRectEv
-__ZN7WebCore16HTMLMediaElement12endScrubbingEv
-__ZN7WebCore16HTMLMediaElement14beginScrubbingEv
-__ZN7WebCore16HTMLMediaElement14exitFullscreenEv
-__ZN7WebCore16HTMLMediaElement14setCurrentTimeEfRi
-__ZN7WebCore16HTMLMediaElement4playEb
-__ZN7WebCore16HTMLMediaElement5pauseEb
-__ZN7WebCore16HTMLMediaElement6rewindEf
-__ZN7WebCore16HTMLMediaElement8setMutedEb
-__ZN7WebCore16HTMLMediaElement9setVolumeEfRi
-__ZNK7WebCore16HTMLMediaElement11currentTimeEv
-__ZNK7WebCore16HTMLMediaElement13platformMediaEv
-__ZNK7WebCore16HTMLMediaElement21processingUserGestureEv
-__ZNK7WebCore16HTMLMediaElement5mutedEv
-__ZNK7WebCore16HTMLMediaElement6volumeEv
-__ZNK7WebCore16HTMLMediaElement7canPlayEv
-__ZNK7WebCore16HTMLMediaElement12playbackRateEv
-__ZNK7WebCore16HTMLMediaElement8durationEv
diff --git a/WebCore/WebCore.VideoProxy.exp b/WebCore/WebCore.VideoProxy.exp
deleted file mode 100644
index 6412d2c..0000000
--- a/WebCore/WebCore.VideoProxy.exp
+++ /dev/null
@@ -1,4 +0,0 @@
-__ZN7WebCore16HTMLMediaElement19deliverNotificationE32MediaPlayerProxyNotificationType
-__ZN7WebCore16HTMLMediaElement19setMediaPlayerProxyEP19WebMediaPlayerProxy
-__ZN7WebCore9HTMLNames8audioTagE
-__ZN7WebCore9HTMLNames8videoTagE
diff --git a/WebCore/WebCore.base.exp b/WebCore/WebCore.exp.in
index beb5b44..71c632f 100644
--- a/WebCore/WebCore.base.exp
+++ b/WebCore/WebCore.exp.in
@@ -142,7 +142,7 @@ __ZN7WebCore10handCursorEv
__ZN7WebCore10setCookiesEPNS_8DocumentERKNS_4KURLERKNS_6StringE
__ZN7WebCore11BitmapImageC1EP7CGImagePNS_13ImageObserverE
__ZN7WebCore11CachedFrame23cachedFramePlatformDataEv
-__ZN7WebCore11CachedFrame26setCachedFramePlatformDataEPNS_23CachedFramePlatformDataE
+__ZN7WebCore11CachedFrame26setCachedFramePlatformDataEN3WTF10PassOwnPtrINS_23CachedFramePlatformDataEEE
__ZN7WebCore11EditCommand7reapplyEv
__ZN7WebCore11EditCommand7unapplyEv
__ZN7WebCore11FileChooser10chooseFileERKNS_6StringE
@@ -317,29 +317,6 @@ __ZN7WebCore14SecurityOrigin40setDomainRelaxationForbiddenForURLSchemeEbRKNS_6St
__ZN7WebCore14SecurityOrigin6createERKNS_4KURLEi
__ZN7WebCore14SecurityOrigin7canLoadERKNS_4KURLERKNS_6StringEPNS_8DocumentE
__ZN7WebCore15ArchiveResource6createEN3WTF10PassRefPtrINS_12SharedBufferEEERKNS_4KURLERKNS_6StringESA_SA_RKNS_16ResourceResponseE
-__ZN7WebCore15BackForwardList10removeItemEPNS_11HistoryItemE
-__ZN7WebCore15BackForwardList10setEnabledEb
-__ZN7WebCore15BackForwardList11currentItemEv
-__ZN7WebCore15BackForwardList11forwardItemEv
-__ZN7WebCore15BackForwardList11itemAtIndexEi
-__ZN7WebCore15BackForwardList11setCapacityEi
-__ZN7WebCore15BackForwardList12containsItemEPNS_11HistoryItemE
-__ZN7WebCore15BackForwardList13backListCountEv
-__ZN7WebCore15BackForwardList16forwardListCountEv
-__ZN7WebCore15BackForwardList17backListWithLimitEiRN3WTF6VectorINS1_6RefPtrINS_11HistoryItemEEELm0EEE
-__ZN7WebCore15BackForwardList20forwardListWithLimitEiRN3WTF6VectorINS1_6RefPtrINS_11HistoryItemEEELm0EEE
-__ZN7WebCore15BackForwardList5closeEv
-__ZN7WebCore15BackForwardList6closedEv
-__ZN7WebCore15BackForwardList6goBackEv
-__ZN7WebCore15BackForwardList7addItemEN3WTF10PassRefPtrINS_11HistoryItemEEE
-__ZN7WebCore15BackForwardList7enabledEv
-__ZN7WebCore15BackForwardList7entriesEv
-__ZN7WebCore15BackForwardList8backItemEv
-__ZN7WebCore15BackForwardList8capacityEv
-__ZN7WebCore15BackForwardList8goToItemEPNS_11HistoryItemE
-__ZN7WebCore15BackForwardList9goForwardEv
-__ZN7WebCore15BackForwardListC1EPNS_4PageE
-__ZN7WebCore15BackForwardListD1Ev
__ZN7WebCore15DOMWrapperWorld15unregisterWorldEv
__ZN7WebCore15DOMWrapperWorldD1Ev
__ZN7WebCore15DatabaseTracker12deleteOriginEPNS_14SecurityOriginE
@@ -422,10 +399,11 @@ __ZN7WebCore19AnimationController16resumeAnimationsEPNS_8DocumentE
__ZN7WebCore19AnimationController17suspendAnimationsEPNS_8DocumentE
__ZN7WebCore19AnimationController20pauseAnimationAtTimeEPNS_12RenderObjectERKNS_6StringEd
__ZN7WebCore19AnimationController21pauseTransitionAtTimeEPNS_12RenderObjectERKNS_6StringEd
+__ZN7WebCore19BackForwardListImplC1EPNS_4PageE
__ZN7WebCore19CSSStyleDeclaration11setPropertyERKNS_6StringES3_Ri
__ZN7WebCore19InspectorController34inspectorStartsAttachedSettingNameEv
__ZN7WebCore19SelectionController10setFocusedEb
-__ZN7WebCore19SelectionController12setSelectionERKNS_16VisibleSelectionEbbbNS0_19CursorAlignOnScrollENS_15TextGranularityE
+__ZN7WebCore19SelectionController12setSelectionERKNS_16VisibleSelectionEbbbNS0_19CursorAlignOnScrollENS_15TextGranularityENS_20DirectionalityPolicyE
__ZN7WebCore19SelectionController16setSelectedRangeEPNS_5RangeENS_9EAffinityEb
__ZN7WebCore19SelectionController5clearEv
__ZN7WebCore19SelectionController6modifyENS0_11EAlterationENS0_10EDirectionENS_15TextGranularityEb
@@ -515,7 +493,6 @@ __ZN7WebCore4Page13didStopPluginEPNS_14HaltablePluginE
__ZN7WebCore4Page14didStartPluginEPNS_14HaltablePluginE
__ZN7WebCore4Page14setMediaVolumeEf
__ZN7WebCore4Page15addSchedulePairEN3WTF10PassRefPtrINS_12SchedulePairEEE
-__ZN7WebCore4Page15backForwardListEv
__ZN7WebCore4Page15didMoveOnscreenEv
__ZN7WebCore4Page16setCanStartMediaEb
__ZN7WebCore4Page16setDefersLoadingEb
@@ -531,7 +508,7 @@ __ZN7WebCore4Page6goBackEv
__ZN7WebCore4Page8goToItemEPNS_11HistoryItemENS_13FrameLoadTypeE
__ZN7WebCore4Page9goForwardEv
__ZN7WebCore4Page9initGroupEv
-__ZN7WebCore4PageC1EPNS_12ChromeClientEPNS_17ContextMenuClientEPNS_12EditorClientEPNS_10DragClientEPNS_15InspectorClientEPNS_18PluginHalterClientEPNS_27GeolocationControllerClientEPNS_23DeviceOrientationClientE
+__ZN7WebCore4PageC1EPNS_12ChromeClientEPNS_17ContextMenuClientEPNS_12EditorClientEPNS_10DragClientEPNS_15InspectorClientEPNS_18PluginHalterClientEPNS_27GeolocationControllerClientEPNS_23DeviceOrientationClientEPNS_27BackForwardControllerClientE
__ZN7WebCore4PageD1Ev
__ZN7WebCore4coreEP20NSURLProtectionSpace
__ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS_19CSSStyleDeclarationE
@@ -617,6 +594,7 @@ __ZN7WebCore6WidgetD2Ev
__ZN7WebCore7Console21shouldPrintExceptionsEv
__ZN7WebCore7Console24setShouldPrintExceptionsEb
__ZN7WebCore7IntRect5uniteERKS0_
+__ZN7WebCore7IntRect9intersectERKS0_
__ZN7WebCore7IntRectC1ERKNS_9FloatRectE
__ZN7WebCore7IntSizeC1ERK7_NSSize
__ZN7WebCore7cookiesEPKNS_8DocumentERKNS_4KURLE
@@ -630,8 +608,10 @@ __ZN7WebCore8Document17getFocusableNodesERN3WTF6VectorINS1_6RefPtrINS_4NodeEEELm
__ZN7WebCore8Document19accessSVGExtensionsEv
__ZN7WebCore8Document22createDocumentFragmentEv
__ZN7WebCore8Document23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE
+__ZN7WebCore8Document24addMediaCanStartListenerEPNS_21MediaCanStartListenerE
__ZN7WebCore8Document24setShouldCreateRenderersEb
__ZN7WebCore8Document26pageSizeAndMarginsInPixelsEiRNS_7IntSizeERiS3_S3_S3_
+__ZN7WebCore8Document27removeMediaCanStartListenerEPNS_21MediaCanStartListenerE
__ZN7WebCore8Document36updateLayoutIgnorePendingStylesheetsEv
__ZN7WebCore8Document4headEv
__ZN7WebCore8FormDataD1Ev
@@ -772,10 +752,10 @@ __ZN7WebCore9PageCache11setCapacityEi
__ZN7WebCore9PageCache27releaseAutoreleasedPagesNowEv
__ZN7WebCore9PageGroup14addVisitedLinkEPKtm
__ZN7WebCore9PageGroup17closeLocalStorageEv
-__ZN7WebCore9PageGroup20addUserScriptToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_NS_23UserScriptInjectionTimeE
+__ZN7WebCore9PageGroup20addUserScriptToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_NS_23UserScriptInjectionTimeENS_25UserContentInjectedFramesE
__ZN7WebCore9PageGroup20removeAllUserContentEv
__ZN7WebCore9PageGroup21removeAllVisitedLinksEv
-__ZN7WebCore9PageGroup24addUserStyleSheetToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_
+__ZN7WebCore9PageGroup24addUserStyleSheetToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_NS_25UserContentInjectedFramesE
__ZN7WebCore9PageGroup25removeUserScriptFromWorldEPNS_15DOMWrapperWorldERKNS_4KURLE
__ZN7WebCore9PageGroup26removeUserScriptsFromWorldEPNS_15DOMWrapperWorldE
__ZN7WebCore9PageGroup26setShouldTrackVisitedLinksEb
@@ -799,6 +779,7 @@ __ZNK7WebCore10RenderText9firstRunXEv
__ZNK7WebCore10RenderText9firstRunYEv
__ZNK7WebCore10ScrollView12documentViewEv
__ZNK7WebCore10ScrollView14scrollbarModesERNS_13ScrollbarModeES2_
+__ZNK7WebCore10ScrollView16contentsToWindowERKNS_7IntRectE
__ZNK7WebCore10ScrollView18visibleContentRectEb
__ZNK7WebCore11CachedImage5imageEv
__ZNK7WebCore11FrameLoader10isCompleteEv
@@ -873,6 +854,8 @@ __ZNK7WebCore14RenderListItem10markerTextEv
__ZNK7WebCore14ResourceHandle10connectionEv
__ZNK7WebCore14ResourceLoader11frameLoaderEv
__ZNK7WebCore14SecurityOrigin5equalEPKS0_
+__ZNK7WebCore15GraphicsContext15platformContextEv
+__ZNK7WebCore15GraphicsContext16paintingDisabledEv
__ZNK7WebCore15ProgressTracker17estimatedProgressEv
__ZNK7WebCore15ResourceRequest12nsURLRequestEv
__ZNK7WebCore15VisiblePosition14characterAfterEv
@@ -901,6 +884,7 @@ __ZNK7WebCore20ResourceResponseBase16textEncodingNameEv
__ZNK7WebCore20ResourceResponseBase17suggestedFilenameEv
__ZNK7WebCore20ResourceResponseBase3urlEv
__ZNK7WebCore20ResourceResponseBase8mimeTypeEv
+__ZNK7WebCore21UserContentURLPattern7matchesERKNS_4KURLE
__ZNK7WebCore23FrameLoaderStateMachine15firstLayoutDoneEv
__ZNK7WebCore23FrameLoaderStateMachine23committingFirstRealLoadEv
__ZNK7WebCore26NetscapePlugInStreamLoader6isDoneEv
@@ -916,6 +900,7 @@ __ZNK7WebCore4Node14isDescendantOfEPKS0_
__ZNK7WebCore4Node18getSubresourceURLsERN3WTF11ListHashSetINS_4KURLELm256ENS_8KURLHashEEE
__ZNK7WebCore4Node9nodeIndexEv
__ZNK7WebCore4Page10pluginDataEv
+__ZNK7WebCore4Page15backForwardListEv
__ZNK7WebCore4Page34inLowQualityImageInterpolationModeEv
__ZNK7WebCore4Page9groupNameEv
__ZNK7WebCore5Frame11currentFormEv
@@ -966,6 +951,7 @@ __ZNK7WebCore6Widget23convertToContainingViewERKNS_7IntRectE
__ZNK7WebCore6Widget23convertToContainingViewERKNS_8IntPointE
__ZNK7WebCore6Widget25convertFromContainingViewERKNS_7IntRectE
__ZNK7WebCore6Widget25convertFromContainingViewERKNS_8IntPointE
+__ZNK7WebCore6Widget25convertToContainingWindowERKNS_7IntRectE
__ZNK7WebCore6Widget9frameRectEv
__ZNK7WebCore7Element12getAttributeERKNS_13QualifiedNameE
__ZNK7WebCore7Element9innerTextEv
@@ -974,6 +960,7 @@ __ZNK7WebCore7IntRectcv7_NSRectEv
__ZNK7WebCore7IntSizecv7_NSSizeEv
__ZNK7WebCore8Document11completeURLERKNS_6StringE
__ZNK7WebCore8Document13axObjectCacheEv
+__ZNK7WebCore8Document14getElementByIdERKNS_12AtomicStringE
__ZNK7WebCore8Document20cacheDocumentElementEv
__ZNK7WebCore8Document31displayStringModifiedByEncodingERKNS_6StringE
__ZNK7WebCore8Document4bodyEv
@@ -1066,3 +1053,343 @@ _wkSetUpFontCache
_wkSignalCFReadStreamEnd
_wkSignalCFReadStreamError
_wkSignalCFReadStreamHasBytes
+
+#if ENABLE(3D_RENDERING)
+_WebCoreHas3DRendering
+#endif
+
+#if USE(ACCELERATED_COMPOSITING)
+__ZN7WebCore13GraphicsLayer17removeAllChildrenEv
+__ZN7WebCore13GraphicsLayer6createEPNS_19GraphicsLayerClientE
+#endif
+
+#if ENABLE(CONTEXT_MENUS)
+__ZN7WebCore11ContextMenu22setPlatformDescriptionEP14NSMutableArray
+__ZN7WebCore12EventHandler20sendContextMenuEventEP7NSEvent
+__ZN7WebCore15ContextMenuItem26releasePlatformDescriptionEv
+__ZN7WebCore21ContextMenuController16clearContextMenuEv
+__ZNK7WebCore11ContextMenu19platformDescriptionEv
+#endif
+
+#if ENABLE(DASHBOARD_SUPPORT)
+.objc_class_name_WebDashboardRegion
+__ZN7WebCore5Frame26dashboardRegionsDictionaryEv
+__ZN7WebCore8Settings41setUsesDashboardBackwardCompatibilityModeEb
+#endif
+
+#if ENABLE(DRAG_SUPPORT)
+__ZN7WebCore12EventHandler17dragSourceEndedAtERKNS_18PlatformMouseEventENS_13DragOperationE
+__ZN7WebCore12EventHandler17eventMayStartDragEP7NSEvent
+__ZN7WebCore14DragController10dragExitedEPNS_8DragDataE
+__ZN7WebCore14DragController11dragEnteredEPNS_8DragDataE
+__ZN7WebCore14DragController11dragUpdatedEPNS_8DragDataE
+__ZN7WebCore14DragController11performDragEPNS_8DragDataE
+__ZN7WebCore14DragController14placeDragCaretERKNS_8IntPointE
+__ZN7WebCore14DragController9dragEndedEv
+__ZN7WebCore8DragDataC1EP11objc_objectRKNS_8IntPointES5_NS_13DragOperationEPNS_16PasteboardHelperE
+#endif
+
+#if ENABLE(GEOLOCATION)
+#if ENABLE(CLIENT_BASED_GEOLOCATION)
+__ZN7WebCore21GeolocationController13errorOccurredEPNS_16GeolocationErrorE
+__ZN7WebCore21GeolocationController15positionChangedEPNS_19GeolocationPositionE
+#else
+__ZN7WebCore22GeolocationServiceMock11setPositionEN3WTF10PassRefPtrINS_11GeopositionEEE
+__ZN7WebCore22GeolocationServiceMock8setErrorEN3WTF10PassRefPtrINS_13PositionErrorEEE
+#endif
+#endif
+
+#if ENABLE(INSPECTOR)
+__ZN7WebCore19InspectorController10setSettingERKNS_6StringES3_
+__ZN7WebCore19InspectorController14enableDebuggerEv
+__ZN7WebCore19InspectorController14enableProfilerEbb
+__ZN7WebCore19InspectorController15disableDebuggerEb
+__ZN7WebCore19InspectorController15disableProfilerEb
+__ZN7WebCore19InspectorController18disconnectFrontendEv
+__ZN7WebCore19InspectorController20stopTimelineProfilerEv
+__ZN7WebCore19InspectorController21startTimelineProfilerEv
+__ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKNS_6StringE
+__ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtrINS_23InspectorFrontendClientEEE
+__ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv
+__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_EE
+__ZN7WebCore19InspectorController4showEv
+__ZN7WebCore19InspectorController5closeEv
+__ZN7WebCore19InspectorController7inspectEPNS_4NodeE
+__ZN7WebCore19InspectorController9showPanelENS0_13SpecialPanelsE
+__ZN7WebCore28InspectorFrontendClientLocal12moveWindowByEff
+__ZN7WebCore28InspectorFrontendClientLocal14frontendLoadedEv
+__ZN7WebCore28InspectorFrontendClientLocal15canAttachWindowEv
+__ZN7WebCore28InspectorFrontendClientLocal17setAttachedWindowEb
+__ZN7WebCore28InspectorFrontendClientLocal19requestAttachWindowEv
+__ZN7WebCore28InspectorFrontendClientLocal19requestDetachWindowEv
+__ZN7WebCore28InspectorFrontendClientLocal19windowObjectClearedEv
+__ZN7WebCore28InspectorFrontendClientLocal26changeAttachedWindowHeightEj
+__ZN7WebCore28InspectorFrontendClientLocal27restoreAttachedWindowHeightEv
+__ZN7WebCore28InspectorFrontendClientLocalC2EPNS_19InspectorControllerEPNS_4PageE
+__ZN7WebCore28InspectorFrontendClientLocalD2Ev
+__ZNK7WebCore19InspectorController17drawNodeHighlightERNS_15GraphicsContextE
+__ZNK7WebCore19InspectorController7enabledEv
+__ZNK7WebCore19InspectorController7settingERKNS_6StringE
+#endif
+
+#if ENABLE(JAVA_BRIDGE)
+_KJS_JSCreateNativeJSObject
+_KJS_JSObject_JSFinalize
+_KJS_JSObject_JSObjectCall
+_KJS_JSObject_JSObjectEval
+_KJS_JSObject_JSObjectGetMember
+_KJS_JSObject_JSObjectGetSlot
+_KJS_JSObject_JSObjectRemoveMember
+_KJS_JSObject_JSObjectSetMember
+_KJS_JSObject_JSObjectSetSlot
+_KJS_JSObject_JSObjectToString
+#endif
+
+#if ENABLE(NETSCAPE_PLUGIN_API)
+__NPN_Construct
+__NPN_CreateObject
+__NPN_Enumerate
+__NPN_Evaluate
+__NPN_GetIntIdentifier
+__NPN_GetProperty
+__NPN_GetStringIdentifier
+__NPN_GetStringIdentifiers
+__NPN_HasMethod
+__NPN_HasProperty
+__NPN_IdentifierIsString
+__NPN_IntFromIdentifier
+__NPN_Invoke
+__NPN_InvokeDefault
+__NPN_ReleaseObject
+__NPN_ReleaseVariantValue
+__NPN_RemoveProperty
+__NPN_RetainObject
+__NPN_SetException
+__NPN_SetProperty
+__NPN_UTF8FromIdentifier
+__ZN7WebCore16ScriptController20windowScriptNPObjectEv
+__ZN7WebCore16ScriptController29cleanupScriptObjectsForPluginEPv
+__ZNK7WebCore12RenderObject4viewEv
+__ZNK7WebCore14SecurityOrigin9canAccessEPKS0_
+__ZNK7WebCore4KURL7hasPathEv
+__ZNK7WebCore4KURL9prettyURLEv
+__ZNK7WebCore9FrameView22windowClipRectForLayerEPKNS_11RenderLayerEb
+#endif
+
+#if ENABLE(ORIENTATION_EVENTS)
+__ZN7WebCore5Frame26sendOrientationChangeEventEi
+#endif
+
+#if USE(PLUGIN_HOST_PROCESS)
+__ZN3JSC13RuntimeMethod11getCallDataERNS_8CallDataE
+__ZN3JSC13RuntimeMethod18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
+__ZN3JSC13RuntimeMethod24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
+__ZN3JSC13RuntimeMethod6s_infoE
+__ZN3JSC13RuntimeMethodC2EPNS_9ExecStateEPNS_14JSGlobalObjectERKNS_10IdentifierERN3WTF6VectorIPNS_8Bindings6MethodELm0EEE
+__ZN3JSC8Bindings10RootObjectD1Ev
+__ZN3JSC8Bindings13RuntimeObject11getCallDataERNS_8CallDataE
+__ZN3JSC8Bindings13RuntimeObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE
+__ZN3JSC8Bindings13RuntimeObject16getConstructDataERNS_13ConstructDataE
+__ZN3JSC8Bindings13RuntimeObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
+__ZN3JSC8Bindings13RuntimeObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE
+__ZN3JSC8Bindings13RuntimeObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
+__ZN3JSC8Bindings13RuntimeObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE
+__ZN3JSC8Bindings13RuntimeObject6s_infoE
+__ZN3JSC8Bindings13RuntimeObjectC2EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF10PassRefPtrINS0_8InstanceEEE
+__ZN3JSC8Bindings13RuntimeObjectD2Ev
+__ZN3JSC8Bindings8Instance19createRuntimeObjectEPNS_9ExecStateE
+__ZN3JSC8Bindings8InstanceC2EN3WTF10PassRefPtrINS0_10RootObjectEEE
+__ZN3JSC8Bindings8InstanceD2Ev
+__ZN7WebCore13IdentifierRep3getEPKc
+__ZN7WebCore13IdentifierRep3getEi
+__ZN7WebCore13IdentifierRep7isValidEPS0_
+__ZN7WebCore16ScriptController16createRootObjectEPv
+__ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE
+__ZN7WebCore16ScriptController24jsObjectForPluginElementEPNS_17HTMLPlugInElementE
+__ZNK3JSC8Bindings13RuntimeObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE
+__ZTVN3JSC13RuntimeMethodE
+#endif
+
+#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
+__ZN7WebCore3macERKNS_15ProtectionSpaceE
+__ZNK7WebCore15ProtectionSpace20authenticationSchemeEv
+#endif
+
+#if ENABLE(SVG_ANIMATION) && ENABLE(SVG_DOM_OBJC_BINDINGS)
+.objc_class_name_DOMSVGAnimateElement
+.objc_class_name_DOMSVGAnimateTransformElement
+#endif
+
+#if ENABLE(SVG) && ENABLE(SVG_DOM_OBJC_BINDINGS)
+.objc_class_name_DOMSVGAElement
+.objc_class_name_DOMSVGAltGlyphElement
+.objc_class_name_DOMSVGAngle
+.objc_class_name_DOMSVGAnimateColorElement
+.objc_class_name_DOMSVGAnimatedAngle
+.objc_class_name_DOMSVGAnimatedBoolean
+.objc_class_name_DOMSVGAnimatedEnumeration
+.objc_class_name_DOMSVGAnimatedInteger
+.objc_class_name_DOMSVGAnimatedLength
+.objc_class_name_DOMSVGAnimatedLengthList
+.objc_class_name_DOMSVGAnimatedNumber
+.objc_class_name_DOMSVGAnimatedNumberList
+.objc_class_name_DOMSVGAnimatedPreserveAspectRatio
+.objc_class_name_DOMSVGAnimatedRect
+.objc_class_name_DOMSVGAnimatedString
+.objc_class_name_DOMSVGAnimatedTransformList
+.objc_class_name_DOMSVGAnimationElement
+.objc_class_name_DOMSVGCircleElement
+.objc_class_name_DOMSVGClipPathElement
+.objc_class_name_DOMSVGColor
+.objc_class_name_DOMSVGCursorElement
+.objc_class_name_DOMSVGDefsElement
+.objc_class_name_DOMSVGDescElement
+.objc_class_name_DOMSVGDocument
+.objc_class_name_DOMSVGElement
+.objc_class_name_DOMSVGElementInstance
+.objc_class_name_DOMSVGElementInstanceList
+.objc_class_name_DOMSVGEllipseElement
+.objc_class_name_DOMSVGGElement
+.objc_class_name_DOMSVGGradientElement
+.objc_class_name_DOMSVGImageElement
+.objc_class_name_DOMSVGLength
+.objc_class_name_DOMSVGLengthList
+.objc_class_name_DOMSVGLineElement
+.objc_class_name_DOMSVGLinearGradientElement
+.objc_class_name_DOMSVGMarkerElement
+.objc_class_name_DOMSVGMaskElement
+.objc_class_name_DOMSVGMatrix
+.objc_class_name_DOMSVGMetadataElement
+.objc_class_name_DOMSVGNumber
+.objc_class_name_DOMSVGNumberList
+.objc_class_name_DOMSVGPaint
+.objc_class_name_DOMSVGPathElement
+.objc_class_name_DOMSVGPathSeg
+.objc_class_name_DOMSVGPathSegArcAbs
+.objc_class_name_DOMSVGPathSegArcRel
+.objc_class_name_DOMSVGPathSegClosePath
+.objc_class_name_DOMSVGPathSegCurvetoCubicAbs
+.objc_class_name_DOMSVGPathSegCurvetoCubicRel
+.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothAbs
+.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothRel
+.objc_class_name_DOMSVGPathSegCurvetoQuadraticAbs
+.objc_class_name_DOMSVGPathSegCurvetoQuadraticRel
+.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothAbs
+.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothRel
+.objc_class_name_DOMSVGPathSegLinetoAbs
+.objc_class_name_DOMSVGPathSegLinetoHorizontalAbs
+.objc_class_name_DOMSVGPathSegLinetoHorizontalRel
+.objc_class_name_DOMSVGPathSegLinetoRel
+.objc_class_name_DOMSVGPathSegLinetoVerticalAbs
+.objc_class_name_DOMSVGPathSegLinetoVerticalRel
+.objc_class_name_DOMSVGPathSegList
+.objc_class_name_DOMSVGPathSegMovetoAbs
+.objc_class_name_DOMSVGPathSegMovetoRel
+.objc_class_name_DOMSVGPatternElement
+.objc_class_name_DOMSVGPoint
+.objc_class_name_DOMSVGPointList
+.objc_class_name_DOMSVGPolygonElement
+.objc_class_name_DOMSVGPolylineElement
+.objc_class_name_DOMSVGPreserveAspectRatio
+.objc_class_name_DOMSVGRadialGradientElement
+.objc_class_name_DOMSVGRect
+.objc_class_name_DOMSVGRectElement
+.objc_class_name_DOMSVGRenderingIntent
+.objc_class_name_DOMSVGSVGElement
+.objc_class_name_DOMSVGScriptElement
+.objc_class_name_DOMSVGSetElement
+.objc_class_name_DOMSVGStopElement
+.objc_class_name_DOMSVGStringList
+.objc_class_name_DOMSVGStyleElement
+.objc_class_name_DOMSVGSwitchElement
+.objc_class_name_DOMSVGSymbolElement
+.objc_class_name_DOMSVGTRefElement
+.objc_class_name_DOMSVGTSpanElement
+.objc_class_name_DOMSVGTextContentElement
+.objc_class_name_DOMSVGTextElement
+.objc_class_name_DOMSVGTextPathElement
+.objc_class_name_DOMSVGTextPositioningElement
+.objc_class_name_DOMSVGTitleElement
+.objc_class_name_DOMSVGTransform
+.objc_class_name_DOMSVGTransformList
+.objc_class_name_DOMSVGUnitTypes
+.objc_class_name_DOMSVGUseElement
+.objc_class_name_DOMSVGViewElement
+.objc_class_name_DOMSVGZoomEvent
+#endif
+
+#if ENABLE(SVG_FILTERS) && ENABLE(SVG_DOM_OBJC_BINDINGS)
+.objc_class_name_DOMSVGComponentTransferFunctionElement
+.objc_class_name_DOMSVGFEBlendElement
+.objc_class_name_DOMSVGFEColorMatrixElement
+.objc_class_name_DOMSVGFEComponentTransferElement
+.objc_class_name_DOMSVGFECompositeElement
+.objc_class_name_DOMSVGFEDiffuseLightingElement
+.objc_class_name_DOMSVGFEDisplacementMapElement
+.objc_class_name_DOMSVGFEDistantLightElement
+.objc_class_name_DOMSVGFEFloodElement
+.objc_class_name_DOMSVGFEFuncAElement
+.objc_class_name_DOMSVGFEFuncBElement
+.objc_class_name_DOMSVGFEFuncGElement
+.objc_class_name_DOMSVGFEFuncRElement
+.objc_class_name_DOMSVGFEGaussianBlurElement
+.objc_class_name_DOMSVGFEImageElement
+.objc_class_name_DOMSVGFEMergeElement
+.objc_class_name_DOMSVGFEMergeNodeElement
+.objc_class_name_DOMSVGFEMorphologyElement
+.objc_class_name_DOMSVGFEOffsetElement
+.objc_class_name_DOMSVGFEPointLightElement
+.objc_class_name_DOMSVGFESpecularLightingElement
+.objc_class_name_DOMSVGFESpotLightElement
+.objc_class_name_DOMSVGFETileElement
+.objc_class_name_DOMSVGFETurbulenceElement
+.objc_class_name_DOMSVGFilterElement
+#endif
+
+#if ENABLE(SVG_FOREIGN_OBJECT) && ENABLE(SVG_DOM_OBJC_BINDINGS)
+.objc_class_name_DOMSVGForeignObjectElement
+#endif
+
+#if defined(BUILDING_ON_TIGER)
+_wkClearGlyphVector
+_wkConvertCharToGlyphs
+_wkCopyFullFontName
+_wkGetATSStyleGroup
+_wkGetCGFontFromNSFont
+_wkGetFontMetrics
+_wkGetGlyphVectorFirstRecord
+_wkGetGlyphVectorNumGlyphs
+_wkGetGlyphVectorRecordSize
+_wkGetNSFontATSUFontId
+_wkInitializeGlyphVector
+_wkReleaseStyleGroup
+_wkSupportsMultipartXMixedReplace
+#endif
+
+#if ENABLE(VIDEO)
+__ZN7WebCore16HTMLMediaElement10screenRectEv
+__ZN7WebCore16HTMLMediaElement12endScrubbingEv
+__ZN7WebCore16HTMLMediaElement14beginScrubbingEv
+__ZN7WebCore16HTMLMediaElement14exitFullscreenEv
+__ZN7WebCore16HTMLMediaElement14setCurrentTimeEfRi
+__ZN7WebCore16HTMLMediaElement4playEb
+__ZN7WebCore16HTMLMediaElement5pauseEb
+__ZN7WebCore16HTMLMediaElement6rewindEf
+__ZN7WebCore16HTMLMediaElement8setMutedEb
+__ZN7WebCore16HTMLMediaElement9setVolumeEfRi
+__ZNK7WebCore16HTMLMediaElement11currentTimeEv
+__ZNK7WebCore16HTMLMediaElement13platformMediaEv
+__ZNK7WebCore16HTMLMediaElement21processingUserGestureEv
+__ZNK7WebCore16HTMLMediaElement5mutedEv
+__ZNK7WebCore16HTMLMediaElement6volumeEv
+__ZNK7WebCore16HTMLMediaElement7canPlayEv
+__ZNK7WebCore16HTMLMediaElement12playbackRateEv
+__ZNK7WebCore16HTMLMediaElement8durationEv
+#endif
+
+#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
+__ZN7WebCore16HTMLMediaElement19deliverNotificationE32MediaPlayerProxyNotificationType
+__ZN7WebCore16HTMLMediaElement19setMediaPlayerProxyEP19WebMediaPlayerProxy
+__ZN7WebCore9HTMLNames8audioTagE
+__ZN7WebCore9HTMLNames8videoTagE
+#endif
diff --git a/WebCore/WebCore.gyp/WebCore.gyp b/WebCore/WebCore.gyp/WebCore.gyp
index 1821ffc..3b94644 100644
--- a/WebCore/WebCore.gyp/WebCore.gyp
+++ b/WebCore/WebCore.gyp/WebCore.gyp
@@ -388,6 +388,27 @@
],
},
{
+ 'action_name': 'MathMLNames',
+ 'inputs': [
+ '../dom/make_names.pl',
+ '../mathml/mathtags.in',
+ '../mathml/mathattrs.in',
+ ],
+ 'outputs': [
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/MathMLNames.cpp',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/MathMLNames.h',
+ ],
+ 'action': [
+ 'python',
+ 'scripts/action_makenames.py',
+ '<@(_outputs)',
+ '--',
+ '<@(_inputs)',
+ '--',
+ '--extraDefines', '<(feature_defines)'
+ ],
+ },
+ {
'action_name': 'UserAgentStyleSheets',
'inputs': [
'../css/make-css-file-arrays.pl',
@@ -454,6 +475,40 @@
],
},
{
+ 'action_name': 'InspectorFrontend2',
+ 'inputs': [
+ '../bindings/scripts/generate-bindings.pl',
+ '../bindings/scripts/CodeGenerator.pm',
+ '../bindings/scripts/IDLParser.pm',
+ '../bindings/scripts/IDLStructure.pm',
+ '../inspector/CodeGeneratorInspector.pm',
+ '../inspector/InspectorFrontend2.idl',
+ ],
+ 'outputs': [
+ '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/RemoteInspectorFrontend2.cpp',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/RemoteInspectorFrontend2.h',
+ ],
+ 'variables': {
+ 'generator_include_dirs': [
+ ],
+ },
+ 'action': [
+ 'python',
+ 'scripts/rule_binding.py',
+ '../inspector/InspectorFrontend2.idl',
+ '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings',
+ '--',
+ '<@(_inputs)',
+ '--',
+ '--defines', 'LANGUAGE_JAVASCRIPT',
+ '--prefix', 'Remote',
+ '--generator', 'Inspector',
+ '<@(generator_include_dirs)'
+ ],
+ 'message': 'Generating InspectorFrontend2 class from InspectorFrontend2.idl',
+ },
+ {
'action_name': 'XMLNames',
'inputs': [
'../dom/make_names.pl',
@@ -651,10 +706,15 @@
'<(SHARED_INTERMEDIATE_DIR)/webkit/XLinkNames.cpp',
'<(SHARED_INTERMEDIATE_DIR)/webkit/XMLNSNames.cpp',
'<(SHARED_INTERMEDIATE_DIR)/webkit/XMLNames.cpp',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGNames.cpp',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/MathMLNames.cpp',
# Additional .cpp files from the webcore_bindings_sources rules.
'<(SHARED_INTERMEDIATE_DIR)/webkit/CSSGrammar.cpp',
'<(SHARED_INTERMEDIATE_DIR)/webkit/XPathGrammar.cpp',
+
+ # Additional .cpp files from the webcore_inspector_sources list.
+ '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/RemoteInspectorFrontend2.cpp',
],
'conditions': [
['javascript_engine=="v8"', {
@@ -672,7 +732,6 @@
['enable_svg!=0', {
'sources': [
'<(SHARED_INTERMEDIATE_DIR)/webkit/SVGElementFactory.cpp',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGNames.cpp',
'<(SHARED_INTERMEDIATE_DIR)/webkit/V8SVGElementWrapperFactory.cpp',
],
}],
@@ -781,7 +840,7 @@
'../storage/IndexedDatabase.cpp',
# Use history/BackForwardListChromium.cpp instead.
- '../history/BackForwardList.cpp',
+ '../history/BackForwardListImpl.cpp',
# Use loader/icon/IconDatabaseNone.cpp instead.
'../loader/icon/IconDatabase.cpp',
diff --git a/WebCore/WebCore.gyp/scripts/rule_binding.py b/WebCore/WebCore.gyp/scripts/rule_binding.py
index 24d178f..f7f3ed1 100644
--- a/WebCore/WebCore.gyp/scripts/rule_binding.py
+++ b/WebCore/WebCore.gyp/scripts/rule_binding.py
@@ -95,6 +95,14 @@ def main(args):
if not includeDir in includeDirs:
includeDirs.append(includeDir)
+ if '--prefix' in options:
+ prefixIndex = options.index('--prefix')
+ else:
+ prefixIndex = options.index('--generator')
+
+ if prefixIndex + 1 < len(options):
+ prefix = options[prefixIndex + 1]
+
# The defines come in as one flat string. Split it up into distinct arguments.
if '--defines' in options:
definesIndex = options.index('--defines')
@@ -122,7 +130,7 @@ def main(args):
if cppdir != hdir:
inputBasename = os.path.basename(input)
(root, ext) = os.path.splitext(inputBasename)
- hname = 'V8%s.h' % root
+ hname = '%s%s.h' % (prefix, root)
hsrc = os.path.join(cppdir, hname)
hdst = os.path.join(hdir, hname)
shutil.copyfile(hsrc, hdst)
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index 2c221d9..1ccbc3f 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -224,10 +224,10 @@
'page/Timing.idl',
'page/WebKitPoint.idl',
'page/WorkerNavigator.idl',
- 'plugins/MimeType.idl',
- 'plugins/MimeTypeArray.idl',
- 'plugins/Plugin.idl',
- 'plugins/PluginArray.idl',
+ 'plugins/DOMMimeType.idl',
+ 'plugins/DOMMimeTypeArray.idl',
+ 'plugins/DOMPlugin.idl',
+ 'plugins/DOMPluginArray.idl',
'storage/Database.idl',
'storage/DatabaseCallback.idl',
'storage/DatabaseSync.idl',
@@ -238,6 +238,7 @@
'storage/IDBErrorEvent.idl',
'storage/IDBEvent.idl',
'storage/IDBIndexRequest.idl',
+ 'storage/IDBKey.idl',
'storage/IDBKeyRange.idl',
'storage/IDBObjectStoreRequest.idl',
'storage/IDBRequest.idl',
@@ -277,6 +278,9 @@
'xml/XPathResult.idl',
'xml/XSLTProcessor.idl',
],
+ 'webcore_inspector_idl_files': [
+ 'inspector/InspectorFrontend2.idl',
+ ],
'webcore_svg_bindings_idl_files': [
'svg/ElementTimeControl.idl',
'svg/SVGAElement.idl',
@@ -602,7 +606,7 @@
'bindings/js/JSMessageEventCustom.cpp',
'bindings/js/JSMessagePortCustom.cpp',
'bindings/js/JSMessagePortCustom.h',
- 'bindings/js/JSMimeTypeArrayCustom.cpp',
+ 'bindings/js/JSDOMMimeTypeArrayCustom.cpp',
'bindings/js/JSNamedNodeMapCustom.cpp',
'bindings/js/JSNamedNodesCollection.cpp',
'bindings/js/JSNamedNodesCollection.h',
@@ -616,8 +620,8 @@
'bindings/js/JSNodeListCustom.cpp',
'bindings/js/JSOptionConstructor.cpp',
'bindings/js/JSOptionConstructor.h',
- 'bindings/js/JSPluginArrayCustom.cpp',
- 'bindings/js/JSPluginCustom.cpp',
+ 'bindings/js/JSDOMPluginArrayCustom.cpp',
+ 'bindings/js/JSDOMPluginCustom.cpp',
'bindings/js/JSPluginElementFunctions.cpp',
'bindings/js/JSPluginElementFunctions.h',
'bindings/js/JSRGBColor.cpp',
@@ -692,8 +696,11 @@
'bindings/js/WorkerScriptController.cpp',
'bindings/js/WorkerScriptController.h',
'bindings/ScriptControllerBase.cpp',
+ 'bindings/ScriptControllerBase.h',
'bindings/v8/ChildThreadDOMData.cpp',
'bindings/v8/ChildThreadDOMData.h',
+ 'bindings/v8/IDBBindingUtilities.cpp',
+ 'bindings/v8/IDBBindingUtilities.h',
'bindings/v8/custom/V8CanvasPixelArrayCustom.cpp',
'bindings/v8/custom/V8ArrayBufferViewCustom.h',
'bindings/v8/custom/V8ArrayBufferViewCustom.cpp',
@@ -760,6 +767,7 @@
'bindings/v8/custom/V8HTMLSelectElementCustom.cpp',
'bindings/v8/custom/V8HTMLSelectElementCustom.h',
'bindings/v8/custom/V8IDBAnyCustom.cpp',
+ 'bindings/v8/custom/V8IDBKeyCustom.cpp',
'bindings/v8/custom/V8InjectedScriptHostCustom.cpp',
'bindings/v8/custom/V8InspectorFrontendHostCustom.cpp',
'bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp',
@@ -1073,8 +1081,6 @@
'dom/CDATASection.h',
'dom/CSSMappedAttributeDeclaration.cpp',
'dom/CSSMappedAttributeDeclaration.h',
- 'dom/CanvasSurface.cpp',
- 'dom/CanvasSurface.h',
'dom/CharacterData.cpp',
'dom/CharacterData.h',
'dom/CheckedRadioButtons.cpp',
@@ -1113,9 +1119,9 @@
'dom/DatasetDOMStringMap.h',
'dom/DecodedDataDocumentParser.cpp',
'dom/DecodedDataDocumentParser.h',
- 'dom/DeviceOrientation.cpp',
- 'dom/DeviceOrientation.h',
'dom/DeviceOrientationClient.h',
+ 'dom/DeviceOrientationController.cpp',
+ 'dom/DeviceOrientationController.h',
'dom/DeviceOrientationEvent.cpp',
'dom/DeviceOrientationEvent.h',
'dom/Document.cpp',
@@ -1384,8 +1390,12 @@
'editing/visible_units.cpp',
'editing/visible_units.h',
'history/mac/HistoryItemMac.mm',
- 'history/BackForwardList.cpp',
+ 'history/BackForwardController.cpp',
+ 'history/BackForwardController.h',
+ 'history/BackForwardControllerClient.h',
'history/BackForwardList.h',
+ 'history/BackForwardListImpl.cpp',
+ 'history/BackForwardListImpl.h',
'history/BackForwardListChromium.cpp',
'history/CachedFrame.cpp',
'history/CachedFrame.h',
@@ -1529,6 +1539,8 @@
'html/HTMLCanvasElement.h',
'html/HTMLCollection.cpp',
'html/HTMLCollection.h',
+ 'html/HTMLConstructionSite.cpp',
+ 'html/HTMLConstructionSite.h',
'html/HTMLDListElement.cpp',
'html/HTMLDListElement.h',
'html/HTMLDataGridCellElement.cpp',
@@ -1708,6 +1720,8 @@
'inspector/InjectedScript.h',
'inspector/InjectedScriptHost.cpp',
'inspector/InjectedScriptHost.h',
+ 'inspector/InspectorApplicationCacheAgent.cpp',
+ 'inspector/InspectorApplicationCacheAgent.h',
'inspector/InspectorBackend.cpp',
'inspector/InspectorBackend.h',
'inspector/InspectorController.cpp',
@@ -2025,6 +2039,7 @@
'page/Timing.h',
'page/UserContentURLPattern.cpp',
'page/UserContentURLPattern.h',
+ 'page/UserContentTypes.h',
'page/UserScript.h',
'page/UserScriptTypes.h',
'page/UserStyleSheet.h',
@@ -3052,14 +3067,14 @@
'plugins/wx/PluginDataWx.cpp',
'plugins/wx/PluginPackageWx.cpp',
'plugins/wx/PluginViewWx.cpp',
- 'plugins/MimeType.cpp',
- 'plugins/MimeType.h',
- 'plugins/MimeTypeArray.cpp',
- 'plugins/MimeTypeArray.h',
- 'plugins/Plugin.cpp',
- 'plugins/Plugin.h',
- 'plugins/PluginArray.cpp',
- 'plugins/PluginArray.h',
+ 'plugins/DOMMimeType.cpp',
+ 'plugins/DOMMimeType.h',
+ 'plugins/DOMMimeTypeArray.cpp',
+ 'plugins/DOMMimeTypeArray.h',
+ 'plugins/DOMPlugin.cpp',
+ 'plugins/DOMPlugin.h',
+ 'plugins/DOMPluginArray.cpp',
+ 'plugins/DOMPluginArray.h',
'plugins/PluginData.cpp',
'plugins/PluginData.h',
'plugins/PluginDatabase.cpp',
@@ -3447,8 +3462,11 @@
'storage/IDBIndexImpl.h',
'storage/IDBIndexRequest.cpp',
'storage/IDBIndexRequest.h',
+ 'storage/IDBKey.cpp',
+ 'storage/IDBKey.h',
'storage/IDBKeyRange.cpp',
'storage/IDBKeyRange.h',
+ 'storage/IDBKeyTree.h',
'storage/IDBObjectStore.h',
'storage/IDBObjectStoreImpl.cpp',
'storage/IDBObjectStoreImpl.h',
@@ -3945,6 +3963,7 @@
'inspector/front-end/inspector.html',
'inspector/front-end/AbstractTimelinePanel.js',
+ 'inspector/front-end/ApplicationCacheItemsView.js',
'inspector/front-end/AuditCategories.js',
'inspector/front-end/AuditLauncherView.js',
'inspector/front-end/AuditResultView.js',
@@ -4048,6 +4067,7 @@
'inspector/front-end/textViewer.css',
],
'webinspector_image_files': [
+ 'inspector/front-end/Images/applicationCache.png',
'inspector/front-end/Images/auditsIcon.png',
'inspector/front-end/Images/back.png',
'inspector/front-end/Images/breakpointBorder.png',
diff --git a/WebCore/WebCore.pri b/WebCore/WebCore.pri
index 623dbb6..1451984 100644
--- a/WebCore/WebCore.pri
+++ b/WebCore/WebCore.pri
@@ -62,7 +62,6 @@ contains(DEFINES, ENABLE_SINGLE_THREADED=1) {
!contains(DEFINES, ENABLE_WORKERS=.): DEFINES += ENABLE_WORKERS=1
!contains(DEFINES, ENABLE_XHTMLMP=.): DEFINES += ENABLE_XHTMLMP=0
!contains(DEFINES, ENABLE_DATAGRID=.): DEFINES += ENABLE_DATAGRID=0
-!contains(DEFINES, ENABLE_VIDEO=.): DEFINES += ENABLE_VIDEO=1
!contains(DEFINES, ENABLE_RUBY=.): DEFINES += ENABLE_RUBY=1
!contains(DEFINES, ENABLE_SANDBOX=.): DEFINES += ENABLE_SANDBOX=1
!contains(DEFINES, ENABLE_METER_TAG=.): DEFINES += ENABLE_METER_TAG=1
@@ -88,9 +87,6 @@ greaterThan(QT_MINOR_VERSION, 5) {
DEFINES += ENABLE_SVG_FONTS=0 ENABLE_SVG_FOREIGN_OBJECT=0 ENABLE_SVG_ANIMATION=0 ENABLE_SVG_AS_IMAGE=0 ENABLE_SVG_USE=0
}
-# HTML5 media support
-!contains(DEFINES, ENABLE_VIDEO=.): DEFINES += ENABLE_VIDEO=1
-
# HTML5 datalist support
!contains(DEFINES, ENABLE_DATALIST=.): DEFINES += ENABLE_DATALIST=1
@@ -142,6 +138,21 @@ greaterThan(QT_MINOR_VERSION, 5) {
# Enable touch event support with Qt 4.6
!lessThan(QT_MINOR_VERSION, 6): DEFINES += ENABLE_TOUCH_EVENTS=1
+# HTML5 Media Support
+# We require QtMultimedia or Phonon
+!contains(DEFINES, ENABLE_VIDEO=.) {
+ DEFINES -= ENABLE_VIDEO=1
+ DEFINES += ENABLE_VIDEO=0
+
+ !lessThan(QT_MINOR_VERSION, 6):contains(MOBILITY_CONFIG, multimedia) {
+ DEFINES -= ENABLE_VIDEO=0
+ DEFINES += ENABLE_VIDEO=1
+ } else:contains(QT_CONFIG, phonon) {
+ DEFINES -= ENABLE_VIDEO=0
+ DEFINES += ENABLE_VIDEO=1
+ }
+}
+
# Used to compute defaults for the build-webkit script
CONFIG(compute_defaults) {
message($$DEFINES)
@@ -464,10 +475,10 @@ IDL_BINDINGS += \
page/Timing.idl \
page/WebKitPoint.idl \
page/WorkerNavigator.idl \
- plugins/Plugin.idl \
- plugins/MimeType.idl \
- plugins/PluginArray.idl \
- plugins/MimeTypeArray.idl \
+ plugins/DOMPlugin.idl \
+ plugins/DOMMimeType.idl \
+ plugins/DOMPluginArray.idl \
+ plugins/DOMMimeTypeArray.idl \
storage/Database.idl \
storage/DatabaseCallback.idl \
storage/DatabaseSync.idl \
@@ -478,6 +489,7 @@ IDL_BINDINGS += \
storage/IDBErrorEvent.idl \
storage/IDBEvent.idl \
storage/IDBIndexRequest.idl \
+ storage/IDBKey.idl \
storage/IDBKeyRange.idl \
storage/IDBObjectStoreRequest.idl \
storage/IDBRequest.idl \
@@ -652,14 +664,14 @@ IDL_BINDINGS += \
xml/XPathEvaluator.idl \
xml/XSLTProcessor.idl
-contains(DEFINES, ENABLE_MATHML=1) {
- mathmlnames.output = $${WC_GENERATED_SOURCES_DIR}/MathMLNames.cpp
- mathmlnames.input = MATHML_NAMES
- mathmlnames.wkScript = $$PWD/dom/make_names.pl
- mathmlnames.commands = perl -I$$PWD/bindings/scripts $$mathmlnames.wkScript --tags $$PWD/mathml/mathtags.in --attrs $$PWD/mathml/mathattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR
- mathmlnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/MathMLElementFactory.cpp
- addExtraCompiler(mathmlnames)
-}
+INSPECTOR_INTERFACES = inspector/InspectorFrontend2.idl
+
+mathmlnames.output = $${WC_GENERATED_SOURCES_DIR}/MathMLNames.cpp
+mathmlnames.input = MATHML_NAMES
+mathmlnames.wkScript = $$PWD/dom/make_names.pl
+mathmlnames.commands = perl -I$$PWD/bindings/scripts $$mathmlnames.wkScript --tags $$PWD/mathml/mathtags.in --attrs $$PWD/mathml/mathattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR
+mathmlnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/MathMLElementFactory.cpp
+addExtraCompiler(mathmlnames)
contains(DEFINES, ENABLE_WML=1) {
wmlnames.output = $${WC_GENERATED_SOURCES_DIR}/WMLNames.cpp
@@ -670,16 +682,14 @@ contains(DEFINES, ENABLE_WML=1) {
addExtraCompiler(wmlnames)
}
-contains(DEFINES, ENABLE_SVG=1) {
- # GENERATOR 5-C:
- svgnames.output = $${WC_GENERATED_SOURCES_DIR}/SVGNames.cpp
- svgnames.input = SVG_NAMES
- svgnames.depends = $$PWD/svg/svgattrs.in
- svgnames.wkScript = $$PWD/dom/make_names.pl
- svgnames.commands = perl -I$$PWD/bindings/scripts $$svgnames.wkScript --tags $$PWD/svg/svgtags.in --attrs $$PWD/svg/svgattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR
- svgnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/SVGElementFactory.cpp $${WC_GENERATED_SOURCES_DIR}/JSSVGElementWrapperFactory.cpp
- addExtraCompiler(svgnames)
-}
+# GENERATOR 5-C:
+svgnames.output = $${WC_GENERATED_SOURCES_DIR}/SVGNames.cpp
+svgnames.input = SVG_NAMES
+svgnames.depends = $$PWD/svg/svgattrs.in
+svgnames.wkScript = $$PWD/dom/make_names.pl
+svgnames.commands = perl -I$$PWD/bindings/scripts $$svgnames.wkScript --tags $$PWD/svg/svgtags.in --attrs $$PWD/svg/svgattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR
+svgnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/SVGElementFactory.cpp $${WC_GENERATED_SOURCES_DIR}/JSSVGElementWrapperFactory.cpp
+addExtraCompiler(svgnames)
# GENERATOR 5-D:
xlinknames.output = $${WC_GENERATED_SOURCES_DIR}/XLinkNames.cpp
@@ -717,6 +727,18 @@ idl.depends = $$PWD/bindings/scripts/CodeGenerator.pm \
$$PWD/bindings/scripts/InFilesParser.pm
addExtraCompiler(idl)
+# GENERATOR 2: inspector idl compiler
+inspectorIDL.output = $${WC_GENERATED_SOURCES_DIR}/Remote${QMAKE_FILE_BASE}.cpp
+inspectorIDL.input = INSPECTOR_INTERFACES
+inspectorIDL.wkScript = $$PWD/bindings/scripts/generate-bindings.pl
+inspectorIDL.commands = perl -I$$PWD/bindings/scripts -I$$PWD/inspector $$inspectorIDL.wkScript --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" --generator Inspector --outputDir $$WC_GENERATED_SOURCES_DIR --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME}
+inspectorIDL.depends = $$PWD/bindings/scripts/CodeGenerator.pm \
+ $$PWD/inspector/CodeGeneratorInspector.pm \
+ $$PWD/bindings/scripts/IDLParser.pm \
+ $$PWD/bindings/scripts/IDLStructure.pm \
+ $$PWD/bindings/scripts/InFilesParser.pm
+addExtraCompiler(inspectorIDL)
+
# GENERATOR 3: tokenizer (flex)
tokenizer.output = $${WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}.cpp
tokenizer.input = TOKENIZER
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index b33a100..49149dc 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -143,19 +143,6 @@ contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) {
include($$PWD/../JavaScriptCore/JavaScriptCore.pri)
addJavaScriptCoreLib(../JavaScriptCore)
-
-# HTML5 Media Support
-# We require phonon. QtMultimedia support is disabled currently.
-!contains(DEFINES, ENABLE_VIDEO=.) {
- DEFINES -= ENABLE_VIDEO=1
- DEFINES += ENABLE_VIDEO=0
-
- contains(QT_CONFIG, phonon) {
- DEFINES -= ENABLE_VIDEO=0
- DEFINES += ENABLE_VIDEO=1
- }
-}
-
# Extract sources to build from the generator definitions
defineTest(addExtraCompiler) {
isEqual($${1}.wkAddOutputToSources, false): return(true)
@@ -180,6 +167,7 @@ include(WebCore.pri)
INCLUDEPATH = \
$$PWD \
$$PWD/accessibility \
+ $$PWD/bindings \
$$PWD/bindings/js \
$$PWD/bridge \
$$PWD/bridge/c \
@@ -350,13 +338,13 @@ SOURCES += \
bindings/js/JSWebKitPointCustom.cpp \
bindings/js/JSXMLHttpRequestCustom.cpp \
bindings/js/JSXMLHttpRequestUploadCustom.cpp \
- bindings/js/JSPluginCustom.cpp \
- bindings/js/JSPluginArrayCustom.cpp \
+ bindings/js/JSDOMPluginCustom.cpp \
+ bindings/js/JSDOMPluginArrayCustom.cpp \
bindings/js/JSMessageChannelCustom.cpp \
bindings/js/JSMessageEventCustom.cpp \
bindings/js/JSMessagePortCustom.cpp \
bindings/js/JSMessagePortCustom.h \
- bindings/js/JSMimeTypeArrayCustom.cpp \
+ bindings/js/JSDOMMimeTypeArrayCustom.cpp \
bindings/js/JSDOMBinding.cpp \
bindings/js/JSEventListener.cpp \
bindings/js/JSLazyEventListener.cpp \
@@ -460,7 +448,6 @@ SOURCES += \
dom/BeforeTextInsertedEvent.cpp \
dom/BeforeUnloadEvent.cpp \
dom/CDATASection.cpp \
- dom/CanvasSurface.cpp \
dom/CharacterData.cpp \
dom/CheckedRadioButtons.cpp \
dom/ChildNodeList.cpp \
@@ -475,7 +462,7 @@ SOURCES += \
dom/CSSMappedAttributeDeclaration.cpp \
dom/CustomEvent.cpp \
dom/DecodedDataDocumentParser.cpp \
- dom/DeviceOrientation.cpp \
+ dom/DeviceOrientationController.cpp \
dom/DeviceOrientationEvent.cpp \
dom/Document.cpp \
dom/DocumentFragment.cpp \
@@ -599,7 +586,8 @@ SOURCES += \
editing/VisibleSelection.cpp \
editing/visible_units.cpp \
editing/WrapContentsInDummySpanCommand.cpp \
- history/BackForwardList.cpp \
+ history/BackForwardController.cpp \
+ history/BackForwardListImpl.cpp \
history/CachedFrame.cpp \
history/CachedPage.cpp \
history/HistoryItem.cpp \
@@ -646,6 +634,7 @@ SOURCES += \
html/HTMLButtonElement.cpp \
html/HTMLCanvasElement.cpp \
html/HTMLCollection.cpp \
+ html/HTMLConstructionSite.cpp \
html/HTMLDataGridElement.cpp \
html/HTMLDataGridCellElement.cpp \
html/HTMLDataGridColElement.cpp \
@@ -729,6 +718,7 @@ SOURCES += \
inspector/ConsoleMessage.cpp \
inspector/InjectedScript.cpp \
inspector/InjectedScriptHost.cpp \
+ inspector/InspectorApplicationCacheAgent.cpp \
inspector/InspectorBackend.cpp \
inspector/InspectorCSSStore.cpp \
inspector/InspectorController.cpp \
@@ -839,11 +829,11 @@ SOURCES += \
page/WindowFeatures.cpp \
page/XSSAuditor.cpp \
plugins/PluginData.cpp \
- plugins/PluginArray.cpp \
- plugins/Plugin.cpp \
+ plugins/DOMPluginArray.cpp \
+ plugins/DOMPlugin.cpp \
plugins/PluginMainThreadScheduler.cpp \
- plugins/MimeType.cpp \
- plugins/MimeTypeArray.cpp \
+ plugins/DOMMimeType.cpp \
+ plugins/DOMMimeTypeArray.cpp \
platform/animation/Animation.cpp \
platform/animation/AnimationList.cpp \
platform/Arena.cpp \
@@ -1069,6 +1059,7 @@ HEADERS += \
accessibility/AccessibilityTableHeaderContainer.h \
accessibility/AccessibilityTableRow.h \
accessibility/AXObjectCache.h \
+ bindings/ScriptControllerBase.h \
bindings/js/CachedScriptSourceProvider.h \
bindings/js/GCController.h \
bindings/js/DOMObjectHashTableMap.h \
@@ -1228,8 +1219,8 @@ HEADERS += \
dom/CSSMappedAttributeDeclaration.h \
dom/CustomEvent.h \
dom/default/PlatformMessagePortChannel.h \
- dom/DeviceOrientation.h \
dom/DeviceOrientationClient.h \
+ dom/DeviceOrientationController.h \
dom/DeviceOrientationEvent.h \
dom/DocumentFragment.h \
dom/Document.h \
@@ -1349,6 +1340,9 @@ HEADERS += \
editing/VisibleSelection.h \
editing/visible_units.h \
editing/WrapContentsInDummySpanCommand.h \
+ history/BackForwardController.h \
+ history/BackForwardControllerClient.h \
+ history/BackForwardListImpl.h \
history/BackForwardList.h \
history/CachedFrame.h \
history/CachedPage.h \
@@ -1476,6 +1470,7 @@ HEADERS += \
inspector/ConsoleMessage.h \
inspector/InjectedScript.h \
inspector/InjectedScriptHost.h \
+ inspector/InspectorApplicationCacheAgent.h \
inspector/InspectorBackend.h \
inspector/InspectorController.h \
inspector/InspectorDatabaseResource.h \
@@ -1723,13 +1718,13 @@ HEADERS += \
platform/ThreadTimers.h \
platform/Timer.h \
platform/Widget.h \
- plugins/MimeTypeArray.h \
- plugins/MimeType.h \
- plugins/PluginArray.h \
+ plugins/DOMMimeTypeArray.h \
+ plugins/DOMMimeType.h \
+ plugins/DOMPluginArray.h \
plugins/PluginDatabase.h \
plugins/PluginData.h \
plugins/PluginDebug.h \
- plugins/Plugin.h \
+ plugins/DOMPlugin.h \
plugins/PluginMainThreadScheduler.h \
plugins/PluginPackage.h \
plugins/PluginStream.h \
@@ -2387,6 +2382,7 @@ contains(DEFINES, ENABLE_DATABASE=1) {
contains(DEFINES, ENABLE_INDEXED_DATABASE=1) {
HEADERS += \
+ bindings/js/IDBBindingUtilities.h \
storage/IDBAny.h \
storage/IDBCallbacks.h \
storage/IDBDatabase.h \
@@ -2399,6 +2395,7 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) {
storage/IDBIndex.h \
storage/IDBIndexImpl.h \
storage/IDBIndexRequest.h \
+ storage/IDBKey.h \
storage/IDBKeyRange.h \
storage/IDBObjectStore.h \
storage/IDBObjectStoreImpl.h \
@@ -2410,7 +2407,9 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) {
storage/IndexedDatabaseRequest.h
SOURCES += \
+ bindings/js/IDBBindingUtilities.cpp \
bindings/js/JSIDBAnyCustom.cpp \
+ bindings/js/JSIDBKeyCustom.cpp \
storage/IDBAny.cpp \
storage/IDBDatabaseImpl.cpp \
storage/IDBDatabaseRequest.cpp \
@@ -2418,6 +2417,7 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) {
storage/IDBEvent.cpp \
storage/IDBIndexImpl.cpp \
storage/IDBIndexRequest.cpp \
+ storage/IDBKey.cpp \
storage/IDBKeyRange.cpp \
storage/IDBObjectStoreImpl.cpp \
storage/IDBObjectStoreRequest.cpp \
@@ -2535,13 +2535,14 @@ contains(DEFINES, ENABLE_VIDEO=1) {
rendering/RenderMedia.cpp \
bindings/js/JSAudioConstructor.cpp
- # QtMultimedia disabled currently
- false:greaterThan(QT_MINOR_VERSION, 6) {
+ !lessThan(QT_MINOR_VERSION, 6):contains(MOBILITY_CONFIG, multimedia) {
HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h
SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp
- tobe|!tobe: QT += mediaservices
- } else {
+ CONFIG *= mobility
+ MOBILITY += multimedia
+ DEFINES += WTF_USE_QT_MULTIMEDIA
+ } else:contains(QT_CONFIG, phonon) {
HEADERS += \
platform/graphics/qt/MediaPlayerPrivatePhonon.h
@@ -2559,7 +2560,6 @@ contains(DEFINES, ENABLE_VIDEO=1) {
INCLUDEPATH += $$QMAKE_LIBDIR_QT/phonon.framework/Headers
}
}
-
}
contains(DEFINES, ENABLE_XPATH=1) {
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 2888801..4e77d82 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -67,7 +67,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -123,7 +123,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -178,7 +178,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -233,7 +233,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cairo\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\curl\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cairo\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\curl\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -289,7 +289,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cairo\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\curl\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cairo\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\curl\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -344,7 +344,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\accessibility\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\inspector\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\notifications\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\cg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\transforms\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\opentype\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\transcoder\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\jsc\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\animation\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\websockets\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\workers\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\parser\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\runtime\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\inspector\front-end\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
@@ -9173,7 +9173,7 @@
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeType.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeType.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -9225,11 +9225,11 @@
</FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeType.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeType.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeTypeArray.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeTypeArray.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -9281,7 +9281,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeTypeArray.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeTypeArray.h"
>
</File>
<File
@@ -10125,7 +10125,7 @@
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPlugin.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPlugin.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10177,11 +10177,11 @@
</FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPlugin.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPlugin.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPluginArray.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPluginArray.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10233,7 +10233,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPluginArray.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPluginArray.h"
>
</File>
<File
@@ -20725,6 +20725,22 @@
>
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLElementFactory.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLElementFactory.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLNames.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLNames.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\SVGElementFactory.cpp"
>
</File>
@@ -20745,6 +20761,14 @@
>
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RemoteInspectorFrontend2.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RemoteInspectorFrontend2.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\WMLElementFactory.cpp"
>
<FileConfiguration
@@ -22409,10 +22433,6 @@
>
</File>
<File
- RelativePath="..\page\Plugin.h"
- >
- </File>
- <File
RelativePath="..\page\PluginHalter.cpp"
>
</File>
@@ -32253,14 +32273,6 @@
>
</File>
<File
- RelativePath="..\dom\CanvasSurface.cpp"
- >
- </File>
- <File
- RelativePath="..\dom\CanvasSurface.h"
- >
- </File>
- <File
RelativePath="..\dom\CDATASection.cpp"
>
</File>
@@ -32389,15 +32401,15 @@
>
</File>
<File
- RelativePath="..\dom\DeviceOrientation.cpp"
+ RelativePath="..\dom\DeviceOrientationClient.h"
>
</File>
<File
- RelativePath="..\dom\DeviceOrientation.h"
+ RelativePath="..\dom\DeviceOrientationController.cpp"
>
</File>
<File
- RelativePath="..\dom\DeviceOrientationClient.h"
+ RelativePath="..\dom\DeviceOrientationController.h"
>
</File>
<File
@@ -40373,6 +40385,14 @@
>
</File>
<File
+ RelativePath="..\html\HTMLConstructionSite.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\HTMLConstructionSite.h"
+ >
+ </File>
+ <File
RelativePath="..\html\HTMLUListElement.cpp"
>
<FileConfiguration
@@ -40580,6 +40600,10 @@
RelativePath="..\bindings\ScriptControllerBase.cpp"
>
</File>
+ <File
+ RelativePath="..\bindings\ScriptControllerBase.h"
+ >
+ </File>
<Filter
Name="js"
>
@@ -43956,6 +43980,170 @@
</FileConfiguration>
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKey.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|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
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKey.h"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\js\JSIDBKeyCustom.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|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
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\bindings\js\IDBBindingUtilities.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|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
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\bindings\js\IDBBindingUtilities.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabase.cpp"
>
<FileConfiguration
@@ -45216,7 +45404,7 @@
>
</File>
<File
- RelativePath="..\bindings\js\JSMimeTypeArrayCustom.cpp"
+ RelativePath="..\bindings\js\JSDOMMimeTypeArrayCustom.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -45696,7 +45884,7 @@
>
</File>
<File
- RelativePath="..\bindings\js\JSPluginArrayCustom.cpp"
+ RelativePath="..\bindings\js\JSDOMPluginArrayCustom.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -45748,7 +45936,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="..\bindings\js\JSPluginCustom.cpp"
+ RelativePath="..\bindings\js\JSDOMPluginCustom.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -47949,19 +48137,19 @@
Name="plugins"
>
<File
- RelativePath="..\plugins\MimeType.cpp"
+ RelativePath="..\plugins\DOMMimeType.cpp"
>
</File>
<File
- RelativePath="..\plugins\MimeType.h"
+ RelativePath="..\plugins\DOMMimeType.h"
>
</File>
<File
- RelativePath="..\plugins\MimeTypeArray.cpp"
+ RelativePath="..\plugins\DOMMimeTypeArray.cpp"
>
</File>
<File
- RelativePath="..\plugins\MimeTypeArray.h"
+ RelativePath="..\plugins\DOMMimeTypeArray.h"
>
</File>
<File
@@ -47973,19 +48161,19 @@
>
</File>
<File
- RelativePath="..\plugins\Plugin.cpp"
+ RelativePath="..\plugins\DOMPlugin.cpp"
>
</File>
<File
- RelativePath="..\plugins\Plugin.h"
+ RelativePath="..\plugins\DOMPlugin.h"
>
</File>
<File
- RelativePath="..\plugins\PluginArray.cpp"
+ RelativePath="..\plugins\DOMPluginArray.cpp"
>
</File>
<File
- RelativePath="..\plugins\PluginArray.h"
+ RelativePath="..\plugins\DOMPluginArray.h"
>
</File>
<File
@@ -49461,7 +49649,15 @@
Name="history"
>
<File
- RelativePath="..\history\BackForwardList.cpp"
+ RelativePath="..\history\BackForwardController.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\history\BackForwardController.h"
+ >
+ </File>
+ <File
+ RelativePath="..\history\BackForwardControllerClient.h"
>
</File>
<File
@@ -49469,6 +49665,14 @@
>
</File>
<File
+ RelativePath="..\history\BackForwardListImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\history\BackForwardListImpl.h"
+ >
+ </File>
+ <File
RelativePath="..\history\CachedFrame.cpp"
>
</File>
@@ -49665,6 +49869,14 @@
>
</File>
<File
+ RelativePath="..\storage\IDBKey.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\storage\IDBKey.h"
+ >
+ </File>
+ <File
RelativePath="..\storage\IDBKeyRange.cpp"
>
</File>
@@ -50105,6 +50317,14 @@
>
</File>
<File
+ RelativePath="..\inspector\InspectorApplicationCacheAgent.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\inspector\InspectorApplicationCacheAgent.h"
+ >
+ </File>
+ <File
RelativePath="..\inspector\InspectorBackend.cpp"
>
</File>
@@ -50240,6 +50460,10 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\ApplicationCacheItemsView.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\AuditCategories.js"
>
</File>
diff --git a/WebCore/WebCore.vcproj/WebCoreCommon.vsprops b/WebCore/WebCore.vcproj/WebCoreCommon.vsprops
index 4283526..71105bc 100644
--- a/WebCore/WebCore.vcproj/WebCoreCommon.vsprops
+++ b/WebCore/WebCore.vcproj/WebCoreCommon.vsprops
@@ -7,7 +7,7 @@
>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)..&quot;;&quot;$(ProjectDir)..\accessibility&quot;;&quot;$(ProjectDir)..\accessibility\win&quot;;&quot;$(ProjectDir)..\bridge&quot;;&quot;$(ProjectDir)..\bridge\c&quot;;&quot;$(ProjectDir)..\bridge\jsc&quot;;&quot;$(ProjectDir)..\css&quot;;&quot;$(ProjectDir)..\editing&quot;;&quot;$(ProjectDir)..\rendering&quot;;&quot;$(ProjectDir)..\rendering\style&quot;;&quot;$(ProjectDir)..\bindings\js&quot;;&quot;$(ProjectDir)..\dom&quot;;&quot;$(ProjectDir)..\dom\default&quot;;&quot;$(ProjectDir)..\history&quot;;&quot;$(ProjectDir)..\html&quot;;&quot;$(ProjectDir)..\html\canvas&quot;;&quot;$(ProjectDir)..\inspector&quot;;&quot;$(ProjectDir)..\loader&quot;;&quot;$(ProjectDir)..\loader\appcache&quot;;&quot;$(ProjectDir)..\loader\archive&quot;;&quot;$(ProjectDir)..\loader\archive\cf&quot;;&quot;$(ProjectDir)..\loader\icon&quot;;&quot;$(ProjectDir)..\notifications&quot;;&quot;$(ProjectDir)..\page&quot;;&quot;$(ProjectDir)..\page\animation&quot;;&quot;$(ProjectDir)..\page\win&quot;;&quot;$(ProjectDir)..\platform&quot;;&quot;$(ProjectDir)..\platform\animation&quot;;&quot;$(ProjectDir)..\platform\mock&quot;;&quot;$(ProjectDir)..\platform\sql&quot;;&quot;$(ProjectDir)..\platform\win&quot;;&quot;$(ProjectDir)..\platform\network&quot;;&quot;$(ProjectDir)..\platform\network\win&quot;;&quot;$(ProjectDir)..\platform\cf&quot;;&quot;$(ProjectDir)..\platform\graphics&quot;;&quot;$(ProjectDir)..\platform\graphics\filters&quot;;&quot;$(ProjectDir)..\platform\graphics\opentype&quot;;&quot;$(ProjectDir)..\platform\graphics\transforms&quot;;&quot;$(ProjectDir)..\platform\text&quot;;&quot;$(ProjectDir)..\platform\text\transcoder&quot;;&quot;$(ProjectDir)..\platform\graphics\win&quot;;&quot;$(ProjectDir)..\xml&quot;;&quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources&quot;;&quot;$(ProjectDir)..\plugins&quot;;&quot;$(ProjectDir)..\plugins\win&quot;;&quot;$(ProjectDir)..\svg\animation&quot;;&quot;$(ProjectDir)..\svg\graphics&quot;;&quot;$(ProjectDir)..\svg\graphics\filters&quot;;&quot;$(ProjectDir)..\svg&quot;;&quot;$(ProjectDir)..\wml&quot;;&quot;$(ProjectDir)..\storage&quot;;&quot;$(ProjectDir)..\websockets&quot;;&quot;$(ProjectDir)..\workers&quot;;&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\include\sqlite&quot;;&quot;$(WebKitLibrariesDir)\include\JavaScriptCore&quot;"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)..&quot;;&quot;$(ProjectDir)..\accessibility&quot;;&quot;$(ProjectDir)..\accessibility\win&quot;;&quot;$(ProjectDir)..\bridge&quot;;&quot;$(ProjectDir)..\bridge\c&quot;;&quot;$(ProjectDir)..\bridge\jsc&quot;;&quot;$(ProjectDir)..\css&quot;;&quot;$(ProjectDir)..\editing&quot;;&quot;$(ProjectDir)..\rendering&quot;;&quot;$(ProjectDir)..\rendering\style&quot;;&quot;$(ProjectDir)..\bindings&quot;;&quot;$(ProjectDir)..\bindings\js&quot;;&quot;$(ProjectDir)..\dom&quot;;&quot;$(ProjectDir)..\dom\default&quot;;&quot;$(ProjectDir)..\history&quot;;&quot;$(ProjectDir)..\html&quot;;&quot;$(ProjectDir)..\html\canvas&quot;;&quot;$(ProjectDir)..\inspector&quot;;&quot;$(ProjectDir)..\loader&quot;;&quot;$(ProjectDir)..\loader\appcache&quot;;&quot;$(ProjectDir)..\loader\archive&quot;;&quot;$(ProjectDir)..\loader\archive\cf&quot;;&quot;$(ProjectDir)..\loader\icon&quot;;&quot;$(ProjectDir)..\notifications&quot;;&quot;$(ProjectDir)..\page&quot;;&quot;$(ProjectDir)..\page\animation&quot;;&quot;$(ProjectDir)..\page\win&quot;;&quot;$(ProjectDir)..\platform&quot;;&quot;$(ProjectDir)..\platform\animation&quot;;&quot;$(ProjectDir)..\platform\mock&quot;;&quot;$(ProjectDir)..\platform\sql&quot;;&quot;$(ProjectDir)..\platform\win&quot;;&quot;$(ProjectDir)..\platform\network&quot;;&quot;$(ProjectDir)..\platform\network\win&quot;;&quot;$(ProjectDir)..\platform\cf&quot;;&quot;$(ProjectDir)..\platform\graphics&quot;;&quot;$(ProjectDir)..\platform\graphics\filters&quot;;&quot;$(ProjectDir)..\platform\graphics\opentype&quot;;&quot;$(ProjectDir)..\platform\graphics\transforms&quot;;&quot;$(ProjectDir)..\platform\text&quot;;&quot;$(ProjectDir)..\platform\text\transcoder&quot;;&quot;$(ProjectDir)..\platform\graphics\win&quot;;&quot;$(ProjectDir)..\xml&quot;;&quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources&quot;;&quot;$(ProjectDir)..\plugins&quot;;&quot;$(ProjectDir)..\plugins\win&quot;;&quot;$(ProjectDir)..\svg\animation&quot;;&quot;$(ProjectDir)..\svg\graphics&quot;;&quot;$(ProjectDir)..\svg\graphics\filters&quot;;&quot;$(ProjectDir)..\svg&quot;;&quot;$(ProjectDir)..\wml&quot;;&quot;$(ProjectDir)..\storage&quot;;&quot;$(ProjectDir)..\websockets&quot;;&quot;$(ProjectDir)..\workers&quot;;&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\include\sqlite&quot;;&quot;$(WebKitLibrariesDir)\include\JavaScriptCore&quot;"
PreprocessorDefinitions="__WIN32__;DISABLE_3D_RENDERING;WEBCORE_CONTEXT_MENUS"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebCorePrefix.h"
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 0215ac0..1cd25ec 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -7,6 +7,17 @@
objects = {
/* Begin PBXAggregateTarget section */
+ 5D87BB6411E3EBC100702B6F /* WebCoreExportFileGenerator Generator */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 5D87BB6C11E3EC0000702B6F /* Build configuration list for PBXAggregateTarget "WebCoreExportFileGenerator Generator" */;
+ buildPhases = (
+ 5D87BB6311E3EBC100702B6F /* Generate Export File Generator */,
+ );
+ dependencies = (
+ );
+ name = "WebCoreExportFileGenerator Generator";
+ productName = "WebCoreExportFileGenerator Generator";
+ };
DD041FBE09D9DDBE0010AF2A /* Derived Sources */ = {
isa = PBXAggregateTarget;
buildConfigurationList = DD041FC109D9DDDC0010AF2A /* Build configuration list for PBXAggregateTarget "Derived Sources" */;
@@ -14,6 +25,7 @@
DD041FBD09D9DDBE0010AF2A /* Generate Derived Sources */,
);
dependencies = (
+ 5D87BB8F11E3EE2B00702B6F /* PBXTargetDependency */,
);
name = "Derived Sources";
productName = "Derived Sources";
@@ -23,6 +35,7 @@
/* Begin PBXBuildFile section */
0014628A103CD1DE000B20DB /* OriginAccessEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */; };
0014628B103CD1DE000B20DB /* OriginAccessEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 00146289103CD1DE000B20DB /* OriginAccessEntry.h */; };
+ 003F1FEA11E6AB43008258D9 /* UserContentTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 003F1FE911E6AB43008258D9 /* UserContentTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
06027CAD0B1CBFC000884B2D /* ContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 06027CAC0B1CBFC000884B2D /* ContextMenuItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
06027CB30B1CC03D00884B2D /* ContextMenuItemMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06027CB20B1CC03D00884B2D /* ContextMenuItemMac.mm */; };
062287840B4DB322000C34DF /* FocusDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = 062287830B4DB322000C34DF /* FocusDirection.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -192,8 +205,6 @@
0B90561E0F257E930095FF6A /* ThreadableLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B90561D0F257E930095FF6A /* ThreadableLoader.cpp */; };
0B9056F80F2685F30095FF6A /* WorkerThreadableLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B9056F60F2685F30095FF6A /* WorkerThreadableLoader.cpp */; };
0B9056F90F2685F30095FF6A /* WorkerThreadableLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */; settings = {ATTRIBUTES = (); }; };
- 0BC2C7771134A8FC000B2F61 /* CanvasSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */; };
- 0BC2C7781134A8FC000B2F61 /* CanvasSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */; };
0BE030A20F3112FB003C1A46 /* RenderLineBoxList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */; settings = {ATTRIBUTES = (Private, ); }; };
0C3F1F5A10C8871200D72CE1 /* WebGLUniformLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */; };
0C3F1F5B10C8871200D72CE1 /* WebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */; };
@@ -1019,6 +1030,7 @@
4F1534E011B533020021FD86 /* EditingBehaviorTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
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 /* RemoteInspectorFrontend2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend2.cpp */; };
4FD8D0F2119C718B002FA825 /* ScriptGCEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */; };
4FD8D0F3119C718B002FA825 /* ScriptGCEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */; };
510184690B08602A004A825F /* CachedPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 510184670B08602A004A825F /* CachedPage.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1101,7 +1113,6 @@
51721FD311D27EF200638B42 /* JSBeforeProcessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 51721FD111D27EF200638B42 /* JSBeforeProcessEvent.h */; };
5172204B11D2960500638B42 /* BeforeProcessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5172204A11D2960500638B42 /* BeforeProcessEvent.cpp */; };
51741D0F0B07259A00ED442C /* BackForwardList.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0B0B07259A00ED442C /* BackForwardList.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 51741D100B07259A00ED442C /* BackForwardList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51741D0C0B07259A00ED442C /* BackForwardList.cpp */; };
51741D110B07259A00ED442C /* HistoryItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0D0B07259A00ED442C /* HistoryItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
51741D120B07259A00ED442C /* HistoryItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51741D0E0B07259A00ED442C /* HistoryItem.cpp */; };
5174E20A10A1F44F00F95E6F /* PopStateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5174E20810A1F44F00F95E6F /* PopStateEvent.h */; };
@@ -1180,8 +1191,8 @@
59A85EA4119D68EC00DEF1EF /* DeviceOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A85EA3119D68EC00DEF1EF /* DeviceOrientationEvent.h */; };
59A86006119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A86005119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp */; };
59A86008119DAFA100DEF1EF /* JSDeviceOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A86007119DAFA100DEF1EF /* JSDeviceOrientationEvent.h */; };
- 59A8F1D411A69508001AC34A /* DeviceOrientation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A8F1D311A69508001AC34A /* DeviceOrientation.cpp */; };
- 59A8F1D611A69513001AC34A /* DeviceOrientation.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A8F1D511A69513001AC34A /* DeviceOrientation.h */; };
+ 59A8F1D411A69508001AC34A /* DeviceOrientationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A8F1D311A69508001AC34A /* DeviceOrientationController.cpp */; };
+ 59A8F1D611A69513001AC34A /* DeviceOrientationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A8F1D511A69513001AC34A /* DeviceOrientationController.h */; };
59A8F1D811A69520001AC34A /* DeviceOrientationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A8F1D711A69520001AC34A /* DeviceOrientationClient.h */; };
59A9E7B01104758800DFB4C1 /* JavaInstanceJSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A9E7AF1104758800DFB4C1 /* JavaInstanceJSC.cpp */; };
59A9E7B21104759400DFB4C1 /* JavaInstanceJSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A9E7B11104759400DFB4C1 /* JavaInstanceJSC.h */; };
@@ -1199,6 +1210,7 @@
5D15E3AB0F9E6AC1009E0E3F /* XMLDocumentParserScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D15E3A90F9E6AC1009E0E3F /* XMLDocumentParserScope.cpp */; };
5D15E3AC0F9E6AC1009E0E3F /* XMLDocumentParserScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D15E3AA0F9E6AC1009E0E3F /* XMLDocumentParserScope.h */; };
5D874F130D161D3200796C3B /* NetscapePlugInStreamLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */; };
+ 5D87BB8311E3ED8600702B6F /* ExportFileGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D87BB8211E3ED8600702B6F /* ExportFileGenerator.cpp */; };
5D88EE9111407FD300BC3ABC /* DOMSVGFEMorphologyElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 84224189107E786F00766A87 /* DOMSVGFEMorphologyElement.h */; };
5D88EE9211407FF400BC3ABC /* DOMSVGFEMorphologyElementInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 8422418B107E786F00766A87 /* DOMSVGFEMorphologyElementInternal.h */; };
5D925B670F64D4DD00B847F0 /* ScrollBehavior.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D925B650F64D4DD00B847F0 /* ScrollBehavior.cpp */; };
@@ -1379,10 +1391,6 @@
7AED3E060FBB1EAA00D2B03C /* InspectorFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AED3E040FBB1EAA00D2B03C /* InspectorFrontend.h */; };
7AFD4A8B1131C2760035B883 /* ScriptBreakpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD4A8A1131C2760035B883 /* ScriptBreakpoint.h */; settings = {ATTRIBUTES = (Private, ); }; };
7AFD4FF4113277B60035B883 /* ScriptDebugListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD4FF3113277B60035B883 /* ScriptDebugListener.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 816C806811BE887E009A45E9 /* IDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816C806611BE887E009A45E9 /* IDBKeyRange.cpp */; };
- 816C806911BE887E009A45E9 /* IDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 816C806711BE887E009A45E9 /* IDBKeyRange.h */; };
- 816C80AF11BE990D009A45E9 /* JSIDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 816C80AE11BE990D009A45E9 /* JSIDBKeyRange.h */; };
- 816C80B111BE9934009A45E9 /* JSIDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816C80B011BE9934009A45E9 /* JSIDBKeyRange.cpp */; };
82B658981189E39200E052A1 /* InspectorCSSStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B658971189E39200E052A1 /* InspectorCSSStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
82B6589A1189E47600E052A1 /* InspectorCSSStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82B658991189E47600E052A1 /* InspectorCSSStore.cpp */; };
841FDC261178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */; };
@@ -2302,6 +2310,12 @@
8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A81BF8411DCFD9000DA2B98 /* ResourceLoadTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
8A844D0411D3C18E0014065C /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A844D0111D3C18E0014065C /* Performance.cpp */; };
8A844D0511D3C18E0014065C /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A844D0211D3C18E0014065C /* Performance.h */; };
+ 8A9A587011E84C36008ACFD1 /* JSNavigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A586E11E84C35008ACFD1 /* JSNavigation.cpp */; };
+ 8A9A587111E84C36008ACFD1 /* JSNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A586F11E84C36008ACFD1 /* JSNavigation.h */; };
+ 8A9A587411E84C81008ACFD1 /* JSPerformance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A587211E84C81008ACFD1 /* JSPerformance.cpp */; };
+ 8A9A587511E84C81008ACFD1 /* JSPerformance.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A587311E84C81008ACFD1 /* JSPerformance.h */; };
+ 8A9A588711E84F37008ACFD1 /* JSTiming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */; };
+ 8A9A588811E84F37008ACFD1 /* JSTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A587711E84C98008ACFD1 /* JSTiming.h */; };
8AF4E55511DC5A36000ED3DE /* Navigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF4E55211DC5A36000ED3DE /* Navigation.cpp */; };
8AF4E55611DC5A36000ED3DE /* Navigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55311DC5A36000ED3DE /* Navigation.h */; };
8AF4E55B11DC5A63000ED3DE /* Timing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF4E55811DC5A63000ED3DE /* Timing.cpp */; };
@@ -2595,6 +2609,8 @@
97E8B35611A23CE200169409 /* HTMLTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97E8B35411A23CE200169409 /* HTMLTokenizer.cpp */; };
97E8B35711A23CE200169409 /* HTMLTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E8B35511A23CE200169409 /* HTMLTokenizer.h */; };
97E8B3C311A2890800169409 /* HTMLToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E8B3C211A2890800169409 /* HTMLToken.h */; };
+ 97EF561011E40783007E026F /* HTMLConstructionSite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */; };
+ 97EF561111E40783007E026F /* HTMLConstructionSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 97EF560F11E40783007E026F /* HTMLConstructionSite.h */; };
97EF7DFE107E55B700D7C49C /* ScriptControllerBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */; };
9F6FC1961122E82A00E80196 /* ScriptDebugServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */; };
9F6FC1971122E82A00E80196 /* ScriptDebugServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3499,32 +3515,32 @@
A8F5C0B90F9285AC0098E06B /* RenderSVGModelObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8F5C0B70F9285AC0098E06B /* RenderSVGModelObject.cpp */; };
A8FA6E5D0E4CFDED00D5CF49 /* Pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */; };
A8FA6E5E0E4CFDED00D5CF49 /* Pattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8FA6E5C0E4CFDED00D5CF49 /* Pattern.cpp */; };
- A9C6E4E30D745E05006442E9 /* MimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E10D745E05006442E9 /* MimeType.cpp */; };
- A9C6E4E40D745E05006442E9 /* MimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E20D745E05006442E9 /* MimeType.h */; };
- A9C6E4E70D745E18006442E9 /* MimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E50D745E18006442E9 /* MimeTypeArray.cpp */; };
- A9C6E4E80D745E18006442E9 /* MimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E60D745E18006442E9 /* MimeTypeArray.h */; };
- A9C6E4EB0D745E2B006442E9 /* Plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E90D745E2B006442E9 /* Plugin.cpp */; };
- A9C6E4EC0D745E2B006442E9 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EA0D745E2B006442E9 /* Plugin.h */; };
- A9C6E4EF0D745E38006442E9 /* PluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4ED0D745E38006442E9 /* PluginArray.cpp */; };
- A9C6E4F00D745E38006442E9 /* PluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EE0D745E38006442E9 /* PluginArray.h */; };
+ A9C6E4E30D745E05006442E9 /* DOMMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */; };
+ A9C6E4E40D745E05006442E9 /* DOMMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E20D745E05006442E9 /* DOMMimeType.h */; };
+ A9C6E4E70D745E18006442E9 /* DOMMimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */; };
+ A9C6E4E80D745E18006442E9 /* DOMMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */; };
+ A9C6E4EB0D745E2B006442E9 /* DOMPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E90D745E2B006442E9 /* DOMPlugin.cpp */; };
+ A9C6E4EC0D745E2B006442E9 /* DOMPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */; };
+ A9C6E4EF0D745E38006442E9 /* DOMPluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4ED0D745E38006442E9 /* DOMPluginArray.cpp */; };
+ A9C6E4F00D745E38006442E9 /* DOMPluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EE0D745E38006442E9 /* DOMPluginArray.h */; };
A9C6E4F30D745E48006442E9 /* PluginData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4F10D745E48006442E9 /* PluginData.cpp */; };
A9C6E4F40D745E48006442E9 /* PluginData.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4F20D745E48006442E9 /* PluginData.h */; settings = {ATTRIBUTES = (Private, ); }; };
A9C6E5A50D746458006442E9 /* Navigator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E5A30D746458006442E9 /* Navigator.cpp */; };
A9C6E5A60D746458006442E9 /* Navigator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E5A40D746458006442E9 /* Navigator.h */; };
- A9C6E6470D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E6460D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp */; };
+ A9C6E6470D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */; };
A9C6E6490D7465D8006442E9 /* JSNavigatorCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E6480D7465D8006442E9 /* JSNavigatorCustom.cpp */; };
- A9C6E64C0D7465E7006442E9 /* JSPluginArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64A0D7465E7006442E9 /* JSPluginArrayCustom.cpp */; };
- A9C6E64D0D7465E7006442E9 /* JSPluginCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64B0D7465E7006442E9 /* JSPluginCustom.cpp */; };
+ A9C6E64C0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */; };
+ A9C6E64D0D7465E7006442E9 /* JSDOMPluginCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */; };
A9D247F70D757E3400FDF959 /* JSNavigator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247F50D757E3300FDF959 /* JSNavigator.cpp */; };
A9D247F80D757E3400FDF959 /* JSNavigator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247F60D757E3300FDF959 /* JSNavigator.h */; };
- A9D247FE0D757E6900FDF959 /* JSPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FA0D757E6900FDF959 /* JSPlugin.cpp */; };
- A9D247FF0D757E6900FDF959 /* JSPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FB0D757E6900FDF959 /* JSPlugin.h */; };
- A9D248000D757E6900FDF959 /* JSPluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FC0D757E6900FDF959 /* JSPluginArray.cpp */; };
- A9D248010D757E6900FDF959 /* JSPluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FD0D757E6900FDF959 /* JSPluginArray.h */; };
- A9D248060D757E7D00FDF959 /* JSMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248020D757E7D00FDF959 /* JSMimeType.cpp */; };
- A9D248070D757E7D00FDF959 /* JSMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248030D757E7D00FDF959 /* JSMimeType.h */; };
- A9D248080D757E7D00FDF959 /* JSMimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248040D757E7D00FDF959 /* JSMimeTypeArray.cpp */; };
- A9D248090D757E7D00FDF959 /* JSMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248050D757E7D00FDF959 /* JSMimeTypeArray.h */; };
+ A9D247FE0D757E6900FDF959 /* JSDOMPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FA0D757E6900FDF959 /* JSDOMPlugin.cpp */; };
+ A9D247FF0D757E6900FDF959 /* JSDOMPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FB0D757E6900FDF959 /* JSDOMPlugin.h */; };
+ A9D248000D757E6900FDF959 /* JSDOMPluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FC0D757E6900FDF959 /* JSDOMPluginArray.cpp */; };
+ A9D248010D757E6900FDF959 /* JSDOMPluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FD0D757E6900FDF959 /* JSDOMPluginArray.h */; };
+ A9D248060D757E7D00FDF959 /* JSDOMMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248020D757E7D00FDF959 /* JSDOMMimeType.cpp */; };
+ A9D248070D757E7D00FDF959 /* JSDOMMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248030D757E7D00FDF959 /* JSDOMMimeType.h */; };
+ A9D248080D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248040D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp */; };
+ A9D248090D757E7D00FDF959 /* JSDOMMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */; };
AA0972CC0B6947A800A705E9 /* SVGInlineTextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0972CA0B6947A800A705E9 /* SVGInlineTextBox.cpp */; };
AA0972CD0B6947A800A705E9 /* SVGInlineTextBox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0972CB0B6947A800A705E9 /* SVGInlineTextBox.h */; };
AA21ECCA0ABF0FBA002B834C /* CSSCursorImageValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */; };
@@ -4301,18 +4317,12 @@
B5C1123B102B6C4600096578 /* SQLTransactionCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5C11239102B6C4600096578 /* SQLTransactionCoordinator.cpp */; };
B5C1123C102B6C4600096578 /* SQLTransactionCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = B5C1123A102B6C4600096578 /* SQLTransactionCoordinator.h */; };
B5D3601A112F8B560048DEA8 /* DatabaseCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D36019112F8B560048DEA8 /* DatabaseCallback.h */; };
- B627FB2D11AD743500E97B72 /* IDBDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C50AD2A911AC1631008CF2FB /* IDBDatabaseImpl.cpp */; };
- B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B6693EE811AD63E6003F2770 /* IDBObjectStore.h */; };
- B6693EED11AD63E6003F2770 /* IDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */; };
- B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */; };
- B6693EF211AD6486003F2770 /* JSIDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6693EF011AD6486003F2770 /* JSIDBObjectStoreRequest.cpp */; };
- B6693EF311AD6486003F2770 /* JSIDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B6693EF111AD6486003F2770 /* JSIDBObjectStoreRequest.h */; };
- B6B0540911B68F10002564C5 /* IDBObjectStoreImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */; };
- B6B0540A11B68F10002564C5 /* IDBObjectStoreImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */; };
B71FE6DF11091CB300DAEF77 /* PrintContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B776D43A1104525D00BEB0EC /* PrintContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
B734B181119B9911006587BD /* FontTranscoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B734B180119B9911006587BD /* FontTranscoder.cpp */; };
B734B183119B991D006587BD /* FontTranscoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B734B182119B991D006587BD /* FontTranscoder.h */; };
B776D43D1104527500BEB0EC /* PrintContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B776D43C1104527500BEB0EC /* PrintContext.cpp */; };
+ B885E8D411E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */; };
+ B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */; settings = {ATTRIBUTES = (); }; };
BC00F0040E0A185500FD04E3 /* DOMFile.h in Headers */ = {isa = PBXBuildFile; fileRef = BC00EFFE0E0A185500FD04E3 /* DOMFile.h */; };
BC00F0050E0A185500FD04E3 /* DOMFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC00EFFF0E0A185500FD04E3 /* DOMFile.mm */; };
BC00F0060E0A185500FD04E3 /* DOMFileInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC00F0000E0A185500FD04E3 /* DOMFileInternal.h */; };
@@ -4661,6 +4671,11 @@
BCA846D60DC67A350026C309 /* RenderReplica.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA846D40DC67A350026C309 /* RenderReplica.cpp */; };
BCA846D70DC67A350026C309 /* RenderReplica.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA846D50DC67A350026C309 /* RenderReplica.h */; };
BCA85A100C3AEAF4006F8308 /* DOMSVGNumberInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA85A0F0C3AEAF4006F8308 /* DOMSVGNumberInternal.h */; };
+ BCA8C81E11E3D36900812FB7 /* BackForwardController.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8C81C11E3D36900812FB7 /* BackForwardController.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BCA8C81F11E3D36900812FB7 /* BackForwardController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA8C81D11E3D36900812FB7 /* BackForwardController.cpp */; };
+ BCA8C83111E3D53200812FB7 /* BackForwardControllerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8C83011E3D53200812FB7 /* BackForwardControllerClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BCA8CA5F11E4E6D100812FB7 /* BackForwardListImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA8CA5D11E4E6D100812FB7 /* BackForwardListImpl.cpp */; };
+ BCA8CA6011E4E6D100812FB7 /* BackForwardListImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8CA5E11E4E6D100812FB7 /* BackForwardListImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCAA90C30A7EBA60008B1229 /* Scrollbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCAA90C20A7EBA60008B1229 /* Scrollbar.cpp */; };
BCACF3BC1072921A00C0C8A3 /* UserContentURLPattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */; };
BCACF3BD1072921A00C0C8A3 /* UserContentURLPattern.h in Headers */ = {isa = PBXBuildFile; fileRef = BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -4862,63 +4877,85 @@
C5137CF311A58378004ADB99 /* JSDOMStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = C5137CF111A58378004ADB99 /* JSDOMStringList.h */; };
C5160EEA1004543A00A7CEE2 /* StorageAreaImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5160EE81004543A00A7CEE2 /* StorageAreaImpl.cpp */; };
C5160EEB1004543A00A7CEE2 /* StorageAreaImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C5160EE91004543A00A7CEE2 /* StorageAreaImpl.h */; };
- C5198F4C1192ECFD002B74A6 /* IDBCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F381192ECFD002B74A6 /* IDBCallbacks.h */; };
- C5198F4E1192ECFD002B74A6 /* IDBDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F3A1192ECFD002B74A6 /* IDBDatabase.h */; };
- C5198F4F1192ECFD002B74A6 /* IDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F3B1192ECFD002B74A6 /* IDBDatabaseError.h */; };
- C5198F511192ECFD002B74A6 /* IDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F3D1192ECFD002B74A6 /* IDBDatabaseException.h */; };
- C5198F531192ECFD002B74A6 /* IDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F3F1192ECFD002B74A6 /* IDBDatabaseRequest.cpp */; };
- C5198F541192ECFD002B74A6 /* IDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F401192ECFD002B74A6 /* IDBDatabaseRequest.h */; };
- C5198F561192ECFD002B74A6 /* IDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F421192ECFD002B74A6 /* IDBRequest.cpp */; };
- C5198F571192ECFD002B74A6 /* IDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F431192ECFD002B74A6 /* IDBRequest.h */; };
- C5198F591192ECFD002B74A6 /* IndexedDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F451192ECFD002B74A6 /* IndexedDatabase.cpp */; };
- C5198F5A1192ECFD002B74A6 /* IndexedDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F461192ECFD002B74A6 /* IndexedDatabase.h */; };
- C5198F5B1192ECFD002B74A6 /* IndexedDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F471192ECFD002B74A6 /* IndexedDatabaseImpl.cpp */; };
- C5198F5C1192ECFD002B74A6 /* IndexedDatabaseImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F481192ECFD002B74A6 /* IndexedDatabaseImpl.h */; };
- C5198F5D1192ECFD002B74A6 /* IndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F491192ECFD002B74A6 /* IndexedDatabaseRequest.cpp */; };
- C5198F5E1192ECFD002B74A6 /* IndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F4A1192ECFD002B74A6 /* IndexedDatabaseRequest.h */; };
- C51DA9A511AEF2C1009799C5 /* IDBIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = C51DA99F11AEF2C1009799C5 /* IDBIndex.h */; };
- C51DA9A611AEF2C1009799C5 /* IDBIndexImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C51DA9A011AEF2C1009799C5 /* IDBIndexImpl.cpp */; };
- C51DA9A711AEF2C1009799C5 /* IDBIndexImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C51DA9A111AEF2C1009799C5 /* IDBIndexImpl.h */; };
- C51DA9A811AEF2C1009799C5 /* IDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C51DA9A211AEF2C1009799C5 /* IDBIndexRequest.cpp */; };
- C51DA9A911AEF2C1009799C5 /* IDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C51DA9A311AEF2C1009799C5 /* IDBIndexRequest.h */; };
C544274B11A57E7A0063A749 /* DOMStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = C544274911A57E7A0063A749 /* DOMStringList.h */; };
C55610F111A704EB00B82D27 /* DOMStringList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C55610F011A704EB00B82D27 /* DOMStringList.cpp */; };
C55E38BF10040D5D00A56BDB /* StorageNamespaceImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C55E38BB10040D5D00A56BDB /* StorageNamespaceImpl.h */; };
C55E38C010040D5D00A56BDB /* StorageNamespaceImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C55E38BC10040D5D00A56BDB /* StorageNamespaceImpl.cpp */; };
- C56C914E119D849800DE4CD9 /* JSIDBAnyCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C914D119D849800DE4CD9 /* JSIDBAnyCustom.cpp */; };
- C56C9152119D84CB00DE4CD9 /* IDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C914F119D84CB00DE4CD9 /* IDBAny.cpp */; };
- C56C9153119D84CB00DE4CD9 /* IDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C9150119D84CB00DE4CD9 /* IDBAny.h */; };
- C56C915F119D84E600DE4CD9 /* IDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C9159119D84E600DE4CD9 /* IDBErrorEvent.cpp */; };
- C56C9160119D84E600DE4CD9 /* IDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C915A119D84E600DE4CD9 /* IDBErrorEvent.h */; };
- C56C9162119D84E600DE4CD9 /* IDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C915C119D84E600DE4CD9 /* IDBEvent.cpp */; };
- C56C9163119D84E600DE4CD9 /* IDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C915D119D84E600DE4CD9 /* IDBEvent.h */; };
- C56C9168119D84FF00DE4CD9 /* IDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C9165119D84FF00DE4CD9 /* IDBSuccessEvent.cpp */; };
- C56C9169119D84FF00DE4CD9 /* IDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C9166119D84FF00DE4CD9 /* IDBSuccessEvent.h */; };
- C56C919A119D915300DE4CD9 /* JSIDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C9198119D915300DE4CD9 /* JSIDBAny.cpp */; };
- C56C919B119D915300DE4CD9 /* JSIDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C9199119D915300DE4CD9 /* JSIDBAny.h */; };
- C56C91A0119D918100DE4CD9 /* JSIDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C919C119D918100DE4CD9 /* JSIDBErrorEvent.cpp */; };
- C56C91A1119D918100DE4CD9 /* JSIDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C919D119D918100DE4CD9 /* JSIDBErrorEvent.h */; };
- C56C91A2119D918100DE4CD9 /* JSIDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C919E119D918100DE4CD9 /* JSIDBEvent.cpp */; };
- C56C91A3119D918100DE4CD9 /* JSIDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C919F119D918100DE4CD9 /* JSIDBEvent.h */; };
- C56C91A6119D918700DE4CD9 /* JSIDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C91A4119D918700DE4CD9 /* JSIDBSuccessEvent.cpp */; };
- C56C91A7119D918700DE4CD9 /* JSIDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C91A5119D918700DE4CD9 /* JSIDBSuccessEvent.h */; };
- C5BBC9D011AEF838007C2BFE /* JSIDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5BBC9CE11AEF838007C2BFE /* JSIDBIndexRequest.cpp */; };
- C5BBC9D111AEF838007C2BFE /* JSIDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5BBC9CF11AEF838007C2BFE /* JSIDBIndexRequest.h */; };
+ C585A65E11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A65C11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp */; };
+ C585A65F11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A65D11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp */; };
+ C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66011D4FAC5004C3E4B /* IDBBindingUtilities.cpp */; };
+ C585A66311D4FAC5004C3E4B /* IDBBindingUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */; };
+ C585A67C11D4FB08004C3E4B /* JSIDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66411D4FB07004C3E4B /* JSIDBAny.cpp */; };
+ C585A67D11D4FB08004C3E4B /* JSIDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66511D4FB07004C3E4B /* JSIDBAny.h */; };
+ C585A67E11D4FB08004C3E4B /* JSIDBDatabaseError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66611D4FB07004C3E4B /* JSIDBDatabaseError.cpp */; };
+ C585A67F11D4FB08004C3E4B /* JSIDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66711D4FB07004C3E4B /* JSIDBDatabaseError.h */; };
+ C585A68011D4FB08004C3E4B /* JSIDBDatabaseException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66811D4FB07004C3E4B /* JSIDBDatabaseException.cpp */; };
+ C585A68111D4FB08004C3E4B /* JSIDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66911D4FB07004C3E4B /* JSIDBDatabaseException.h */; };
+ C585A68211D4FB08004C3E4B /* JSIDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66A11D4FB07004C3E4B /* JSIDBDatabaseRequest.cpp */; };
+ C585A68311D4FB08004C3E4B /* JSIDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66B11D4FB07004C3E4B /* JSIDBDatabaseRequest.h */; };
+ C585A68411D4FB08004C3E4B /* JSIDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66C11D4FB07004C3E4B /* JSIDBErrorEvent.cpp */; };
+ C585A68511D4FB08004C3E4B /* JSIDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66D11D4FB07004C3E4B /* JSIDBErrorEvent.h */; };
+ C585A68611D4FB08004C3E4B /* JSIDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66E11D4FB07004C3E4B /* JSIDBEvent.cpp */; };
+ C585A68711D4FB08004C3E4B /* JSIDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66F11D4FB07004C3E4B /* JSIDBEvent.h */; };
+ C585A68811D4FB08004C3E4B /* JSIDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67011D4FB07004C3E4B /* JSIDBIndexRequest.cpp */; };
+ C585A68911D4FB08004C3E4B /* JSIDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67111D4FB07004C3E4B /* JSIDBIndexRequest.h */; };
+ C585A68A11D4FB08004C3E4B /* JSIDBKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67211D4FB07004C3E4B /* JSIDBKey.cpp */; };
+ C585A68B11D4FB08004C3E4B /* JSIDBKey.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67311D4FB07004C3E4B /* JSIDBKey.h */; };
+ C585A68C11D4FB08004C3E4B /* JSIDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67411D4FB07004C3E4B /* JSIDBKeyRange.cpp */; };
+ C585A68D11D4FB08004C3E4B /* JSIDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67511D4FB07004C3E4B /* JSIDBKeyRange.h */; };
+ C585A68E11D4FB08004C3E4B /* JSIDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67611D4FB07004C3E4B /* JSIDBObjectStoreRequest.cpp */; };
+ C585A68F11D4FB08004C3E4B /* JSIDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67711D4FB07004C3E4B /* JSIDBObjectStoreRequest.h */; };
+ C585A69011D4FB08004C3E4B /* JSIDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67811D4FB07004C3E4B /* JSIDBRequest.cpp */; };
+ C585A69111D4FB08004C3E4B /* JSIDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67911D4FB07004C3E4B /* JSIDBRequest.h */; };
+ C585A69211D4FB08004C3E4B /* JSIDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67A11D4FB07004C3E4B /* JSIDBSuccessEvent.cpp */; };
+ C585A69311D4FB08004C3E4B /* JSIDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67B11D4FB07004C3E4B /* JSIDBSuccessEvent.h */; };
+ C585A69611D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A69411D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp */; };
+ C585A69711D4FB13004C3E4B /* JSIndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69511D4FB13004C3E4B /* JSIndexedDatabaseRequest.h */; };
+ C585A6CC11D4FB3D004C3E4B /* IDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A69811D4FB3D004C3E4B /* IDBAny.cpp */; };
+ C585A6CD11D4FB3D004C3E4B /* IDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69911D4FB3D004C3E4B /* IDBAny.h */; };
+ C585A6CF11D4FB3D004C3E4B /* IDBCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69B11D4FB3D004C3E4B /* IDBCallbacks.h */; };
+ C585A6D011D4FB3D004C3E4B /* IDBDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69C11D4FB3D004C3E4B /* IDBDatabase.h */; };
+ C585A6D111D4FB3D004C3E4B /* IDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69D11D4FB3D004C3E4B /* IDBDatabaseError.h */; };
+ C585A6D311D4FB3D004C3E4B /* IDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69F11D4FB3D004C3E4B /* IDBDatabaseException.h */; };
+ C585A6D511D4FB3D004C3E4B /* IDBDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A111D4FB3D004C3E4B /* IDBDatabaseImpl.cpp */; };
+ C585A6D611D4FB3D004C3E4B /* IDBDatabaseImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6A211D4FB3D004C3E4B /* IDBDatabaseImpl.h */; };
+ C585A6D711D4FB3D004C3E4B /* IDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A311D4FB3D004C3E4B /* IDBDatabaseRequest.cpp */; };
+ C585A6D811D4FB3D004C3E4B /* IDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6A411D4FB3D004C3E4B /* IDBDatabaseRequest.h */; };
+ C585A6DA11D4FB3D004C3E4B /* IDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A611D4FB3D004C3E4B /* IDBErrorEvent.cpp */; };
+ C585A6DB11D4FB3D004C3E4B /* IDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6A711D4FB3D004C3E4B /* IDBErrorEvent.h */; };
+ C585A6DD11D4FB3D004C3E4B /* IDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A911D4FB3D004C3E4B /* IDBEvent.cpp */; };
+ C585A6DE11D4FB3D004C3E4B /* IDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6AA11D4FB3D004C3E4B /* IDBEvent.h */; };
+ C585A6E011D4FB3D004C3E4B /* IDBIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6AC11D4FB3D004C3E4B /* IDBIndex.h */; };
+ C585A6E111D4FB3D004C3E4B /* IDBIndexImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6AD11D4FB3D004C3E4B /* IDBIndexImpl.cpp */; };
+ C585A6E211D4FB3D004C3E4B /* IDBIndexImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6AE11D4FB3D004C3E4B /* IDBIndexImpl.h */; };
+ C585A6E311D4FB3D004C3E4B /* IDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6AF11D4FB3D004C3E4B /* IDBIndexRequest.cpp */; };
+ C585A6E411D4FB3D004C3E4B /* IDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B011D4FB3D004C3E4B /* IDBIndexRequest.h */; };
+ C585A6E611D4FB3D004C3E4B /* IDBKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6B211D4FB3D004C3E4B /* IDBKey.cpp */; };
+ C585A6E711D4FB3D004C3E4B /* IDBKey.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B311D4FB3D004C3E4B /* IDBKey.h */; };
+ C585A6E911D4FB3D004C3E4B /* IDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6B511D4FB3D004C3E4B /* IDBKeyRange.cpp */; };
+ C585A6EA11D4FB3D004C3E4B /* IDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B611D4FB3D004C3E4B /* IDBKeyRange.h */; };
+ C585A6EC11D4FB3D004C3E4B /* IDBKeyTree.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B811D4FB3D004C3E4B /* IDBKeyTree.h */; };
+ C585A6ED11D4FB3D004C3E4B /* IDBObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B911D4FB3D004C3E4B /* IDBObjectStore.h */; };
+ C585A6EE11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6BA11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp */; };
+ C585A6EF11D4FB3D004C3E4B /* IDBObjectStoreImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6BB11D4FB3D004C3E4B /* IDBObjectStoreImpl.h */; };
+ C585A6F011D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6BC11D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp */; };
+ C585A6F111D4FB3D004C3E4B /* IDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6BD11D4FB3D004C3E4B /* IDBObjectStoreRequest.h */; };
+ C585A6F311D4FB3D004C3E4B /* IDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6BF11D4FB3D004C3E4B /* IDBRequest.cpp */; };
+ C585A6F411D4FB3D004C3E4B /* IDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C011D4FB3D004C3E4B /* IDBRequest.h */; };
+ C585A6F611D4FB3D004C3E4B /* IDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C211D4FB3D004C3E4B /* IDBSuccessEvent.cpp */; };
+ C585A6F711D4FB3D004C3E4B /* IDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C311D4FB3D004C3E4B /* IDBSuccessEvent.h */; };
+ C585A6F911D4FB3D004C3E4B /* IndexedDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C511D4FB3D004C3E4B /* IndexedDatabase.cpp */; };
+ C585A6FA11D4FB3D004C3E4B /* IndexedDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C611D4FB3D004C3E4B /* IndexedDatabase.h */; };
+ C585A6FB11D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C711D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp */; };
+ C585A6FC11D4FB3D004C3E4B /* IndexedDatabaseImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C811D4FB3D004C3E4B /* IndexedDatabaseImpl.h */; };
+ C585A6FD11D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C911D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp */; };
+ C585A6FE11D4FB3D004C3E4B /* IndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6CA11D4FB3D004C3E4B /* IndexedDatabaseRequest.h */; };
C5D4AA7A116BAFB60069CA93 /* GlyphMetricsMap.h in Headers */ = {isa = PBXBuildFile; fileRef = C5D4AA78116BAFB60069CA93 /* GlyphMetricsMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
C5E9B67710697E1300C7BB1A /* StorageEventDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5E9B67610697E1300C7BB1A /* StorageEventDispatcher.cpp */; };
C5EBDD84105EDDEC0056816F /* StorageEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C5EBDD81105EDDEC0056816F /* StorageEventDispatcher.h */; };
- C5F4F406119306AC00FDFADD /* JSIDBDatabaseError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F3FE119306AC00FDFADD /* JSIDBDatabaseError.cpp */; };
- C5F4F407119306AC00FDFADD /* JSIDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F3FF119306AC00FDFADD /* JSIDBDatabaseError.h */; };
- C5F4F408119306AC00FDFADD /* JSIDBDatabaseException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F400119306AC00FDFADD /* JSIDBDatabaseException.cpp */; };
- C5F4F409119306AC00FDFADD /* JSIDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F401119306AC00FDFADD /* JSIDBDatabaseException.h */; };
- C5F4F40A119306AC00FDFADD /* JSIDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F402119306AC00FDFADD /* JSIDBDatabaseRequest.cpp */; };
- C5F4F40B119306AC00FDFADD /* JSIDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F403119306AC00FDFADD /* JSIDBDatabaseRequest.h */; };
- C5F4F40C119306AC00FDFADD /* JSIDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F404119306AC00FDFADD /* JSIDBRequest.cpp */; };
- C5F4F40D119306AC00FDFADD /* JSIDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F405119306AC00FDFADD /* JSIDBRequest.h */; };
- C5F4F410119306C000FDFADD /* JSIndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F40E119306C000FDFADD /* JSIndexedDatabaseRequest.cpp */; };
- C5F4F411119306C000FDFADD /* JSIndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F40F119306C000FDFADD /* JSIndexedDatabaseRequest.h */; };
C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D74AD309AA282E000B0A52 /* ModifySelectionListLevel.h */; };
C6D74AE409AA290A000B0A52 /* ModifySelectionListLevel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D74AE309AA290A000B0A52 /* ModifySelectionListLevel.cpp */; };
+ CE02F0C411E83ADD00C6684A /* ScriptControllerBase.h in Headers */ = {isa = PBXBuildFile; fileRef = CE02F0C311E83ADD00C6684A /* ScriptControllerBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
CE172E011136E8CE0062A533 /* ZoomMode.h in Headers */ = {isa = PBXBuildFile; fileRef = CE172E001136E8CE0062A533 /* ZoomMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
CE4C00E410F6F7BA00CA38F5 /* HTMLNoScriptElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE4C00E310F6F7BA00CA38F5 /* HTMLNoScriptElement.cpp */; };
CE4C00E610F6F7C100CA38F5 /* HTMLNoScriptElement.h in Headers */ = {isa = PBXBuildFile; fileRef = CE4C00E510F6F7C100CA38F5 /* HTMLNoScriptElement.h */; };
@@ -5179,6 +5216,20 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 5D87BB6A11E3EBD200702B6F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 5D87BB6411E3EBC100702B6F;
+ remoteInfo = "WebCoreExportFileGenerator Generator";
+ };
+ 5D87BB8E11E3EE2B00702B6F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 5D87BB4E11E3EAEB00702B6F;
+ remoteInfo = WebCoreExportFileGenerator;
+ };
DD041FF009D9E3250010AF2A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
@@ -5613,6 +5664,7 @@
/* Begin PBXFileReference section */
00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OriginAccessEntry.cpp; sourceTree = "<group>"; };
00146289103CD1DE000B20DB /* OriginAccessEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OriginAccessEntry.h; sourceTree = "<group>"; };
+ 003F1FE911E6AB43008258D9 /* UserContentTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentTypes.h; sourceTree = "<group>"; };
06027CAC0B1CBFC000884B2D /* ContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ContextMenuItem.h; sourceTree = "<group>"; };
06027CB20B1CC03D00884B2D /* ContextMenuItemMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextMenuItemMac.mm; sourceTree = "<group>"; };
062287830B4DB322000C34DF /* FocusDirection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FocusDirection.h; sourceTree = "<group>"; };
@@ -5772,8 +5824,6 @@
0B90561D0F257E930095FF6A /* ThreadableLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadableLoader.cpp; sourceTree = "<group>"; };
0B9056F60F2685F30095FF6A /* WorkerThreadableLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerThreadableLoader.cpp; sourceTree = "<group>"; };
0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerThreadableLoader.h; sourceTree = "<group>"; };
- 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasSurface.cpp; sourceTree = "<group>"; };
- 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasSurface.h; sourceTree = "<group>"; };
0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderLineBoxList.h; sourceTree = "<group>"; };
0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebGLUniformLocation.cpp; path = canvas/WebGLUniformLocation.cpp; sourceTree = "<group>"; };
0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebGLUniformLocation.h; path = canvas/WebGLUniformLocation.h; sourceTree = "<group>"; };
@@ -5784,7 +5834,6 @@
0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationControllerPrivate.h; path = animation/AnimationControllerPrivate.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>"; };
- 0F5263E511DC136E0006D33C /* WebCore.AcceleratedCompositing.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.AcceleratedCompositing.exp; sourceTree = "<group>"; };
0F56028D0E4B76580065B038 /* RenderMarquee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMarquee.h; sourceTree = "<group>"; };
0F56028E0E4B76580065B038 /* RenderMarquee.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMarquee.cpp; sourceTree = "<group>"; };
0F580B030F12A2540051D689 /* GraphicsLayerCA.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsLayerCA.mm; sourceTree = "<group>"; };
@@ -5800,7 +5849,6 @@
0F5B7A5310F65D7A00376302 /* RenderEmbeddedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderEmbeddedObject.h; sourceTree = "<group>"; };
0F6ECD430F252F3700BDE271 /* CSSPropertyLonghand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSPropertyLonghand.h; sourceTree = "<group>"; };
0F6ECD440F252F3700BDE271 /* CSSPropertyLonghand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSPropertyLonghand.cpp; sourceTree = "<group>"; };
- 0F9C6F4B1073EF0400DED9BF /* WebCore.3DRendering.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.3DRendering.exp; sourceTree = "<group>"; };
0FC705200EB1815600B90AD8 /* AtomicStringHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AtomicStringHash.h; sourceTree = "<group>"; };
0FCF33230F2B9715004B6795 /* ColorCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorCG.cpp; sourceTree = "<group>"; };
0FCF33280F2B9A25004B6795 /* WebTiledLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebTiledLayer.mm; sourceTree = "<group>"; };
@@ -6229,7 +6277,6 @@
24F54EAB101FE914000AE741 /* ApplicationCacheHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationCacheHost.h; sourceTree = "<group>"; };
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>"; };
- 271245D311890AB70083E852 /* WebCore.ProtectionSpaceAuthCallback.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.ProtectionSpaceAuthCallback.exp; 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>"; };
@@ -6495,16 +6542,6 @@
448A29BE0A46D9CB0030759F /* JSHTMLOptionsCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLOptionsCollection.cpp; sourceTree = "<group>"; };
448AD27A0A4813790023D179 /* JSHTMLOptionsCollectionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLOptionsCollectionCustom.cpp; sourceTree = "<group>"; };
449098B10F8F82520076A327 /* FeatureDefines.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = FeatureDefines.xcconfig; sourceTree = "<group>"; };
- 449195940FBE17D700D9F824 /* WebCore.VideoProxy.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.VideoProxy.exp; sourceTree = "<group>"; };
- 449195950FBE17D700D9F824 /* WebCore.Tiger.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.Tiger.exp; sourceTree = "<group>"; };
- 449195960FBE17D700D9F824 /* WebCore.SVG.ForeignObject.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.ForeignObject.exp; sourceTree = "<group>"; };
- 449195970FBE17D700D9F824 /* WebCore.SVG.Filters.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.Filters.exp; sourceTree = "<group>"; };
- 449195980FBE17D700D9F824 /* WebCore.SVG.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.exp; sourceTree = "<group>"; };
- 449195990FBE17D700D9F824 /* WebCore.SVG.Animation.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.Animation.exp; sourceTree = "<group>"; };
- 4491959A0FBE17D700D9F824 /* WebCore.NPAPI.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.NPAPI.exp; sourceTree = "<group>"; };
- 4491959B0FBE17D700D9F824 /* WebCore.PluginHostProcess.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.PluginHostProcess.exp; sourceTree = "<group>"; };
- 4491959C0FBE17D700D9F824 /* WebCore.JNI.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.JNI.exp; sourceTree = "<group>"; };
- 4491959D0FBE17D700D9F824 /* WebCore.DashboardSupport.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.DashboardSupport.exp; sourceTree = "<group>"; };
449B19F30FA72ECE0015CA4A /* HTMLParserQuirks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLParserQuirks.h; sourceTree = "<group>"; };
4614A1FD0B23A8D600446E1C /* copyCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = copyCursor.png; sourceTree = "<group>"; };
464EA2710B8A350B00A8E6E3 /* crossHairCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = crossHairCursor.png; sourceTree = "<group>"; };
@@ -6714,6 +6751,8 @@
4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBehaviorTypes.h; 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 /* RemoteInspectorFrontend2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteInspectorFrontend2.cpp; sourceTree = "<group>"; };
+ 4F4F5FFC11CBD30100A186BF /* RemoteInspectorFrontend2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteInspectorFrontend2.h; sourceTree = "<group>"; };
4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptGCEvent.cpp; sourceTree = "<group>"; };
4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptGCEvent.h; sourceTree = "<group>"; };
510184670B08602A004A825F /* CachedPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedPage.h; sourceTree = "<group>"; };
@@ -6799,7 +6838,6 @@
51721FD111D27EF200638B42 /* JSBeforeProcessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBeforeProcessEvent.h; sourceTree = "<group>"; };
5172204A11D2960500638B42 /* BeforeProcessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BeforeProcessEvent.cpp; sourceTree = "<group>"; };
51741D0B0B07259A00ED442C /* BackForwardList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardList.h; sourceTree = "<group>"; };
- 51741D0C0B07259A00ED442C /* BackForwardList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardList.cpp; sourceTree = "<group>"; };
51741D0D0B07259A00ED442C /* HistoryItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HistoryItem.h; sourceTree = "<group>"; };
51741D0E0B07259A00ED442C /* HistoryItem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = HistoryItem.cpp; sourceTree = "<group>"; };
5174E20810A1F44F00F95E6F /* PopStateEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PopStateEvent.h; sourceTree = "<group>"; };
@@ -6892,8 +6930,8 @@
59A85EAA119D7B6E00DEF1EF /* DeviceOrientationEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DeviceOrientationEvent.idl; sourceTree = "<group>"; };
59A86005119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDeviceOrientationEvent.cpp; sourceTree = "<group>"; };
59A86007119DAFA100DEF1EF /* JSDeviceOrientationEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDeviceOrientationEvent.h; sourceTree = "<group>"; };
- 59A8F1D311A69508001AC34A /* DeviceOrientation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceOrientation.cpp; sourceTree = "<group>"; };
- 59A8F1D511A69513001AC34A /* DeviceOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceOrientation.h; sourceTree = "<group>"; };
+ 59A8F1D311A69508001AC34A /* DeviceOrientationController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceOrientationController.cpp; sourceTree = "<group>"; };
+ 59A8F1D511A69513001AC34A /* DeviceOrientationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceOrientationController.h; sourceTree = "<group>"; };
59A8F1D711A69520001AC34A /* DeviceOrientationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceOrientationClient.h; sourceTree = "<group>"; };
59A9E7AF1104758800DFB4C1 /* JavaInstanceJSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JavaInstanceJSC.cpp; path = jsc/JavaInstanceJSC.cpp; sourceTree = "<group>"; };
59A9E7B11104759400DFB4C1 /* JavaInstanceJSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JavaInstanceJSC.h; path = jsc/JavaInstanceJSC.h; sourceTree = "<group>"; };
@@ -6910,6 +6948,9 @@
59EE12311106082900885116 /* JNIUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JNIUtility.h; sourceTree = "<group>"; };
5D15E3A90F9E6AC1009E0E3F /* XMLDocumentParserScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XMLDocumentParserScope.cpp; sourceTree = "<group>"; };
5D15E3AA0F9E6AC1009E0E3F /* XMLDocumentParserScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLDocumentParserScope.h; sourceTree = "<group>"; };
+ 5D4B8C5211E52C8B00BBB62F /* WebCore.exp.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebCore.exp.in; sourceTree = "<group>"; };
+ 5D87BB4F11E3EAEB00702B6F /* WebCoreExportFileGenerator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = WebCoreExportFileGenerator; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5D87BB8211E3ED8600702B6F /* ExportFileGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExportFileGenerator.cpp; path = DerivedSources/WebCore/ExportFileGenerator.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
5D925B650F64D4DD00B847F0 /* ScrollBehavior.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollBehavior.cpp; sourceTree = "<group>"; };
5D925B660F64D4DD00B847F0 /* ScrollBehavior.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollBehavior.h; sourceTree = "<group>"; };
5DA5E0FA102B953800088CF9 /* JSWebSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebSocket.cpp; sourceTree = "<group>"; };
@@ -6927,7 +6968,6 @@
63189AE20E83A33300012E41 /* NodeRareData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeRareData.h; sourceTree = "<group>"; };
637B7ADE0E8767B800E32194 /* ElementRareData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElementRareData.h; sourceTree = "<group>"; };
63D7B32C0E78CD3F00F7617C /* NodeRenderStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeRenderStyle.h; sourceTree = "<group>"; };
- 63F371CD100E790000BBA87A /* WebCore.Video.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.Video.exp; sourceTree = "<group>"; };
650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSGrammar.h; sourceTree = "<group>"; };
650FBF270D9AF046008FC292 /* SVGHKernElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGHKernElement.cpp; sourceTree = "<group>"; };
650FBF280D9AF047008FC292 /* SVGHKernElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGHKernElement.h; sourceTree = "<group>"; };
@@ -7103,11 +7143,6 @@
7AED3E040FBB1EAA00D2B03C /* InspectorFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFrontend.h; sourceTree = "<group>"; };
7AFD4A8A1131C2760035B883 /* ScriptBreakpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptBreakpoint.h; sourceTree = "<group>"; };
7AFD4FF3113277B60035B883 /* ScriptDebugListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDebugListener.h; sourceTree = "<group>"; };
- 816C806611BE887E009A45E9 /* IDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBKeyRange.cpp; sourceTree = "<group>"; };
- 816C806711BE887E009A45E9 /* IDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKeyRange.h; sourceTree = "<group>"; };
- 816C80AE11BE990D009A45E9 /* JSIDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBKeyRange.h; sourceTree = "<group>"; };
- 816C80B011BE9934009A45E9 /* JSIDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKeyRange.cpp; sourceTree = "<group>"; };
- 81CC114011BEAA9D00D0D856 /* IDBKeyRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBKeyRange.idl; sourceTree = "<group>"; };
82B658971189E39200E052A1 /* InspectorCSSStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorCSSStore.h; sourceTree = "<group>"; };
82B658991189E47600E052A1 /* InspectorCSSStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorCSSStore.cpp; sourceTree = "<group>"; };
841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilter.cpp; sourceTree = "<group>"; };
@@ -7979,6 +8014,12 @@
8A844D0111D3C18E0014065C /* Performance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Performance.cpp; sourceTree = "<group>"; };
8A844D0211D3C18E0014065C /* Performance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = "<group>"; };
8A844D0311D3C18E0014065C /* Performance.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Performance.idl; sourceTree = "<group>"; };
+ 8A9A586E11E84C35008ACFD1 /* JSNavigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigation.cpp; sourceTree = "<group>"; };
+ 8A9A586F11E84C36008ACFD1 /* JSNavigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNavigation.h; sourceTree = "<group>"; };
+ 8A9A587211E84C81008ACFD1 /* JSPerformance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformance.cpp; sourceTree = "<group>"; };
+ 8A9A587311E84C81008ACFD1 /* JSPerformance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPerformance.h; sourceTree = "<group>"; };
+ 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTiming.cpp; sourceTree = "<group>"; };
+ 8A9A587711E84C98008ACFD1 /* JSTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTiming.h; sourceTree = "<group>"; };
8AF4E55211DC5A36000ED3DE /* Navigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Navigation.cpp; sourceTree = "<group>"; };
8AF4E55311DC5A36000ED3DE /* Navigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Navigation.h; sourceTree = "<group>"; };
8AF4E55411DC5A36000ED3DE /* Navigation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Navigation.idl; sourceTree = "<group>"; };
@@ -8253,6 +8294,8 @@
97E8B35411A23CE200169409 /* HTMLTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLTokenizer.cpp; sourceTree = "<group>"; };
97E8B35511A23CE200169409 /* HTMLTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizer.h; sourceTree = "<group>"; };
97E8B3C211A2890800169409 /* HTMLToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLToken.h; sourceTree = "<group>"; };
+ 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLConstructionSite.cpp; sourceTree = "<group>"; };
+ 97EF560F11E40783007E026F /* HTMLConstructionSite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLConstructionSite.h; sourceTree = "<group>"; };
97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptControllerBase.cpp; sourceTree = "<group>"; };
9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptDebugServer.cpp; sourceTree = "<group>"; };
9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDebugServer.h; sourceTree = "<group>"; };
@@ -8903,37 +8946,37 @@
A8F5C0B70F9285AC0098E06B /* RenderSVGModelObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGModelObject.cpp; sourceTree = "<group>"; };
A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pattern.h; sourceTree = "<group>"; };
A8FA6E5C0E4CFDED00D5CF49 /* Pattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pattern.cpp; sourceTree = "<group>"; };
- A9C6E4E10D745E05006442E9 /* MimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = MimeType.cpp; sourceTree = "<group>"; };
- A9C6E4E20D745E05006442E9 /* MimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MimeType.h; sourceTree = "<group>"; };
- A9C6E4E50D745E18006442E9 /* MimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = MimeTypeArray.cpp; sourceTree = "<group>"; };
- A9C6E4E60D745E18006442E9 /* MimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MimeTypeArray.h; sourceTree = "<group>"; };
- A9C6E4E90D745E2B006442E9 /* Plugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Plugin.cpp; sourceTree = "<group>"; };
- A9C6E4EA0D745E2B006442E9 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
- A9C6E4ED0D745E38006442E9 /* PluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PluginArray.cpp; sourceTree = "<group>"; };
- A9C6E4EE0D745E38006442E9 /* PluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginArray.h; sourceTree = "<group>"; };
+ A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeType.cpp; sourceTree = "<group>"; };
+ A9C6E4E20D745E05006442E9 /* DOMMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMMimeType.h; sourceTree = "<group>"; };
+ A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeTypeArray.cpp; sourceTree = "<group>"; };
+ A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMMimeTypeArray.h; sourceTree = "<group>"; };
+ A9C6E4E90D745E2B006442E9 /* DOMPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMPlugin.cpp; sourceTree = "<group>"; };
+ A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMPlugin.h; sourceTree = "<group>"; };
+ A9C6E4ED0D745E38006442E9 /* DOMPluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMPluginArray.cpp; sourceTree = "<group>"; };
+ A9C6E4EE0D745E38006442E9 /* DOMPluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMPluginArray.h; sourceTree = "<group>"; };
A9C6E4F10D745E48006442E9 /* PluginData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PluginData.cpp; sourceTree = "<group>"; };
A9C6E4F20D745E48006442E9 /* PluginData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginData.h; sourceTree = "<group>"; };
A9C6E5A30D746458006442E9 /* Navigator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Navigator.cpp; sourceTree = "<group>"; };
A9C6E5A40D746458006442E9 /* Navigator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Navigator.h; sourceTree = "<group>"; };
- A9C6E6460D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSMimeTypeArrayCustom.cpp; sourceTree = "<group>"; };
+ A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMimeTypeArrayCustom.cpp; sourceTree = "<group>"; };
A9C6E6480D7465D8006442E9 /* JSNavigatorCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigatorCustom.cpp; sourceTree = "<group>"; };
- A9C6E64A0D7465E7006442E9 /* JSPluginArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPluginArrayCustom.cpp; sourceTree = "<group>"; };
- A9C6E64B0D7465E7006442E9 /* JSPluginCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPluginCustom.cpp; sourceTree = "<group>"; };
+ A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPluginArrayCustom.cpp; sourceTree = "<group>"; };
+ A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPluginCustom.cpp; sourceTree = "<group>"; };
A9C6E65D0D746694006442E9 /* Navigator.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Navigator.idl; sourceTree = "<group>"; };
- A9C6E65E0D7466F2006442E9 /* MimeType.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = MimeType.idl; sourceTree = "<group>"; };
- A9C6E65F0D746700006442E9 /* MimeTypeArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = MimeTypeArray.idl; sourceTree = "<group>"; };
- A9C6E6600D74670C006442E9 /* Plugin.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Plugin.idl; sourceTree = "<group>"; };
- A9C6E6610D74671E006442E9 /* PluginArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = PluginArray.idl; sourceTree = "<group>"; };
+ A9C6E65E0D7466F2006442E9 /* DOMMimeType.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMMimeType.idl; sourceTree = "<group>"; };
+ A9C6E65F0D746700006442E9 /* DOMMimeTypeArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMMimeTypeArray.idl; sourceTree = "<group>"; };
+ A9C6E6600D74670C006442E9 /* DOMPlugin.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMPlugin.idl; sourceTree = "<group>"; };
+ A9C6E6610D74671E006442E9 /* DOMPluginArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMPluginArray.idl; sourceTree = "<group>"; };
A9D247F50D757E3300FDF959 /* JSNavigator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigator.cpp; sourceTree = "<group>"; };
A9D247F60D757E3300FDF959 /* JSNavigator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSNavigator.h; sourceTree = "<group>"; };
- A9D247FA0D757E6900FDF959 /* JSPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPlugin.cpp; sourceTree = "<group>"; };
- A9D247FB0D757E6900FDF959 /* JSPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSPlugin.h; sourceTree = "<group>"; };
- A9D247FC0D757E6900FDF959 /* JSPluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPluginArray.cpp; sourceTree = "<group>"; };
- A9D247FD0D757E6900FDF959 /* JSPluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSPluginArray.h; sourceTree = "<group>"; };
- A9D248020D757E7D00FDF959 /* JSMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSMimeType.cpp; sourceTree = "<group>"; };
- A9D248030D757E7D00FDF959 /* JSMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSMimeType.h; sourceTree = "<group>"; };
- A9D248040D757E7D00FDF959 /* JSMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSMimeTypeArray.cpp; sourceTree = "<group>"; };
- A9D248050D757E7D00FDF959 /* JSMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSMimeTypeArray.h; sourceTree = "<group>"; };
+ A9D247FA0D757E6900FDF959 /* JSDOMPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPlugin.cpp; sourceTree = "<group>"; };
+ A9D247FB0D757E6900FDF959 /* JSDOMPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMPlugin.h; sourceTree = "<group>"; };
+ A9D247FC0D757E6900FDF959 /* JSDOMPluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPluginArray.cpp; sourceTree = "<group>"; };
+ A9D247FD0D757E6900FDF959 /* JSDOMPluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMPluginArray.h; sourceTree = "<group>"; };
+ A9D248020D757E7D00FDF959 /* JSDOMMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMimeType.cpp; sourceTree = "<group>"; };
+ A9D248030D757E7D00FDF959 /* JSDOMMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMMimeType.h; sourceTree = "<group>"; };
+ A9D248040D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMimeTypeArray.cpp; sourceTree = "<group>"; };
+ A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMMimeTypeArray.h; sourceTree = "<group>"; };
AA0972CA0B6947A800A705E9 /* SVGInlineTextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGInlineTextBox.cpp; sourceTree = "<group>"; };
AA0972CB0B6947A800A705E9 /* SVGInlineTextBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGInlineTextBox.h; sourceTree = "<group>"; };
AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CSSCursorImageValue.cpp; sourceTree = "<group>"; };
@@ -9867,18 +9910,12 @@
B5C11239102B6C4600096578 /* SQLTransactionCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLTransactionCoordinator.cpp; sourceTree = "<group>"; };
B5C1123A102B6C4600096578 /* SQLTransactionCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLTransactionCoordinator.h; sourceTree = "<group>"; };
B5D36019112F8B560048DEA8 /* DatabaseCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseCallback.h; sourceTree = "<group>"; };
- B6693EE811AD63E6003F2770 /* IDBObjectStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStore.h; sourceTree = "<group>"; };
- B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreRequest.cpp; sourceTree = "<group>"; };
- B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreRequest.h; sourceTree = "<group>"; };
- B6693EEF11AD63F6003F2770 /* IDBObjectStoreRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBObjectStoreRequest.idl; sourceTree = "<group>"; };
- B6693EF011AD6486003F2770 /* JSIDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBObjectStoreRequest.cpp; sourceTree = "<group>"; };
- B6693EF111AD6486003F2770 /* JSIDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBObjectStoreRequest.h; sourceTree = "<group>"; };
- B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreImpl.cpp; sourceTree = "<group>"; };
- B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreImpl.h; sourceTree = "<group>"; };
B734B180119B9911006587BD /* FontTranscoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FontTranscoder.cpp; path = transcoder/FontTranscoder.cpp; sourceTree = "<group>"; };
B734B182119B991D006587BD /* FontTranscoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FontTranscoder.h; path = transcoder/FontTranscoder.h; sourceTree = "<group>"; };
B776D43A1104525D00BEB0EC /* PrintContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrintContext.h; sourceTree = "<group>"; };
B776D43C1104527500BEB0EC /* PrintContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrintContext.cpp; sourceTree = "<group>"; };
+ B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorApplicationCacheAgent.cpp; sourceTree = "<group>"; };
+ B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorApplicationCacheAgent.h; sourceTree = "<group>"; };
BC00EFFE0E0A185500FD04E3 /* DOMFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMFile.h; sourceTree = "<group>"; };
BC00EFFF0E0A185500FD04E3 /* DOMFile.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMFile.mm; sourceTree = "<group>"; };
BC00F0000E0A185500FD04E3 /* DOMFileInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMFileInternal.h; sourceTree = "<group>"; };
@@ -10033,7 +10070,6 @@
BC56CB1E10D5AC8000A77C64 /* GeolocationControllerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationControllerClient.h; sourceTree = "<group>"; };
BC56CB1F10D5AC8000A77C64 /* GeolocationError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationError.h; sourceTree = "<group>"; };
BC56CB2010D5AC8000A77C64 /* GeolocationPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationPosition.h; sourceTree = "<group>"; };
- BC56CCDF10D72BD800A77C64 /* WebCore.ClientBasedGeolocation.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.ClientBasedGeolocation.exp; sourceTree = "<group>"; };
BC5823F40C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLElementCustom.cpp; sourceTree = "<group>"; };
BC5825F20C0B89380053F1B5 /* JSCSSStyleDeclarationCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSStyleDeclarationCustom.cpp; sourceTree = "<group>"; };
BC588AEF0BFA6CF900EE679E /* HTMLParserErrorCodes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HTMLParserErrorCodes.h; sourceTree = "<group>"; };
@@ -10253,6 +10289,11 @@
BCA846D40DC67A350026C309 /* RenderReplica.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderReplica.cpp; sourceTree = "<group>"; };
BCA846D50DC67A350026C309 /* RenderReplica.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderReplica.h; sourceTree = "<group>"; };
BCA85A0F0C3AEAF4006F8308 /* DOMSVGNumberInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGNumberInternal.h; sourceTree = "<group>"; };
+ BCA8C81C11E3D36900812FB7 /* BackForwardController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardController.h; sourceTree = "<group>"; };
+ BCA8C81D11E3D36900812FB7 /* BackForwardController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardController.cpp; sourceTree = "<group>"; };
+ BCA8C83011E3D53200812FB7 /* BackForwardControllerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardControllerClient.h; sourceTree = "<group>"; };
+ BCA8CA5D11E4E6D100812FB7 /* BackForwardListImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardListImpl.cpp; sourceTree = "<group>"; };
+ BCA8CA5E11E4E6D100812FB7 /* BackForwardListImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardListImpl.h; sourceTree = "<group>"; };
BCAA90C20A7EBA60008B1229 /* Scrollbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Scrollbar.cpp; path = platform/Scrollbar.cpp; sourceTree = SOURCE_ROOT; };
BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserContentURLPattern.cpp; sourceTree = "<group>"; };
BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentURLPattern.h; sourceTree = "<group>"; };
@@ -10455,8 +10496,6 @@
C0DFC86F0DB6841A003EAE7C /* JSConsoleCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSConsoleCustom.cpp; sourceTree = "<group>"; };
C105DA610F3AA68F001DD44F /* TextEncodingDetectorICU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextEncodingDetectorICU.cpp; sourceTree = "<group>"; };
C105DA630F3AA6B8001DD44F /* TextEncodingDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextEncodingDetector.h; sourceTree = "<group>"; };
- C50AD2A911AC1631008CF2FB /* IDBDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseImpl.cpp; sourceTree = "<group>"; };
- C50AD2AA11AC1631008CF2FB /* IDBDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseImpl.h; sourceTree = "<group>"; };
C50D0E800FF4272900AC2644 /* StorageNamespace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageNamespace.cpp; sourceTree = "<group>"; };
C50D0E810FF4272900AC2644 /* StorageNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageNamespace.h; sourceTree = "<group>"; };
C5102D920FD9AA2D00FAFF04 /* StorageSyncManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageSyncManager.h; sourceTree = "<group>"; };
@@ -10467,74 +10506,99 @@
C5137CF111A58378004ADB99 /* JSDOMStringList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMStringList.h; sourceTree = "<group>"; };
C5160EE81004543A00A7CEE2 /* StorageAreaImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageAreaImpl.cpp; sourceTree = "<group>"; };
C5160EE91004543A00A7CEE2 /* StorageAreaImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageAreaImpl.h; sourceTree = "<group>"; };
- C5198F381192ECFD002B74A6 /* IDBCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCallbacks.h; sourceTree = "<group>"; };
- C5198F3A1192ECFD002B74A6 /* IDBDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabase.h; sourceTree = "<group>"; };
- C5198F3B1192ECFD002B74A6 /* IDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseError.h; sourceTree = "<group>"; };
- C5198F3C1192ECFD002B74A6 /* IDBDatabaseError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseError.idl; sourceTree = "<group>"; };
- C5198F3D1192ECFD002B74A6 /* IDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseException.h; sourceTree = "<group>"; };
- C5198F3E1192ECFD002B74A6 /* IDBDatabaseException.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseException.idl; sourceTree = "<group>"; };
- C5198F3F1192ECFD002B74A6 /* IDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseRequest.cpp; sourceTree = "<group>"; };
- C5198F401192ECFD002B74A6 /* IDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseRequest.h; sourceTree = "<group>"; };
- C5198F411192ECFD002B74A6 /* IDBDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseRequest.idl; sourceTree = "<group>"; };
- C5198F421192ECFD002B74A6 /* IDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBRequest.cpp; sourceTree = "<group>"; };
- C5198F431192ECFD002B74A6 /* IDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBRequest.h; sourceTree = "<group>"; };
- C5198F441192ECFD002B74A6 /* IDBRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBRequest.idl; sourceTree = "<group>"; };
- C5198F451192ECFD002B74A6 /* IndexedDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabase.cpp; sourceTree = "<group>"; };
- C5198F461192ECFD002B74A6 /* IndexedDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabase.h; sourceTree = "<group>"; };
- C5198F471192ECFD002B74A6 /* IndexedDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseImpl.cpp; sourceTree = "<group>"; };
- C5198F481192ECFD002B74A6 /* IndexedDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseImpl.h; sourceTree = "<group>"; };
- C5198F491192ECFD002B74A6 /* IndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseRequest.cpp; sourceTree = "<group>"; };
- C5198F4A1192ECFD002B74A6 /* IndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseRequest.h; sourceTree = "<group>"; };
- C5198F4B1192ECFD002B74A6 /* IndexedDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IndexedDatabaseRequest.idl; sourceTree = "<group>"; };
- C51DA99F11AEF2C1009799C5 /* IDBIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndex.h; sourceTree = "<group>"; };
- C51DA9A011AEF2C1009799C5 /* IDBIndexImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexImpl.cpp; sourceTree = "<group>"; };
- C51DA9A111AEF2C1009799C5 /* IDBIndexImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexImpl.h; sourceTree = "<group>"; };
- C51DA9A211AEF2C1009799C5 /* IDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexRequest.cpp; sourceTree = "<group>"; };
- C51DA9A311AEF2C1009799C5 /* IDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexRequest.h; sourceTree = "<group>"; };
- C51DA9A411AEF2C1009799C5 /* IDBIndexRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBIndexRequest.idl; sourceTree = "<group>"; };
C544274911A57E7A0063A749 /* DOMStringList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMStringList.h; sourceTree = "<group>"; };
C544274A11A57E7A0063A749 /* DOMStringList.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMStringList.idl; sourceTree = "<group>"; };
C55610F011A704EB00B82D27 /* DOMStringList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMStringList.cpp; sourceTree = "<group>"; };
C55E38BB10040D5D00A56BDB /* StorageNamespaceImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageNamespaceImpl.h; sourceTree = "<group>"; };
C55E38BC10040D5D00A56BDB /* StorageNamespaceImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageNamespaceImpl.cpp; sourceTree = "<group>"; };
- C56C914D119D849800DE4CD9 /* JSIDBAnyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAnyCustom.cpp; sourceTree = "<group>"; };
- C56C914F119D84CB00DE4CD9 /* IDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBAny.cpp; sourceTree = "<group>"; };
- C56C9150119D84CB00DE4CD9 /* IDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBAny.h; sourceTree = "<group>"; };
- C56C9151119D84CB00DE4CD9 /* IDBAny.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBAny.idl; sourceTree = "<group>"; };
- C56C9159119D84E600DE4CD9 /* IDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBErrorEvent.cpp; sourceTree = "<group>"; };
- C56C915A119D84E600DE4CD9 /* IDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBErrorEvent.h; sourceTree = "<group>"; };
- C56C915B119D84E600DE4CD9 /* IDBErrorEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBErrorEvent.idl; sourceTree = "<group>"; };
- C56C915C119D84E600DE4CD9 /* IDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBEvent.cpp; sourceTree = "<group>"; };
- C56C915D119D84E600DE4CD9 /* IDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBEvent.h; sourceTree = "<group>"; };
- C56C915E119D84E600DE4CD9 /* IDBEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBEvent.idl; sourceTree = "<group>"; };
- C56C9165119D84FF00DE4CD9 /* IDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSuccessEvent.cpp; sourceTree = "<group>"; };
- C56C9166119D84FF00DE4CD9 /* IDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSuccessEvent.h; sourceTree = "<group>"; };
- C56C9167119D84FF00DE4CD9 /* IDBSuccessEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBSuccessEvent.idl; sourceTree = "<group>"; };
- C56C9198119D915300DE4CD9 /* JSIDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAny.cpp; sourceTree = "<group>"; };
- C56C9199119D915300DE4CD9 /* JSIDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBAny.h; sourceTree = "<group>"; };
- C56C919C119D918100DE4CD9 /* JSIDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBErrorEvent.cpp; sourceTree = "<group>"; };
- C56C919D119D918100DE4CD9 /* JSIDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBErrorEvent.h; sourceTree = "<group>"; };
- C56C919E119D918100DE4CD9 /* JSIDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBEvent.cpp; sourceTree = "<group>"; };
- C56C919F119D918100DE4CD9 /* JSIDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBEvent.h; sourceTree = "<group>"; };
- C56C91A4119D918700DE4CD9 /* JSIDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBSuccessEvent.cpp; sourceTree = "<group>"; };
- C56C91A5119D918700DE4CD9 /* JSIDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBSuccessEvent.h; sourceTree = "<group>"; };
- C5BBC9CE11AEF838007C2BFE /* JSIDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBIndexRequest.cpp; sourceTree = "<group>"; };
- C5BBC9CF11AEF838007C2BFE /* JSIDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBIndexRequest.h; sourceTree = "<group>"; };
+ C585A65C11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAnyCustom.cpp; sourceTree = "<group>"; };
+ C585A65D11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKeyCustom.cpp; sourceTree = "<group>"; };
+ C585A66011D4FAC5004C3E4B /* IDBBindingUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBBindingUtilities.cpp; sourceTree = "<group>"; };
+ C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBBindingUtilities.h; sourceTree = "<group>"; };
+ C585A66411D4FB07004C3E4B /* JSIDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAny.cpp; sourceTree = "<group>"; };
+ C585A66511D4FB07004C3E4B /* JSIDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBAny.h; sourceTree = "<group>"; };
+ C585A66611D4FB07004C3E4B /* JSIDBDatabaseError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseError.cpp; sourceTree = "<group>"; };
+ C585A66711D4FB07004C3E4B /* JSIDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseError.h; sourceTree = "<group>"; };
+ C585A66811D4FB07004C3E4B /* JSIDBDatabaseException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseException.cpp; sourceTree = "<group>"; };
+ C585A66911D4FB07004C3E4B /* JSIDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseException.h; sourceTree = "<group>"; };
+ C585A66A11D4FB07004C3E4B /* JSIDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseRequest.cpp; sourceTree = "<group>"; };
+ C585A66B11D4FB07004C3E4B /* JSIDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseRequest.h; sourceTree = "<group>"; };
+ C585A66C11D4FB07004C3E4B /* JSIDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBErrorEvent.cpp; sourceTree = "<group>"; };
+ C585A66D11D4FB07004C3E4B /* JSIDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBErrorEvent.h; sourceTree = "<group>"; };
+ C585A66E11D4FB07004C3E4B /* JSIDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBEvent.cpp; sourceTree = "<group>"; };
+ C585A66F11D4FB07004C3E4B /* JSIDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBEvent.h; sourceTree = "<group>"; };
+ C585A67011D4FB07004C3E4B /* JSIDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBIndexRequest.cpp; sourceTree = "<group>"; };
+ C585A67111D4FB07004C3E4B /* JSIDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBIndexRequest.h; sourceTree = "<group>"; };
+ C585A67211D4FB07004C3E4B /* JSIDBKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKey.cpp; sourceTree = "<group>"; };
+ C585A67311D4FB07004C3E4B /* JSIDBKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBKey.h; sourceTree = "<group>"; };
+ C585A67411D4FB07004C3E4B /* JSIDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKeyRange.cpp; sourceTree = "<group>"; };
+ C585A67511D4FB07004C3E4B /* JSIDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBKeyRange.h; sourceTree = "<group>"; };
+ C585A67611D4FB07004C3E4B /* JSIDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBObjectStoreRequest.cpp; sourceTree = "<group>"; };
+ C585A67711D4FB07004C3E4B /* JSIDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBObjectStoreRequest.h; sourceTree = "<group>"; };
+ C585A67811D4FB07004C3E4B /* JSIDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBRequest.cpp; sourceTree = "<group>"; };
+ C585A67911D4FB07004C3E4B /* JSIDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBRequest.h; sourceTree = "<group>"; };
+ C585A67A11D4FB07004C3E4B /* JSIDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBSuccessEvent.cpp; sourceTree = "<group>"; };
+ C585A67B11D4FB07004C3E4B /* JSIDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBSuccessEvent.h; sourceTree = "<group>"; };
+ C585A69411D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIndexedDatabaseRequest.cpp; sourceTree = "<group>"; };
+ C585A69511D4FB13004C3E4B /* JSIndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIndexedDatabaseRequest.h; sourceTree = "<group>"; };
+ C585A69811D4FB3D004C3E4B /* IDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBAny.cpp; sourceTree = "<group>"; };
+ C585A69911D4FB3D004C3E4B /* IDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBAny.h; sourceTree = "<group>"; };
+ C585A69A11D4FB3D004C3E4B /* IDBAny.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBAny.idl; sourceTree = "<group>"; };
+ C585A69B11D4FB3D004C3E4B /* IDBCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCallbacks.h; sourceTree = "<group>"; };
+ C585A69C11D4FB3D004C3E4B /* IDBDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabase.h; sourceTree = "<group>"; };
+ C585A69D11D4FB3D004C3E4B /* IDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseError.h; sourceTree = "<group>"; };
+ C585A69E11D4FB3D004C3E4B /* IDBDatabaseError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseError.idl; sourceTree = "<group>"; };
+ C585A69F11D4FB3D004C3E4B /* IDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseException.h; sourceTree = "<group>"; };
+ C585A6A011D4FB3D004C3E4B /* IDBDatabaseException.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseException.idl; sourceTree = "<group>"; };
+ C585A6A111D4FB3D004C3E4B /* IDBDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseImpl.cpp; sourceTree = "<group>"; };
+ C585A6A211D4FB3D004C3E4B /* IDBDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseImpl.h; sourceTree = "<group>"; };
+ C585A6A311D4FB3D004C3E4B /* IDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseRequest.cpp; sourceTree = "<group>"; };
+ C585A6A411D4FB3D004C3E4B /* IDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseRequest.h; sourceTree = "<group>"; };
+ C585A6A511D4FB3D004C3E4B /* IDBDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseRequest.idl; sourceTree = "<group>"; };
+ C585A6A611D4FB3D004C3E4B /* IDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBErrorEvent.cpp; sourceTree = "<group>"; };
+ C585A6A711D4FB3D004C3E4B /* IDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBErrorEvent.h; sourceTree = "<group>"; };
+ C585A6A811D4FB3D004C3E4B /* IDBErrorEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBErrorEvent.idl; sourceTree = "<group>"; };
+ C585A6A911D4FB3D004C3E4B /* IDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBEvent.cpp; sourceTree = "<group>"; };
+ C585A6AA11D4FB3D004C3E4B /* IDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBEvent.h; sourceTree = "<group>"; };
+ C585A6AB11D4FB3D004C3E4B /* IDBEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBEvent.idl; sourceTree = "<group>"; };
+ C585A6AC11D4FB3D004C3E4B /* IDBIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndex.h; sourceTree = "<group>"; };
+ C585A6AD11D4FB3D004C3E4B /* IDBIndexImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexImpl.cpp; sourceTree = "<group>"; };
+ C585A6AE11D4FB3D004C3E4B /* IDBIndexImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexImpl.h; sourceTree = "<group>"; };
+ C585A6AF11D4FB3D004C3E4B /* IDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexRequest.cpp; sourceTree = "<group>"; };
+ C585A6B011D4FB3D004C3E4B /* IDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexRequest.h; sourceTree = "<group>"; };
+ C585A6B111D4FB3D004C3E4B /* IDBIndexRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBIndexRequest.idl; sourceTree = "<group>"; };
+ C585A6B211D4FB3D004C3E4B /* IDBKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBKey.cpp; sourceTree = "<group>"; };
+ C585A6B311D4FB3D004C3E4B /* IDBKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKey.h; sourceTree = "<group>"; };
+ C585A6B411D4FB3D004C3E4B /* IDBKey.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBKey.idl; sourceTree = "<group>"; };
+ C585A6B511D4FB3D004C3E4B /* IDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBKeyRange.cpp; sourceTree = "<group>"; };
+ C585A6B611D4FB3D004C3E4B /* IDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKeyRange.h; sourceTree = "<group>"; };
+ C585A6B711D4FB3D004C3E4B /* IDBKeyRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBKeyRange.idl; sourceTree = "<group>"; };
+ C585A6B811D4FB3D004C3E4B /* IDBKeyTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKeyTree.h; sourceTree = "<group>"; };
+ C585A6B911D4FB3D004C3E4B /* IDBObjectStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStore.h; sourceTree = "<group>"; };
+ C585A6BA11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreImpl.cpp; sourceTree = "<group>"; };
+ C585A6BB11D4FB3D004C3E4B /* IDBObjectStoreImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreImpl.h; sourceTree = "<group>"; };
+ C585A6BC11D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreRequest.cpp; sourceTree = "<group>"; };
+ C585A6BD11D4FB3D004C3E4B /* IDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreRequest.h; sourceTree = "<group>"; };
+ C585A6BE11D4FB3D004C3E4B /* IDBObjectStoreRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBObjectStoreRequest.idl; sourceTree = "<group>"; };
+ C585A6BF11D4FB3D004C3E4B /* IDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBRequest.cpp; sourceTree = "<group>"; };
+ C585A6C011D4FB3D004C3E4B /* IDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBRequest.h; sourceTree = "<group>"; };
+ C585A6C111D4FB3D004C3E4B /* IDBRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBRequest.idl; sourceTree = "<group>"; };
+ C585A6C211D4FB3D004C3E4B /* IDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSuccessEvent.cpp; sourceTree = "<group>"; };
+ C585A6C311D4FB3D004C3E4B /* IDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSuccessEvent.h; sourceTree = "<group>"; };
+ C585A6C411D4FB3D004C3E4B /* IDBSuccessEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBSuccessEvent.idl; sourceTree = "<group>"; };
+ C585A6C511D4FB3D004C3E4B /* IndexedDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabase.cpp; sourceTree = "<group>"; };
+ C585A6C611D4FB3D004C3E4B /* IndexedDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabase.h; sourceTree = "<group>"; };
+ C585A6C711D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseImpl.cpp; sourceTree = "<group>"; };
+ C585A6C811D4FB3D004C3E4B /* IndexedDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseImpl.h; sourceTree = "<group>"; };
+ C585A6C911D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseRequest.cpp; sourceTree = "<group>"; };
+ C585A6CA11D4FB3D004C3E4B /* IndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseRequest.h; sourceTree = "<group>"; };
+ C585A6CB11D4FB3D004C3E4B /* IndexedDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IndexedDatabaseRequest.idl; sourceTree = "<group>"; };
C5D4AA78116BAFB60069CA93 /* GlyphMetricsMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlyphMetricsMap.h; sourceTree = "<group>"; };
C5E9B67610697E1300C7BB1A /* StorageEventDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageEventDispatcher.cpp; sourceTree = "<group>"; };
C5EBDD81105EDDEC0056816F /* StorageEventDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageEventDispatcher.h; sourceTree = "<group>"; };
- C5F4F3FE119306AC00FDFADD /* JSIDBDatabaseError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseError.cpp; sourceTree = "<group>"; };
- C5F4F3FF119306AC00FDFADD /* JSIDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseError.h; sourceTree = "<group>"; };
- C5F4F400119306AC00FDFADD /* JSIDBDatabaseException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseException.cpp; sourceTree = "<group>"; };
- C5F4F401119306AC00FDFADD /* JSIDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseException.h; sourceTree = "<group>"; };
- C5F4F402119306AC00FDFADD /* JSIDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseRequest.cpp; sourceTree = "<group>"; };
- C5F4F403119306AC00FDFADD /* JSIDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseRequest.h; sourceTree = "<group>"; };
- C5F4F404119306AC00FDFADD /* JSIDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBRequest.cpp; sourceTree = "<group>"; };
- C5F4F405119306AC00FDFADD /* JSIDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBRequest.h; sourceTree = "<group>"; };
- C5F4F40E119306C000FDFADD /* JSIndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIndexedDatabaseRequest.cpp; sourceTree = "<group>"; };
- C5F4F40F119306C000FDFADD /* JSIndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIndexedDatabaseRequest.h; sourceTree = "<group>"; };
C6D74AD309AA282E000B0A52 /* ModifySelectionListLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModifySelectionListLevel.h; sourceTree = "<group>"; };
C6D74AE309AA290A000B0A52 /* ModifySelectionListLevel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModifySelectionListLevel.cpp; sourceTree = "<group>"; };
+ CE02F0C311E83ADD00C6684A /* ScriptControllerBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptControllerBase.h; sourceTree = "<group>"; };
CE172E001136E8CE0062A533 /* ZoomMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZoomMode.h; sourceTree = "<group>"; };
CE4C00E310F6F7BA00CA38F5 /* HTMLNoScriptElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLNoScriptElement.cpp; sourceTree = "<group>"; };
CE4C00E510F6F7C100CA38F5 /* HTMLNoScriptElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNoScriptElement.h; sourceTree = "<group>"; };
@@ -10774,7 +10838,6 @@
F587866202DE3B1101EA4122 /* SSLKeyGenerator.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = SSLKeyGenerator.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F587868402DE3B8601EA4122 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F587869902DE3B8601EA4122 /* DeprecatedPtrList.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = DeprecatedPtrList.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- F58EF58E02DFDFB7018635CA /* WebCore.base.exp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.exports; path = WebCore.base.exp; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
F5C041D70FFCA7CE00839D4A /* HTMLDataListElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLDataListElement.cpp; sourceTree = "<group>"; };
F5C041D80FFCA7CE00839D4A /* HTMLDataListElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLDataListElement.h; sourceTree = "<group>"; };
F5C041D90FFCA7CE00839D4A /* HTMLDataListElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLDataListElement.idl; sourceTree = "<group>"; };
@@ -10822,8 +10885,6 @@
FABE72FC1059C21100D999DD /* MathMLNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLNames.cpp; sourceTree = "<group>"; };
FAC12CC21120DA6900DACC36 /* RenderMathMLSubSup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLSubSup.cpp; sourceTree = "<group>"; };
FAC12CC31120DA6900DACC36 /* RenderMathMLSubSup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLSubSup.h; sourceTree = "<group>"; };
- FE136AE710643BE50078CF6D /* WebCore.OrientationEvents.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.OrientationEvents.exp; sourceTree = "<group>"; };
- FE49BD301061719100D0E1AE /* WebCore.Inspector.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.Inspector.exp; sourceTree = "<group>"; };
FE49EF970DC51462004266E1 /* DashboardSupportCSSPropertyNames.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DashboardSupportCSSPropertyNames.in; sourceTree = "<group>"; };
FE6FD4850F676E5700092873 /* Coordinates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Coordinates.h; sourceTree = "<group>"; };
FE6FD4860F676E5700092873 /* Coordinates.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Coordinates.idl; sourceTree = "<group>"; };
@@ -10851,11 +10912,16 @@
FE80DA620E9C4703000D6F75 /* JSGeoposition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGeoposition.h; sourceTree = "<group>"; };
FE80DA6D0E9C472F000D6F75 /* JSPositionError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPositionError.cpp; sourceTree = "<group>"; };
FE80DA6E0E9C472F000D6F75 /* JSPositionError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPositionError.h; sourceTree = "<group>"; };
- FEA4133F105D67AE0007236F /* WebCore.DragSupport.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.DragSupport.exp; sourceTree = "<group>"; };
- FEFD102C105C41470002855E /* WebCore.ContextMenus.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.ContextMenus.exp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 5D87BB4D11E3EAEB00702B6F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
93F19B1208245E59001E9ABC /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -10880,6 +10946,7 @@
isa = PBXGroup;
children = (
93F19B1A08245E5A001E9ABC /* WebCore.framework */,
+ 5D87BB4F11E3EAEB00702B6F /* WebCoreExportFileGenerator */,
);
name = Products;
sourceTree = SOURCE_ROOT;
@@ -11192,60 +11259,58 @@
1AD51A130CB59CD300953D11 /* DatabaseTracker.cpp */,
1AD51A120CB59CD300953D11 /* DatabaseTracker.h */,
51FAFE330CECBF2D00BB3F24 /* DatabaseTrackerClient.h */,
- C56C914F119D84CB00DE4CD9 /* IDBAny.cpp */,
- C56C9150119D84CB00DE4CD9 /* IDBAny.h */,
- C56C9151119D84CB00DE4CD9 /* IDBAny.idl */,
- C5198F381192ECFD002B74A6 /* IDBCallbacks.h */,
- C5198F3A1192ECFD002B74A6 /* IDBDatabase.h */,
- C5198F3B1192ECFD002B74A6 /* IDBDatabaseError.h */,
- C5198F3C1192ECFD002B74A6 /* IDBDatabaseError.idl */,
- C5198F3D1192ECFD002B74A6 /* IDBDatabaseException.h */,
- C5198F3E1192ECFD002B74A6 /* IDBDatabaseException.idl */,
- C50AD2A911AC1631008CF2FB /* IDBDatabaseImpl.cpp */,
- C50AD2AA11AC1631008CF2FB /* IDBDatabaseImpl.h */,
- C5198F3F1192ECFD002B74A6 /* IDBDatabaseRequest.cpp */,
- C5198F401192ECFD002B74A6 /* IDBDatabaseRequest.h */,
- C5198F411192ECFD002B74A6 /* IDBDatabaseRequest.idl */,
- C56C9159119D84E600DE4CD9 /* IDBErrorEvent.cpp */,
- C56C915A119D84E600DE4CD9 /* IDBErrorEvent.h */,
- C56C915B119D84E600DE4CD9 /* IDBErrorEvent.idl */,
- C56C915C119D84E600DE4CD9 /* IDBEvent.cpp */,
- C56C915D119D84E600DE4CD9 /* IDBEvent.h */,
- C56C915E119D84E600DE4CD9 /* IDBEvent.idl */,
- C51DA99F11AEF2C1009799C5 /* IDBIndex.h */,
- C51DA9A011AEF2C1009799C5 /* IDBIndexImpl.cpp */,
- C51DA9A111AEF2C1009799C5 /* IDBIndexImpl.h */,
- C51DA9A211AEF2C1009799C5 /* IDBIndexRequest.cpp */,
- C51DA9A311AEF2C1009799C5 /* IDBIndexRequest.h */,
- C51DA9A411AEF2C1009799C5 /* IDBIndexRequest.idl */,
- 816C806611BE887E009A45E9 /* IDBKeyRange.cpp */,
- 816C806711BE887E009A45E9 /* IDBKeyRange.h */,
- 81CC114011BEAA9D00D0D856 /* IDBKeyRange.idl */,
- B6693EE811AD63E6003F2770 /* IDBObjectStore.h */,
- B6693EE811AD63E6003F2770 /* IDBObjectStore.h */,
- B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */,
- B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */,
- B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */,
- B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */,
- B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */,
- B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */,
- B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */,
- B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */,
- B6693EEF11AD63F6003F2770 /* IDBObjectStoreRequest.idl */,
- B6693EEF11AD63F6003F2770 /* IDBObjectStoreRequest.idl */,
- C5198F421192ECFD002B74A6 /* IDBRequest.cpp */,
- C5198F431192ECFD002B74A6 /* IDBRequest.h */,
- C5198F441192ECFD002B74A6 /* IDBRequest.idl */,
- C56C9165119D84FF00DE4CD9 /* IDBSuccessEvent.cpp */,
- C56C9166119D84FF00DE4CD9 /* IDBSuccessEvent.h */,
- C56C9167119D84FF00DE4CD9 /* IDBSuccessEvent.idl */,
- C5198F451192ECFD002B74A6 /* IndexedDatabase.cpp */,
- C5198F461192ECFD002B74A6 /* IndexedDatabase.h */,
- C5198F471192ECFD002B74A6 /* IndexedDatabaseImpl.cpp */,
- C5198F481192ECFD002B74A6 /* IndexedDatabaseImpl.h */,
- C5198F491192ECFD002B74A6 /* IndexedDatabaseRequest.cpp */,
- C5198F4A1192ECFD002B74A6 /* IndexedDatabaseRequest.h */,
- C5198F4B1192ECFD002B74A6 /* IndexedDatabaseRequest.idl */,
+ C585A69811D4FB3D004C3E4B /* IDBAny.cpp */,
+ C585A69911D4FB3D004C3E4B /* IDBAny.h */,
+ C585A69A11D4FB3D004C3E4B /* IDBAny.idl */,
+ C585A69B11D4FB3D004C3E4B /* IDBCallbacks.h */,
+ C585A69C11D4FB3D004C3E4B /* IDBDatabase.h */,
+ C585A69D11D4FB3D004C3E4B /* IDBDatabaseError.h */,
+ C585A69E11D4FB3D004C3E4B /* IDBDatabaseError.idl */,
+ C585A69F11D4FB3D004C3E4B /* IDBDatabaseException.h */,
+ C585A6A011D4FB3D004C3E4B /* IDBDatabaseException.idl */,
+ C585A6A111D4FB3D004C3E4B /* IDBDatabaseImpl.cpp */,
+ C585A6A211D4FB3D004C3E4B /* IDBDatabaseImpl.h */,
+ C585A6A311D4FB3D004C3E4B /* IDBDatabaseRequest.cpp */,
+ C585A6A411D4FB3D004C3E4B /* IDBDatabaseRequest.h */,
+ C585A6A511D4FB3D004C3E4B /* IDBDatabaseRequest.idl */,
+ C585A6A611D4FB3D004C3E4B /* IDBErrorEvent.cpp */,
+ C585A6A711D4FB3D004C3E4B /* IDBErrorEvent.h */,
+ C585A6A811D4FB3D004C3E4B /* IDBErrorEvent.idl */,
+ C585A6A911D4FB3D004C3E4B /* IDBEvent.cpp */,
+ C585A6AA11D4FB3D004C3E4B /* IDBEvent.h */,
+ C585A6AB11D4FB3D004C3E4B /* IDBEvent.idl */,
+ C585A6AC11D4FB3D004C3E4B /* IDBIndex.h */,
+ C585A6AD11D4FB3D004C3E4B /* IDBIndexImpl.cpp */,
+ C585A6AE11D4FB3D004C3E4B /* IDBIndexImpl.h */,
+ C585A6AF11D4FB3D004C3E4B /* IDBIndexRequest.cpp */,
+ C585A6B011D4FB3D004C3E4B /* IDBIndexRequest.h */,
+ C585A6B111D4FB3D004C3E4B /* IDBIndexRequest.idl */,
+ C585A6B211D4FB3D004C3E4B /* IDBKey.cpp */,
+ C585A6B311D4FB3D004C3E4B /* IDBKey.h */,
+ C585A6B411D4FB3D004C3E4B /* IDBKey.idl */,
+ C585A6B511D4FB3D004C3E4B /* IDBKeyRange.cpp */,
+ C585A6B611D4FB3D004C3E4B /* IDBKeyRange.h */,
+ C585A6B711D4FB3D004C3E4B /* IDBKeyRange.idl */,
+ C585A6B811D4FB3D004C3E4B /* IDBKeyTree.h */,
+ C585A6B911D4FB3D004C3E4B /* IDBObjectStore.h */,
+ C585A6BA11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp */,
+ C585A6BB11D4FB3D004C3E4B /* IDBObjectStoreImpl.h */,
+ C585A6BC11D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp */,
+ C585A6BD11D4FB3D004C3E4B /* IDBObjectStoreRequest.h */,
+ C585A6BE11D4FB3D004C3E4B /* IDBObjectStoreRequest.idl */,
+ C585A6BF11D4FB3D004C3E4B /* IDBRequest.cpp */,
+ C585A6C011D4FB3D004C3E4B /* IDBRequest.h */,
+ C585A6C111D4FB3D004C3E4B /* IDBRequest.idl */,
+ C585A6C211D4FB3D004C3E4B /* IDBSuccessEvent.cpp */,
+ C585A6C311D4FB3D004C3E4B /* IDBSuccessEvent.h */,
+ C585A6C411D4FB3D004C3E4B /* IDBSuccessEvent.idl */,
+ C585A6C511D4FB3D004C3E4B /* IndexedDatabase.cpp */,
+ C585A6C611D4FB3D004C3E4B /* IndexedDatabase.h */,
+ C585A6C711D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp */,
+ C585A6C811D4FB3D004C3E4B /* IndexedDatabaseImpl.h */,
+ C585A6C911D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp */,
+ C585A6CA11D4FB3D004C3E4B /* IndexedDatabaseRequest.h */,
+ C585A6CB11D4FB3D004C3E4B /* IndexedDatabaseRequest.idl */,
511F23130DC160DA004F0032 /* LocalStorageTask.cpp */,
511F23140DC160DA004F0032 /* LocalStorageTask.h */,
511F23150DC160DA004F0032 /* LocalStorageThread.cpp */,
@@ -11329,6 +11394,8 @@
9FA37EF71172FD9300C4CD55 /* JSScriptProfile.h */,
9FA37EF81172FD9300C4CD55 /* JSScriptProfileNode.cpp */,
9FA37EF91172FD9300C4CD55 /* JSScriptProfileNode.h */,
+ 4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend2.cpp */,
+ 4F4F5FFC11CBD30100A186BF /* RemoteInspectorFrontend2.h */,
);
name = Inspector;
sourceTree = "<group>";
@@ -11344,6 +11411,8 @@
7A0E76F610BF08ED00A0276E /* InjectedScriptHost.cpp */,
7A0E76F710BF08ED00A0276E /* InjectedScriptHost.h */,
7A0E76F810BF08ED00A0276E /* InjectedScriptHost.idl */,
+ B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */,
+ B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */,
7A74ECB8101839A500BF939E /* InspectorBackend.cpp */,
7A74ECB9101839A600BF939E /* InspectorBackend.h */,
7A74ECB61018399A00BF939E /* InspectorBackend.idl */,
@@ -11560,26 +11629,8 @@
449195900FBE175B00D9F824 /* Exports */ = {
isa = PBXGroup;
children = (
- 0F9C6F4B1073EF0400DED9BF /* WebCore.3DRendering.exp */,
- 0F5263E511DC136E0006D33C /* WebCore.AcceleratedCompositing.exp */,
- F58EF58E02DFDFB7018635CA /* WebCore.base.exp */,
- BC56CCDF10D72BD800A77C64 /* WebCore.ClientBasedGeolocation.exp */,
- FEFD102C105C41470002855E /* WebCore.ContextMenus.exp */,
- 4491959D0FBE17D700D9F824 /* WebCore.DashboardSupport.exp */,
- FEA4133F105D67AE0007236F /* WebCore.DragSupport.exp */,
- FE49BD301061719100D0E1AE /* WebCore.Inspector.exp */,
- 4491959C0FBE17D700D9F824 /* WebCore.JNI.exp */,
- 4491959A0FBE17D700D9F824 /* WebCore.NPAPI.exp */,
- FE136AE710643BE50078CF6D /* WebCore.OrientationEvents.exp */,
- 4491959B0FBE17D700D9F824 /* WebCore.PluginHostProcess.exp */,
- 271245D311890AB70083E852 /* WebCore.ProtectionSpaceAuthCallback.exp */,
- 449195990FBE17D700D9F824 /* WebCore.SVG.Animation.exp */,
- 449195980FBE17D700D9F824 /* WebCore.SVG.exp */,
- 449195970FBE17D700D9F824 /* WebCore.SVG.Filters.exp */,
- 449195960FBE17D700D9F824 /* WebCore.SVG.ForeignObject.exp */,
- 449195950FBE17D700D9F824 /* WebCore.Tiger.exp */,
- 63F371CD100E790000BBA87A /* WebCore.Video.exp */,
- 449195940FBE17D700D9F824 /* WebCore.VideoProxy.exp */,
+ 5D87BB8211E3ED8600702B6F /* ExportFileGenerator.cpp */,
+ 5D4B8C5211E52C8B00BBB62F /* WebCore.exp.in */,
);
name = Exports;
sourceTree = "<group>";
@@ -11861,8 +11912,12 @@
children = (
9363B6290F8E8FE000803810 /* cf */,
5160F4920B0AA71500C1D2AF /* mac */,
- 51741D0C0B07259A00ED442C /* BackForwardList.cpp */,
51741D0B0B07259A00ED442C /* BackForwardList.h */,
+ BCA8CA5D11E4E6D100812FB7 /* BackForwardListImpl.cpp */,
+ BCA8CA5E11E4E6D100812FB7 /* BackForwardListImpl.h */,
+ BCA8C81D11E3D36900812FB7 /* BackForwardController.cpp */,
+ BCA8C81C11E3D36900812FB7 /* BackForwardController.h */,
+ BCA8C83011E3D53200812FB7 /* BackForwardControllerClient.h */,
51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */,
51C0AA380F2AA10A001648C2 /* CachedFrame.h */,
51CBFC980D10E483002DBF51 /* CachedFramePlatformData.h */,
@@ -11949,19 +12004,19 @@
isa = PBXGroup;
children = (
0AFDAC3610F5447400E1F3D2 /* mac */,
- A9C6E4E10D745E05006442E9 /* MimeType.cpp */,
- A9C6E4E20D745E05006442E9 /* MimeType.h */,
- A9C6E65E0D7466F2006442E9 /* MimeType.idl */,
- A9C6E4E50D745E18006442E9 /* MimeTypeArray.cpp */,
- A9C6E4E60D745E18006442E9 /* MimeTypeArray.h */,
- A9C6E65F0D746700006442E9 /* MimeTypeArray.idl */,
+ A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */,
+ A9C6E4E20D745E05006442E9 /* DOMMimeType.h */,
+ A9C6E65E0D7466F2006442E9 /* DOMMimeType.idl */,
+ A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */,
+ A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */,
+ A9C6E65F0D746700006442E9 /* DOMMimeTypeArray.idl */,
+ A9C6E4E90D745E2B006442E9 /* DOMPlugin.cpp */,
+ A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */,
+ A9C6E6600D74670C006442E9 /* DOMPlugin.idl */,
1A219B3A0DCA87AB0040E3A0 /* npfunctions.h */,
- A9C6E4E90D745E2B006442E9 /* Plugin.cpp */,
- A9C6E4EA0D745E2B006442E9 /* Plugin.h */,
- A9C6E6600D74670C006442E9 /* Plugin.idl */,
- A9C6E4ED0D745E38006442E9 /* PluginArray.cpp */,
- A9C6E4EE0D745E38006442E9 /* PluginArray.h */,
- A9C6E6610D74671E006442E9 /* PluginArray.idl */,
+ A9C6E4ED0D745E38006442E9 /* DOMPluginArray.cpp */,
+ A9C6E4EE0D745E38006442E9 /* DOMPluginArray.h */,
+ A9C6E6610D74671E006442E9 /* DOMPluginArray.idl */,
A9C6E4F10D745E48006442E9 /* PluginData.cpp */,
A9C6E4F20D745E48006442E9 /* PluginData.h */,
1ADA140E0E1AE5D900023EE5 /* PluginMainThreadScheduler.cpp */,
@@ -12281,6 +12336,7 @@
8AF4E55811DC5A63000ED3DE /* Timing.cpp */,
8AF4E55911DC5A63000ED3DE /* Timing.h */,
8AF4E55A11DC5A63000ED3DE /* Timing.idl */,
+ 003F1FE911E6AB43008258D9 /* UserContentTypes.h */,
BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */,
BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */,
BCA2B0601050475F0043BD1C /* UserScript.h */,
@@ -13664,6 +13720,8 @@
1A494E290A12354300FDAFC1 /* HTMLDocument.idl */,
A871038811A2947000DBD50E /* HTMLDocumentParser.cpp */,
A871038911A2947000DBD50E /* HTMLDocumentParser.h */,
+ 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */,
+ 97EF560F11E40783007E026F /* HTMLConstructionSite.h */,
F523D23E02DE4396018635CA /* HTMLElement.cpp */,
F523D23F02DE4396018635CA /* HTMLElement.h */,
1A494BBB0A122DCD00FDAFC1 /* HTMLElement.idl */,
@@ -14639,30 +14697,32 @@
B59DD697119029E5007E9684 /* JSDatabaseCallback.h */,
B58CEB6811913607002A6790 /* JSDatabaseSync.cpp */,
B58CEB6711913607002A6790 /* JSDatabaseSync.h */,
- C56C9198119D915300DE4CD9 /* JSIDBAny.cpp */,
- C56C9199119D915300DE4CD9 /* JSIDBAny.h */,
- C5F4F3FE119306AC00FDFADD /* JSIDBDatabaseError.cpp */,
- C5F4F3FF119306AC00FDFADD /* JSIDBDatabaseError.h */,
- C5F4F400119306AC00FDFADD /* JSIDBDatabaseException.cpp */,
- C5F4F401119306AC00FDFADD /* JSIDBDatabaseException.h */,
- C5F4F402119306AC00FDFADD /* JSIDBDatabaseRequest.cpp */,
- C5F4F403119306AC00FDFADD /* JSIDBDatabaseRequest.h */,
- C56C919C119D918100DE4CD9 /* JSIDBErrorEvent.cpp */,
- C56C919D119D918100DE4CD9 /* JSIDBErrorEvent.h */,
- C56C919E119D918100DE4CD9 /* JSIDBEvent.cpp */,
- C56C919F119D918100DE4CD9 /* JSIDBEvent.h */,
- C5BBC9CE11AEF838007C2BFE /* JSIDBIndexRequest.cpp */,
- C5BBC9CF11AEF838007C2BFE /* JSIDBIndexRequest.h */,
- 816C80B011BE9934009A45E9 /* JSIDBKeyRange.cpp */,
- 816C80AE11BE990D009A45E9 /* JSIDBKeyRange.h */,
- B6693EF011AD6486003F2770 /* JSIDBObjectStoreRequest.cpp */,
- B6693EF111AD6486003F2770 /* JSIDBObjectStoreRequest.h */,
- C5F4F404119306AC00FDFADD /* JSIDBRequest.cpp */,
- C5F4F405119306AC00FDFADD /* JSIDBRequest.h */,
- C56C91A4119D918700DE4CD9 /* JSIDBSuccessEvent.cpp */,
- C56C91A5119D918700DE4CD9 /* JSIDBSuccessEvent.h */,
- C5F4F40E119306C000FDFADD /* JSIndexedDatabaseRequest.cpp */,
- C5F4F40F119306C000FDFADD /* JSIndexedDatabaseRequest.h */,
+ C585A66411D4FB07004C3E4B /* JSIDBAny.cpp */,
+ C585A66511D4FB07004C3E4B /* JSIDBAny.h */,
+ C585A66611D4FB07004C3E4B /* JSIDBDatabaseError.cpp */,
+ C585A66711D4FB07004C3E4B /* JSIDBDatabaseError.h */,
+ C585A66811D4FB07004C3E4B /* JSIDBDatabaseException.cpp */,
+ C585A66911D4FB07004C3E4B /* JSIDBDatabaseException.h */,
+ C585A66A11D4FB07004C3E4B /* JSIDBDatabaseRequest.cpp */,
+ C585A66B11D4FB07004C3E4B /* JSIDBDatabaseRequest.h */,
+ C585A66C11D4FB07004C3E4B /* JSIDBErrorEvent.cpp */,
+ C585A66D11D4FB07004C3E4B /* JSIDBErrorEvent.h */,
+ C585A66E11D4FB07004C3E4B /* JSIDBEvent.cpp */,
+ C585A66F11D4FB07004C3E4B /* JSIDBEvent.h */,
+ C585A67011D4FB07004C3E4B /* JSIDBIndexRequest.cpp */,
+ C585A67111D4FB07004C3E4B /* JSIDBIndexRequest.h */,
+ C585A67211D4FB07004C3E4B /* JSIDBKey.cpp */,
+ C585A67311D4FB07004C3E4B /* JSIDBKey.h */,
+ C585A67411D4FB07004C3E4B /* JSIDBKeyRange.cpp */,
+ C585A67511D4FB07004C3E4B /* JSIDBKeyRange.h */,
+ C585A67611D4FB07004C3E4B /* JSIDBObjectStoreRequest.cpp */,
+ C585A67711D4FB07004C3E4B /* JSIDBObjectStoreRequest.h */,
+ C585A67811D4FB07004C3E4B /* JSIDBRequest.cpp */,
+ C585A67911D4FB07004C3E4B /* JSIDBRequest.h */,
+ C585A67A11D4FB07004C3E4B /* JSIDBSuccessEvent.cpp */,
+ C585A67B11D4FB07004C3E4B /* JSIDBSuccessEvent.h */,
+ C585A69411D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp */,
+ C585A69511D4FB13004C3E4B /* JSIndexedDatabaseRequest.h */,
514C76350CE9225E007EF3CD /* JSSQLError.cpp */,
BC8243250D0CE8A200460C8F /* JSSQLError.h */,
B525A96411CA2340003A23A8 /* JSSQLException.cpp */,
@@ -14717,14 +14777,14 @@
A9D247F90D757E4100FDF959 /* Plugins */ = {
isa = PBXGroup;
children = (
- A9D248020D757E7D00FDF959 /* JSMimeType.cpp */,
- A9D248030D757E7D00FDF959 /* JSMimeType.h */,
- A9D248040D757E7D00FDF959 /* JSMimeTypeArray.cpp */,
- A9D248050D757E7D00FDF959 /* JSMimeTypeArray.h */,
- A9D247FA0D757E6900FDF959 /* JSPlugin.cpp */,
- A9D247FB0D757E6900FDF959 /* JSPlugin.h */,
- A9D247FC0D757E6900FDF959 /* JSPluginArray.cpp */,
- A9D247FD0D757E6900FDF959 /* JSPluginArray.h */,
+ A9D248020D757E7D00FDF959 /* JSDOMMimeType.cpp */,
+ A9D248030D757E7D00FDF959 /* JSDOMMimeType.h */,
+ A9D248040D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp */,
+ A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */,
+ A9D247FA0D757E6900FDF959 /* JSDOMPlugin.cpp */,
+ A9D247FB0D757E6900FDF959 /* JSDOMPlugin.h */,
+ A9D247FC0D757E6900FDF959 /* JSDOMPluginArray.cpp */,
+ A9D247FD0D757E6900FDF959 /* JSDOMPluginArray.h */,
);
name = Plugins;
sourceTree = "<group>";
@@ -15512,6 +15572,7 @@
14813BF309EDF88E00F757E1 /* IDLParser.pm */,
93F8B3080A300FEA00F61AB8 /* IDLStructure.pm */,
97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */,
+ CE02F0C311E83ADD00C6684A /* ScriptControllerBase.h */,
);
path = bindings;
sourceTree = "<group>";
@@ -15533,6 +15594,8 @@
BC53DA2D1143121E000D817E /* DOMWrapperWorld.h */,
1432E8480C51493F00B1500F /* GCController.cpp */,
1432E8460C51493800B1500F /* GCController.h */,
+ C585A66011D4FAC5004C3E4B /* IDBBindingUtilities.cpp */,
+ C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */,
1C81BA030E97348300266E07 /* JavaScriptCallFrame.cpp */,
1C81BA040E97348300266E07 /* JavaScriptCallFrame.h */,
BC53DAC411432FD9000D817E /* JSDebugWrapperSet.cpp */,
@@ -15678,6 +15741,9 @@
49C7BA8C1042F5B10009D447 /* JSDocumentCustom.cpp */,
1AC226160DB69F740089B669 /* JSDOMApplicationCacheCustom.cpp */,
2E0888E5114884E200AF4265 /* JSDOMFormDataCustom.cpp */,
+ A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */,
+ A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */,
+ A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */,
BC64649B11D8238C006455B0 /* JSDOMStringMapCustom.cpp */,
BCD9C25E0C17AA67005C90A2 /* JSDOMWindowCustom.cpp */,
652FBBBB0DE27CB60001D386 /* JSDOMWindowCustom.h */,
@@ -15703,7 +15769,8 @@
448AD27A0A4813790023D179 /* JSHTMLOptionsCollectionCustom.cpp */,
BC17F9650B64EBB8004A65CB /* JSHTMLSelectElementCustom.cpp */,
AB4CB4EA0B8BDA3D009F40B0 /* JSHTMLSelectElementCustom.h */,
- C56C914D119D849800DE4CD9 /* JSIDBAnyCustom.cpp */,
+ C585A65C11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp */,
+ C585A65D11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp */,
A7D0318D0E93540300E24ACD /* JSImageDataCustom.cpp */,
7A0E76D410BF050700A0276E /* JSInjectedScriptHostCustom.cpp */,
7A74ECBC101839DA00BF939E /* JSInspectorFrontendHostCustom.cpp */,
@@ -15716,7 +15783,6 @@
410B7E711045FAB000D8224F /* JSMessageEventCustom.cpp */,
E1ADED460E76B8DD004A1A5E /* JSMessagePortCustom.cpp */,
41F584C6104652CB009CAA64 /* JSMessagePortCustom.h */,
- A9C6E6460D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp */,
BCD9C25F0C17AA67005C90A2 /* JSNamedNodeMapCustom.cpp */,
A9C6E6480D7465D8006442E9 /* JSNavigatorCustom.cpp */,
BCD9C2600C17AA67005C90A2 /* JSNodeCustom.cpp */,
@@ -15724,8 +15790,6 @@
BCB773600C17853D00132BA4 /* JSNodeFilterCustom.cpp */,
1A750DD30A90E729000FF215 /* JSNodeIteratorCustom.cpp */,
BCD9C2610C17AA67005C90A2 /* JSNodeListCustom.cpp */,
- A9C6E64A0D7465E7006442E9 /* JSPluginArrayCustom.cpp */,
- A9C6E64B0D7465E7006442E9 /* JSPluginCustom.cpp */,
5189F01710B3781300F3C739 /* JSPopStateEventCustom.cpp */,
9FA37EE61172FCF000C4CD55 /* JSScriptProfileNodeCustom.cpp */,
51DCE8010CAC9F1C00488358 /* JSSQLResultSetRowListCustom.cpp */,
@@ -15844,10 +15908,16 @@
BCE1C43A0D9830D3003B02F2 /* JSLocation.h */,
9FFE3EA311B5A4390037874E /* JSMemoryInfo.cpp */,
9FFE3EA411B5A4390037874E /* JSMemoryInfo.h */,
+ 8A9A586E11E84C35008ACFD1 /* JSNavigation.cpp */,
+ 8A9A586F11E84C36008ACFD1 /* JSNavigation.h */,
A9D247F50D757E3300FDF959 /* JSNavigator.cpp */,
A9D247F60D757E3300FDF959 /* JSNavigator.h */,
+ 8A9A587211E84C81008ACFD1 /* JSPerformance.cpp */,
+ 8A9A587311E84C81008ACFD1 /* JSPerformance.h */,
BCEC01C00C274DDD009F4EC9 /* JSScreen.cpp */,
BCEC01C10C274DDD009F4EC9 /* JSScreen.h */,
+ 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */,
+ 8A9A587711E84C98008ACFD1 /* JSTiming.h */,
494BD79B0F55C94C00747828 /* JSWebKitPoint.cpp */,
494BD79C0F55C94C00747828 /* JSWebKitPoint.h */,
);
@@ -16762,8 +16832,6 @@
AB23A32609BBA7D00067CC53 /* BeforeTextInsertedEvent.h */,
85031B260A44EFC700F992E0 /* BeforeUnloadEvent.cpp */,
85031B270A44EFC700F992E0 /* BeforeUnloadEvent.h */,
- 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */,
- 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */,
6550B693099DF0270090D781 /* CDATASection.cpp */,
6550B694099DF0270090D781 /* CDATASection.h */,
85089CC90A98C2AB00A275AA /* CDATASection.idl */,
@@ -16807,8 +16875,8 @@
BC64641A11D7F416006455B0 /* DatasetDOMStringMap.h */,
A8C228A011D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp */,
A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */,
- 59A8F1D311A69508001AC34A /* DeviceOrientation.cpp */,
- 59A8F1D511A69513001AC34A /* DeviceOrientation.h */,
+ 59A8F1D311A69508001AC34A /* DeviceOrientationController.cpp */,
+ 59A8F1D511A69513001AC34A /* DeviceOrientationController.h */,
59A8F1D711A69520001AC34A /* DeviceOrientationClient.h */,
59A85EA1119D68D900DEF1EF /* DeviceOrientationEvent.cpp */,
59A85EA3119D68EC00DEF1EF /* DeviceOrientationEvent.h */,
@@ -17171,7 +17239,6 @@
49C7B9DD1042D32F0009D447 /* CanvasRenderingContext.h in Headers */,
49484FCB102CF23C00187DD3 /* CanvasRenderingContext2D.h in Headers */,
49484FCE102CF23C00187DD3 /* CanvasStyle.h in Headers */,
- 0BC2C7781134A8FC000B2F61 /* CanvasSurface.h in Headers */,
6550B69E099DF0270090D781 /* CDATASection.h in Headers */,
514185EE0CD65F0400763C99 /* ChangeVersionWrapper.h in Headers */,
6550B6A0099DF0270090D781 /* CharacterData.h in Headers */,
@@ -17314,7 +17381,7 @@
93309DE1099E64920056E581 /* DeleteSelectionCommand.h in Headers */,
93F1998208245E59001E9ABC /* DeprecatedPtrList.h in Headers */,
93F1996D08245E59001E9ABC /* DeprecatedPtrListImpl.h in Headers */,
- 59A8F1D611A69513001AC34A /* DeviceOrientation.h in Headers */,
+ 59A8F1D611A69513001AC34A /* DeviceOrientationController.h in Headers */,
59A8F1D811A69520001AC34A /* DeviceOrientationClient.h in Headers */,
59A85EA4119D68EC00DEF1EF /* DeviceOrientationEvent.h in Headers */,
B2F34FE60E82F81400F627CD /* DNS.h in Headers */,
@@ -18316,29 +18383,6 @@
1A2D753D0DE47FAB00F0A648 /* IconFetcher.h in Headers */,
513F14540AB634C400094DDF /* IconLoader.h in Headers */,
51E1ECC10C91C90400DC255B /* IconRecord.h in Headers */,
- C56C9153119D84CB00DE4CD9 /* IDBAny.h in Headers */,
- C5198F4C1192ECFD002B74A6 /* IDBCallbacks.h in Headers */,
- C5198F4E1192ECFD002B74A6 /* IDBDatabase.h in Headers */,
- C5198F4F1192ECFD002B74A6 /* IDBDatabaseError.h in Headers */,
- C5198F511192ECFD002B74A6 /* IDBDatabaseException.h in Headers */,
- C5198F541192ECFD002B74A6 /* IDBDatabaseRequest.h in Headers */,
- C56C9160119D84E600DE4CD9 /* IDBErrorEvent.h in Headers */,
- C56C9163119D84E600DE4CD9 /* IDBEvent.h in Headers */,
- C51DA9A511AEF2C1009799C5 /* IDBIndex.h in Headers */,
- C51DA9A511AEF2C1009799C5 /* IDBIndex.h in Headers */,
- C51DA9A711AEF2C1009799C5 /* IDBIndexImpl.h in Headers */,
- C51DA9A711AEF2C1009799C5 /* IDBIndexImpl.h in Headers */,
- C51DA9A911AEF2C1009799C5 /* IDBIndexRequest.h in Headers */,
- C51DA9A911AEF2C1009799C5 /* IDBIndexRequest.h in Headers */,
- 816C806911BE887E009A45E9 /* IDBKeyRange.h in Headers */,
- B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */,
- B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */,
- B6B0540A11B68F10002564C5 /* IDBObjectStoreImpl.h in Headers */,
- B6B0540A11B68F10002564C5 /* IDBObjectStoreImpl.h in Headers */,
- B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */,
- B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */,
- C5198F571192ECFD002B74A6 /* IDBRequest.h in Headers */,
- C56C9169119D84FF00DE4CD9 /* IDBSuccessEvent.h in Headers */,
1A71D57C0F33819000F9CE4E /* IdentifierRep.h in Headers */,
49E911C50EF86D47009D0CAF /* IdentityTransformOperation.h in Headers */,
C0C054CD1118C8E400CE2636 /* IDLParser.pm in Headers */,
@@ -18354,9 +18398,6 @@
4B3480940EEF50D400AC1B41 /* ImageSourceCG.h in Headers */,
316FE1180E6E1DA700BF6088 /* ImplicitAnimation.h in Headers */,
DB23C2CC0A508D29002489EB /* IndentOutdentCommand.h in Headers */,
- C5198F5A1192ECFD002B74A6 /* IndexedDatabase.h in Headers */,
- C5198F5C1192ECFD002B74A6 /* IndexedDatabaseImpl.h in Headers */,
- C5198F5E1192ECFD002B74A6 /* IndexedDatabaseRequest.h in Headers */,
F3644B001119805900E0D537 /* InjectedScript.h in Headers */,
7A0E76FA10BF08ED00A0276E /* InjectedScriptHost.h in Headers */,
A8CFF5E50A155A05000A4234 /* InlineBox.h in Headers */,
@@ -18569,22 +18610,8 @@
A80E7B0C0A19D606007FB8C5 /* JSHTMLTitleElement.h in Headers */,
1A85B2110A1B258700D8C87C /* JSHTMLUListElement.h in Headers */,
E44614170CD6826900FADA75 /* JSHTMLVideoElement.h in Headers */,
- C56C919B119D915300DE4CD9 /* JSIDBAny.h in Headers */,
- C5F4F407119306AC00FDFADD /* JSIDBDatabaseError.h in Headers */,
- C5F4F409119306AC00FDFADD /* JSIDBDatabaseException.h in Headers */,
- C5F4F40B119306AC00FDFADD /* JSIDBDatabaseRequest.h in Headers */,
- C56C91A1119D918100DE4CD9 /* JSIDBErrorEvent.h in Headers */,
- C56C91A3119D918100DE4CD9 /* JSIDBEvent.h in Headers */,
- C5BBC9D111AEF838007C2BFE /* JSIDBIndexRequest.h in Headers */,
- C5BBC9D111AEF838007C2BFE /* JSIDBIndexRequest.h in Headers */,
- 816C80AF11BE990D009A45E9 /* JSIDBKeyRange.h in Headers */,
- B6693EF311AD6486003F2770 /* JSIDBObjectStoreRequest.h in Headers */,
- B6693EF311AD6486003F2770 /* JSIDBObjectStoreRequest.h in Headers */,
- C5F4F40D119306AC00FDFADD /* JSIDBRequest.h in Headers */,
- C56C91A7119D918700DE4CD9 /* JSIDBSuccessEvent.h in Headers */,
BC6C49F40D7DBA0500FFA558 /* JSImageConstructor.h in Headers */,
A77979290D6B9E64003851B9 /* JSImageData.h in Headers */,
- C5F4F411119306C000FDFADD /* JSIndexedDatabaseRequest.h in Headers */,
7A0E76DB10BF059800A0276E /* JSInjectedScriptHost.h in Headers */,
41F060CE0F5EEB2B00A07EAC /* JSInspectorBackend.h in Headers */,
7A0E771F10C00DB100A0276E /* JSInspectorFrontendHost.h in Headers */,
@@ -18602,8 +18629,8 @@
75793EC90D0CE72D007FC0AC /* JSMessageEvent.h in Headers */,
E1ADEDDA0E76BD93004A1A5E /* JSMessagePort.h in Headers */,
41F584C7104652CB009CAA64 /* JSMessagePortCustom.h in Headers */,
- A9D248070D757E7D00FDF959 /* JSMimeType.h in Headers */,
- A9D248090D757E7D00FDF959 /* JSMimeTypeArray.h in Headers */,
+ A9D248070D757E7D00FDF959 /* JSDOMMimeType.h in Headers */,
+ A9D248090D757E7D00FDF959 /* JSDOMMimeTypeArray.h in Headers */,
A86629D109DA2B48009633A5 /* JSMouseEvent.h in Headers */,
65DF31FC09D1CC60000BE325 /* JSMutationEvent.h in Headers */,
BCD9C2C10C17B69E005C90A2 /* JSNamedNodeMap.h in Headers */,
@@ -18619,8 +18646,8 @@
A826E8AE0A1A8F2300CD1BB6 /* JSOptionConstructor.h in Headers */,
1A0D57410A5C7867007EDD4C /* JSOverflowEvent.h in Headers */,
E1284BB110449FFA00EAEB52 /* JSPageTransitionEvent.h in Headers */,
- A9D247FF0D757E6900FDF959 /* JSPlugin.h in Headers */,
- A9D248010D757E6900FDF959 /* JSPluginArray.h in Headers */,
+ A9D247FF0D757E6900FDF959 /* JSDOMPlugin.h in Headers */,
+ A9D248010D757E6900FDF959 /* JSDOMPluginArray.h in Headers */,
93B70D6C09EB0C7C009D8468 /* JSPluginElementFunctions.h in Headers */,
5189F01E10B37BD900F3C739 /* JSPopStateEvent.h in Headers */,
FE80DA720E9C472F000D6F75 /* JSPositionError.h in Headers */,
@@ -18892,8 +18919,8 @@
75793E840D0CE0B3007FC0AC /* MessageEvent.h in Headers */,
E1ADECBF0E76ACF1004A1A5E /* MessagePort.h in Headers */,
41BF700C0FE86F49005E8DEC /* MessagePortChannel.h in Headers */,
- A9C6E4E40D745E05006442E9 /* MimeType.h in Headers */,
- A9C6E4E80D745E18006442E9 /* MimeTypeArray.h in Headers */,
+ A9C6E4E40D745E05006442E9 /* DOMMimeType.h in Headers */,
+ A9C6E4E80D745E18006442E9 /* DOMMimeTypeArray.h in Headers */,
BC772C4F0C4EB3040083285F /* MIMETypeRegistry.h in Headers */,
C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */,
85031B460A44EFC700F992E0 /* MouseEvent.h in Headers */,
@@ -18977,8 +19004,8 @@
1AD8F81B11CAB9E900E93E54 /* PlatformStrategies.h in Headers */,
B2C3DA2B0D006C1D00EF6F26 /* PlatformString.h in Headers */,
935C476B09AC4D4F00A6AAB4 /* PlatformWheelEvent.h in Headers */,
- A9C6E4EC0D745E2B006442E9 /* Plugin.h in Headers */,
- A9C6E4F00D745E38006442E9 /* PluginArray.h in Headers */,
+ A9C6E4EC0D745E2B006442E9 /* DOMPlugin.h in Headers */,
+ A9C6E4F00D745E38006442E9 /* DOMPluginArray.h in Headers */,
A9C6E4F40D745E48006442E9 /* PluginData.h in Headers */,
1AC694C80A3B1676003F5049 /* PluginDocument.h in Headers */,
7693BAD4106C2DCA007B0823 /* PluginHalter.h in Headers */,
@@ -19694,12 +19721,76 @@
E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
CE172E011136E8CE0062A533 /* ZoomMode.h in Headers */,
+ B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */,
+ 97EF561111E40783007E026F /* HTMLConstructionSite.h in Headers */,
+ BCA8C81E11E3D36900812FB7 /* BackForwardController.h in Headers */,
+ BCA8C83111E3D53200812FB7 /* BackForwardControllerClient.h in Headers */,
+ BCA8CA6011E4E6D100812FB7 /* BackForwardListImpl.h in Headers */,
+ 003F1FEA11E6AB43008258D9 /* UserContentTypes.h in Headers */,
+ CE02F0C411E83ADD00C6684A /* ScriptControllerBase.h in Headers */,
+ 8A9A587111E84C36008ACFD1 /* JSNavigation.h in Headers */,
+ 8A9A587511E84C81008ACFD1 /* JSPerformance.h in Headers */,
+ 8A9A588811E84F37008ACFD1 /* JSTiming.h in Headers */,
+ C585A66311D4FAC5004C3E4B /* IDBBindingUtilities.h in Headers */,
+ C585A67D11D4FB08004C3E4B /* JSIDBAny.h in Headers */,
+ C585A67F11D4FB08004C3E4B /* JSIDBDatabaseError.h in Headers */,
+ C585A68111D4FB08004C3E4B /* JSIDBDatabaseException.h in Headers */,
+ C585A68311D4FB08004C3E4B /* JSIDBDatabaseRequest.h in Headers */,
+ C585A68511D4FB08004C3E4B /* JSIDBErrorEvent.h in Headers */,
+ C585A68711D4FB08004C3E4B /* JSIDBEvent.h in Headers */,
+ C585A68911D4FB08004C3E4B /* JSIDBIndexRequest.h in Headers */,
+ C585A68B11D4FB08004C3E4B /* JSIDBKey.h in Headers */,
+ C585A68D11D4FB08004C3E4B /* JSIDBKeyRange.h in Headers */,
+ C585A68F11D4FB08004C3E4B /* JSIDBObjectStoreRequest.h in Headers */,
+ C585A69111D4FB08004C3E4B /* JSIDBRequest.h in Headers */,
+ C585A69311D4FB08004C3E4B /* JSIDBSuccessEvent.h in Headers */,
+ C585A69711D4FB13004C3E4B /* JSIndexedDatabaseRequest.h in Headers */,
+ C585A6CD11D4FB3D004C3E4B /* IDBAny.h in Headers */,
+ C585A6CF11D4FB3D004C3E4B /* IDBCallbacks.h in Headers */,
+ C585A6D011D4FB3D004C3E4B /* IDBDatabase.h in Headers */,
+ C585A6D111D4FB3D004C3E4B /* IDBDatabaseError.h in Headers */,
+ C585A6D311D4FB3D004C3E4B /* IDBDatabaseException.h in Headers */,
+ C585A6D611D4FB3D004C3E4B /* IDBDatabaseImpl.h in Headers */,
+ C585A6D811D4FB3D004C3E4B /* IDBDatabaseRequest.h in Headers */,
+ C585A6DB11D4FB3D004C3E4B /* IDBErrorEvent.h in Headers */,
+ C585A6DE11D4FB3D004C3E4B /* IDBEvent.h in Headers */,
+ C585A6E011D4FB3D004C3E4B /* IDBIndex.h in Headers */,
+ C585A6E211D4FB3D004C3E4B /* IDBIndexImpl.h in Headers */,
+ C585A6E411D4FB3D004C3E4B /* IDBIndexRequest.h in Headers */,
+ C585A6E711D4FB3D004C3E4B /* IDBKey.h in Headers */,
+ C585A6EA11D4FB3D004C3E4B /* IDBKeyRange.h in Headers */,
+ C585A6EC11D4FB3D004C3E4B /* IDBKeyTree.h in Headers */,
+ C585A6ED11D4FB3D004C3E4B /* IDBObjectStore.h in Headers */,
+ C585A6EF11D4FB3D004C3E4B /* IDBObjectStoreImpl.h in Headers */,
+ C585A6F111D4FB3D004C3E4B /* IDBObjectStoreRequest.h in Headers */,
+ C585A6F411D4FB3D004C3E4B /* IDBRequest.h in Headers */,
+ C585A6F711D4FB3D004C3E4B /* IDBSuccessEvent.h in Headers */,
+ C585A6FA11D4FB3D004C3E4B /* IndexedDatabase.h in Headers */,
+ C585A6FC11D4FB3D004C3E4B /* IndexedDatabaseImpl.h in Headers */,
+ C585A6FE11D4FB3D004C3E4B /* IndexedDatabaseRequest.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
+ 5D87BB4E11E3EAEB00702B6F /* WebCoreExportFileGenerator */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 5D87BB5911E3EB0700702B6F /* Build configuration list for PBXNativeTarget "WebCoreExportFileGenerator" */;
+ buildPhases = (
+ 5D87BB4C11E3EAEB00702B6F /* Sources */,
+ 5D87BB4D11E3EAEB00702B6F /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 5D87BB6B11E3EBD200702B6F /* PBXTargetDependency */,
+ );
+ name = WebCoreExportFileGenerator;
+ productName = WebCoreExportFileGenerator;
+ productReference = 5D87BB4F11E3EAEB00702B6F /* WebCoreExportFileGenerator */;
+ productType = "com.apple.product-type.tool";
+ };
93F198A508245E59001E9ABC /* WebCore */ = {
isa = PBXNativeTarget;
buildConfigurationList = 149C283908902B11008A9EFC /* Build configuration list for PBXNativeTarget "WebCore" */;
@@ -19707,7 +19798,7 @@
5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */,
93F198A608245E59001E9ABC /* Headers */,
1C11CCB40AA6093700DADB20 /* Copy Generated Headers */,
- 1CC93C640DAE929600E4BC3A /* Copy Forwarding and ICU Headers */,
+ 5D87BC0711E43BDE00702B6F /* Copy Forwarding and ICU Headers */,
93F199FD08245E59001E9ABC /* Resources */,
1C81BA330E97357C00266E07 /* Copy Inspector Resources */,
1C5F9D760E09A1B400E91D0A /* Streamline Inspector Source */,
@@ -19753,6 +19844,8 @@
targets = (
93F198A508245E59001E9ABC /* WebCore */,
DD041FBE09D9DDBE0010AF2A /* Derived Sources */,
+ 5D87BB4E11E3EAEB00702B6F /* WebCoreExportFileGenerator */,
+ 5D87BB6411E3EBC100702B6F /* WebCoreExportFileGenerator Generator */,
);
};
/* End PBXProject section */
@@ -19836,50 +19929,67 @@
shellPath = /bin/sh;
shellScript = "# Copy all the Inspector front-end resources.\nditto \"${SRCROOT}/inspector/front-end\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inspector\"\n\n# Remove the WebKit.qrc file since it is not used on the Mac (this file is for Qt)\nrm -f \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inspector/WebKit.qrc\"\n";
};
- 1CC93C640DAE929600E4BC3A /* Copy Forwarding and ICU Headers */ = {
+ 5D0D540D0E9862F60029E223 /* Check For Weak VTables and Externals */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
+ "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)",
);
- name = "Copy Forwarding and ICU Headers";
+ name = "Check For Weak VTables and Externals";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "rsync -aq --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/ForwardingHeaders\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\nrsync -aq --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/icu\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\n";
+ shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../WebKitTools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../WebKitTools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
};
- 5D0D540D0E9862F60029E223 /* Check For Weak VTables and Externals */ = {
+ 5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
- "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)",
+ "$(SRCROOT)/Configurations/Version.xcconfig",
);
- name = "Check For Weak VTables and Externals";
+ name = "Update Info.plist with version information";
outputPaths = (
+ "$(SRCROOT)/Info.plist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../WebKitTools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../WebKitTools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi";
+ shellScript = "# Touch Info.plist to let Xcode know it needs to copy it into the built product\nif [[ \"${CONFIGURATION}\" != \"Production\" ]]; then\n touch \"$SRCROOT/Info.plist\";\nfi;\n";
};
- 5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */ = {
+ 5D87BB6311E3EBC100702B6F /* Generate Export File Generator */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
- "$(SRCROOT)/Configurations/Version.xcconfig",
+ "$(SRCROOT)/WebCore.exp.in",
+ "$(SRCROOT)/make-export-file-generator",
);
- name = "Update Info.plist with version information";
+ name = "Generate Export File Generator";
outputPaths = (
- "$(SRCROOT)/Info.plist",
+ "$(BUILT_PRODUCTS_DIR)/DerivedSources/$(PROJECT_NAME)/ExportFileGenerator.cpp",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "# Touch Info.plist to let Xcode know it needs to copy it into the built product\nif [[ \"${CONFIGURATION}\" != \"Production\" ]]; then\n touch \"$SRCROOT/Info.plist\";\nfi;\n";
+ shellScript = "OUTPUT_DIR=\"${BUILT_PRODUCTS_DIR}/DerivedSources/${PROJECT_NAME}\"\nmkdir -p \"${OUTPUT_DIR}\"\n\"${SRCROOT}\"/make-export-file-generator \"${SRCROOT}/WebCore.exp.in\" \"${OUTPUT_DIR}/ExportFileGenerator.cpp\"\n";
+ };
+ 5D87BC0711E43BDE00702B6F /* Copy Forwarding and ICU Headers */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Forwarding and ICU Headers";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "rsync -av --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/ForwardingHeaders\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\nrsync -av --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/icu\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\n";
};
5DF50887116F3077005202AB /* Check For Inappropriate Files In Framework */ = {
isa = PBXShellScriptBuildPhase;
@@ -19942,6 +20052,14 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 5D87BB4C11E3EAEB00702B6F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5D87BB8311E3ED8600702B6F /* ExportFileGenerator.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
93F19A0C08245E59001E9ABC /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -19999,7 +20117,6 @@
A8CFF0500A154F09000A4234 /* AutoTableLayout.cpp in Sources */,
29A812370FBB9C1D00510293 /* AXObjectCache.cpp in Sources */,
29A8124B0FBB9CA900510293 /* AXObjectCacheMac.mm in Sources */,
- 51741D100B07259A00ED442C /* BackForwardList.cpp in Sources */,
BC124EE70C2641CD009E2349 /* BarInfo.cpp in Sources */,
B2C3DA210D006C1D00EF6F26 /* Base64.cpp in Sources */,
5172204B11D2960500638B42 /* BeforeProcessEvent.cpp in Sources */,
@@ -20041,7 +20158,6 @@
49C7B9DC1042D32F0009D447 /* CanvasRenderingContext.cpp in Sources */,
49484FCA102CF23C00187DD3 /* CanvasRenderingContext2D.cpp in Sources */,
49484FCD102CF23C00187DD3 /* CanvasStyle.cpp in Sources */,
- 0BC2C7771134A8FC000B2F61 /* CanvasSurface.cpp in Sources */,
6550B69D099DF0270090D781 /* CDATASection.cpp in Sources */,
514185EF0CD65F0400763C99 /* ChangeVersionWrapper.cpp in Sources */,
6550B69F099DF0270090D781 /* CharacterData.cpp in Sources */,
@@ -20156,7 +20272,7 @@
93309DDE099E64920056E581 /* DeleteFromTextNodeCommand.cpp in Sources */,
93309DE0099E64920056E581 /* DeleteSelectionCommand.cpp in Sources */,
93F19A3C08245E59001E9ABC /* DeprecatedPtrListImpl.cpp in Sources */,
- 59A8F1D411A69508001AC34A /* DeviceOrientation.cpp in Sources */,
+ 59A8F1D411A69508001AC34A /* DeviceOrientationController.cpp in Sources */,
59A85EA2119D68D900DEF1EF /* DeviceOrientationEvent.cpp in Sources */,
B2F34FE90E82F82700F627CD /* DNSCFNet.cpp in Sources */,
BCB16C290979C3BD00467741 /* DocLoader.cpp in Sources */,
@@ -20678,23 +20794,6 @@
513F14530AB634C400094DDF /* IconLoader.cpp in Sources */,
B275358E0B053A66002CE64F /* IconMac.mm in Sources */,
51E1ECC00C91C90400DC255B /* IconRecord.cpp in Sources */,
- C56C9152119D84CB00DE4CD9 /* IDBAny.cpp in Sources */,
- B627FB2D11AD743500E97B72 /* IDBDatabaseImpl.cpp in Sources */,
- B627FB2D11AD743500E97B72 /* IDBDatabaseImpl.cpp in Sources */,
- C5198F531192ECFD002B74A6 /* IDBDatabaseRequest.cpp in Sources */,
- C56C915F119D84E600DE4CD9 /* IDBErrorEvent.cpp in Sources */,
- C56C9162119D84E600DE4CD9 /* IDBEvent.cpp in Sources */,
- C51DA9A611AEF2C1009799C5 /* IDBIndexImpl.cpp in Sources */,
- C51DA9A611AEF2C1009799C5 /* IDBIndexImpl.cpp in Sources */,
- C51DA9A811AEF2C1009799C5 /* IDBIndexRequest.cpp in Sources */,
- C51DA9A811AEF2C1009799C5 /* IDBIndexRequest.cpp in Sources */,
- 816C806811BE887E009A45E9 /* IDBKeyRange.cpp in Sources */,
- B6B0540911B68F10002564C5 /* IDBObjectStoreImpl.cpp in Sources */,
- B6B0540911B68F10002564C5 /* IDBObjectStoreImpl.cpp in Sources */,
- B6693EED11AD63E6003F2770 /* IDBObjectStoreRequest.cpp in Sources */,
- B6693EED11AD63E6003F2770 /* IDBObjectStoreRequest.cpp in Sources */,
- C5198F561192ECFD002B74A6 /* IDBRequest.cpp in Sources */,
- C56C9168119D84FF00DE4CD9 /* IDBSuccessEvent.cpp in Sources */,
1A71D57B0F33819000F9CE4E /* IdentifierRep.cpp in Sources */,
B275356F0B053814002CE64F /* Image.cpp in Sources */,
B2A10B940B3818D700099AA4 /* ImageBufferCG.cpp in Sources */,
@@ -20708,9 +20807,6 @@
4B3480930EEF50D400AC1B41 /* ImageSourceCGMac.mm in Sources */,
316FE1170E6E1DA700BF6088 /* ImplicitAnimation.cpp in Sources */,
DB23C2CB0A508D29002489EB /* IndentOutdentCommand.cpp in Sources */,
- C5198F591192ECFD002B74A6 /* IndexedDatabase.cpp in Sources */,
- C5198F5B1192ECFD002B74A6 /* IndexedDatabaseImpl.cpp in Sources */,
- C5198F5D1192ECFD002B74A6 /* IndexedDatabaseRequest.cpp in Sources */,
F3644AFF1119805900E0D537 /* InjectedScript.cpp in Sources */,
7A0E76F910BF08ED00A0276E /* InjectedScriptHost.cpp in Sources */,
A8CFF5E60A155A05000A4234 /* InlineBox.cpp in Sources */,
@@ -20963,24 +21059,9 @@
A80E7B130A19D606007FB8C5 /* JSHTMLTitleElement.cpp in Sources */,
1A85B2100A1B258700D8C87C /* JSHTMLUListElement.cpp in Sources */,
E44614160CD6826900FADA75 /* JSHTMLVideoElement.cpp in Sources */,
- C56C919A119D915300DE4CD9 /* JSIDBAny.cpp in Sources */,
- C56C914E119D849800DE4CD9 /* JSIDBAnyCustom.cpp in Sources */,
- C5F4F406119306AC00FDFADD /* JSIDBDatabaseError.cpp in Sources */,
- C5F4F408119306AC00FDFADD /* JSIDBDatabaseException.cpp in Sources */,
- C5F4F40A119306AC00FDFADD /* JSIDBDatabaseRequest.cpp in Sources */,
- C56C91A0119D918100DE4CD9 /* JSIDBErrorEvent.cpp in Sources */,
- C56C91A2119D918100DE4CD9 /* JSIDBEvent.cpp in Sources */,
- C5BBC9D011AEF838007C2BFE /* JSIDBIndexRequest.cpp in Sources */,
- C5BBC9D011AEF838007C2BFE /* JSIDBIndexRequest.cpp in Sources */,
- 816C80B111BE9934009A45E9 /* JSIDBKeyRange.cpp in Sources */,
- B6693EF211AD6486003F2770 /* JSIDBObjectStoreRequest.cpp in Sources */,
- B6693EF211AD6486003F2770 /* JSIDBObjectStoreRequest.cpp in Sources */,
- C5F4F40C119306AC00FDFADD /* JSIDBRequest.cpp in Sources */,
- C56C91A6119D918700DE4CD9 /* JSIDBSuccessEvent.cpp in Sources */,
BC6C49F30D7DBA0500FFA558 /* JSImageConstructor.cpp in Sources */,
A77979280D6B9E64003851B9 /* JSImageData.cpp in Sources */,
A7D0318E0E93540300E24ACD /* JSImageDataCustom.cpp in Sources */,
- C5F4F410119306C000FDFADD /* JSIndexedDatabaseRequest.cpp in Sources */,
7A0E76DA10BF059800A0276E /* JSInjectedScriptHost.cpp in Sources */,
7A0E76D510BF050700A0276E /* JSInjectedScriptHostCustom.cpp in Sources */,
41F060CD0F5EEB2B00A07EAC /* JSInspectorBackend.cpp in Sources */,
@@ -21008,9 +21089,9 @@
410B7E721045FAB000D8224F /* JSMessageEventCustom.cpp in Sources */,
E1ADEDDB0E76BD93004A1A5E /* JSMessagePort.cpp in Sources */,
E1ADED470E76B8DD004A1A5E /* JSMessagePortCustom.cpp in Sources */,
- A9D248060D757E7D00FDF959 /* JSMimeType.cpp in Sources */,
- A9D248080D757E7D00FDF959 /* JSMimeTypeArray.cpp in Sources */,
- A9C6E6470D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp in Sources */,
+ A9D248060D757E7D00FDF959 /* JSDOMMimeType.cpp in Sources */,
+ A9D248080D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp in Sources */,
+ A9C6E6470D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp in Sources */,
A86629D209DA2B48009633A5 /* JSMouseEvent.cpp in Sources */,
65DF31FB09D1CC60000BE325 /* JSMutationEvent.cpp in Sources */,
BCD9C2C00C17B69E005C90A2 /* JSNamedNodeMap.cpp in Sources */,
@@ -21032,10 +21113,10 @@
A826EC480A1B0CBE00CD1BB6 /* JSOptionConstructor.cpp in Sources */,
1A0D57400A5C7867007EDD4C /* JSOverflowEvent.cpp in Sources */,
E1284BB210449FFA00EAEB52 /* JSPageTransitionEvent.cpp in Sources */,
- A9D247FE0D757E6900FDF959 /* JSPlugin.cpp in Sources */,
- A9D248000D757E6900FDF959 /* JSPluginArray.cpp in Sources */,
- A9C6E64C0D7465E7006442E9 /* JSPluginArrayCustom.cpp in Sources */,
- A9C6E64D0D7465E7006442E9 /* JSPluginCustom.cpp in Sources */,
+ A9D247FE0D757E6900FDF959 /* JSDOMPlugin.cpp in Sources */,
+ A9D248000D757E6900FDF959 /* JSDOMPluginArray.cpp in Sources */,
+ A9C6E64C0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp in Sources */,
+ A9C6E64D0D7465E7006442E9 /* JSDOMPluginCustom.cpp in Sources */,
93B70D6B09EB0C7C009D8468 /* JSPluginElementFunctions.cpp in Sources */,
5189F01D10B37BD900F3C739 /* JSPopStateEvent.cpp in Sources */,
5189F01810B3781300F3C739 /* JSPopStateEventCustom.cpp in Sources */,
@@ -21331,8 +21412,8 @@
75793E830D0CE0B3007FC0AC /* MessageEvent.cpp in Sources */,
E1ADECC00E76ACF1004A1A5E /* MessagePort.cpp in Sources */,
41BF700B0FE86F49005E8DEC /* MessagePortChannel.cpp in Sources */,
- A9C6E4E30D745E05006442E9 /* MimeType.cpp in Sources */,
- A9C6E4E70D745E18006442E9 /* MimeTypeArray.cpp in Sources */,
+ A9C6E4E30D745E05006442E9 /* DOMMimeType.cpp in Sources */,
+ A9C6E4E70D745E18006442E9 /* DOMMimeTypeArray.cpp in Sources */,
BC772C4E0C4EB3040083285F /* MIMETypeRegistry.cpp in Sources */,
BC772C5E0C4EB3440083285F /* MIMETypeRegistryMac.mm in Sources */,
C6D74AE409AA290A000B0A52 /* ModifySelectionListLevel.cpp in Sources */,
@@ -21397,8 +21478,8 @@
935C477109AC4D7300A6AAB4 /* PlatformMouseEventMac.mm in Sources */,
BC94D1080C274F88006BC617 /* PlatformScreenMac.mm in Sources */,
1AD8F81C11CAB9E900E93E54 /* PlatformStrategies.cpp in Sources */,
- A9C6E4EB0D745E2B006442E9 /* Plugin.cpp in Sources */,
- A9C6E4EF0D745E38006442E9 /* PluginArray.cpp in Sources */,
+ A9C6E4EB0D745E2B006442E9 /* DOMPlugin.cpp in Sources */,
+ A9C6E4EF0D745E38006442E9 /* DOMPluginArray.cpp in Sources */,
A9C6E4F30D745E48006442E9 /* PluginData.cpp in Sources */,
1AC694C70A3B1676003F5049 /* PluginDocument.cpp in Sources */,
7693BAD3106C2DCA007B0823 /* PluginHalter.cpp in Sources */,
@@ -22032,12 +22113,62 @@
93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */,
E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
+ B885E8D411E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp in Sources */,
+ BCA8C81F11E3D36900812FB7 /* BackForwardController.cpp in Sources */,
+ 4F4F5FFB11CBD2E100A186BF /* RemoteInspectorFrontend2.cpp in Sources */,
+ 97EF561011E40783007E026F /* HTMLConstructionSite.cpp in Sources */,
+ BCA8CA5F11E4E6D100812FB7 /* BackForwardListImpl.cpp in Sources */,
+ 8A9A587011E84C36008ACFD1 /* JSNavigation.cpp in Sources */,
+ 8A9A587411E84C81008ACFD1 /* JSPerformance.cpp in Sources */,
+ 8A9A588711E84F37008ACFD1 /* JSTiming.cpp in Sources */,
+ C585A65E11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp in Sources */,
+ C585A65F11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp in Sources */,
+ C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */,
+ C585A67C11D4FB08004C3E4B /* JSIDBAny.cpp in Sources */,
+ C585A67E11D4FB08004C3E4B /* JSIDBDatabaseError.cpp in Sources */,
+ C585A68011D4FB08004C3E4B /* JSIDBDatabaseException.cpp in Sources */,
+ C585A68211D4FB08004C3E4B /* JSIDBDatabaseRequest.cpp in Sources */,
+ C585A68411D4FB08004C3E4B /* JSIDBErrorEvent.cpp in Sources */,
+ C585A68611D4FB08004C3E4B /* JSIDBEvent.cpp in Sources */,
+ C585A68811D4FB08004C3E4B /* JSIDBIndexRequest.cpp in Sources */,
+ C585A68A11D4FB08004C3E4B /* JSIDBKey.cpp in Sources */,
+ C585A68C11D4FB08004C3E4B /* JSIDBKeyRange.cpp in Sources */,
+ C585A68E11D4FB08004C3E4B /* JSIDBObjectStoreRequest.cpp in Sources */,
+ C585A69011D4FB08004C3E4B /* JSIDBRequest.cpp in Sources */,
+ C585A69211D4FB08004C3E4B /* JSIDBSuccessEvent.cpp in Sources */,
+ C585A69611D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp in Sources */,
+ C585A6CC11D4FB3D004C3E4B /* IDBAny.cpp in Sources */,
+ C585A6D511D4FB3D004C3E4B /* IDBDatabaseImpl.cpp in Sources */,
+ C585A6D711D4FB3D004C3E4B /* IDBDatabaseRequest.cpp in Sources */,
+ C585A6DA11D4FB3D004C3E4B /* IDBErrorEvent.cpp in Sources */,
+ C585A6DD11D4FB3D004C3E4B /* IDBEvent.cpp in Sources */,
+ C585A6E111D4FB3D004C3E4B /* IDBIndexImpl.cpp in Sources */,
+ C585A6E311D4FB3D004C3E4B /* IDBIndexRequest.cpp in Sources */,
+ C585A6E611D4FB3D004C3E4B /* IDBKey.cpp in Sources */,
+ C585A6E911D4FB3D004C3E4B /* IDBKeyRange.cpp in Sources */,
+ C585A6EE11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp in Sources */,
+ C585A6F011D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp in Sources */,
+ C585A6F311D4FB3D004C3E4B /* IDBRequest.cpp in Sources */,
+ C585A6F611D4FB3D004C3E4B /* IDBSuccessEvent.cpp in Sources */,
+ C585A6F911D4FB3D004C3E4B /* IndexedDatabase.cpp in Sources */,
+ C585A6FB11D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp in Sources */,
+ C585A6FD11D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 5D87BB6B11E3EBD200702B6F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 5D87BB6411E3EBC100702B6F /* WebCoreExportFileGenerator Generator */;
+ targetProxy = 5D87BB6A11E3EBD200702B6F /* PBXContainerItemProxy */;
+ };
+ 5D87BB8F11E3EE2B00702B6F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 5D87BB4E11E3EAEB00702B6F /* WebCoreExportFileGenerator */;
+ targetProxy = 5D87BB8E11E3EE2B00702B6F /* PBXContainerItemProxy */;
+ };
DD041FF109D9E3250010AF2A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = DD041FBE09D9DDBE0010AF2A /* Derived Sources */;
@@ -22108,6 +22239,64 @@
};
name = Production;
};
+ 5D87BB5111E3EAEB00702B6F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */;
+ buildSettings = {
+ EXPORTED_SYMBOLS_FILE = "";
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = /usr/local/bin;
+ OTHER_LDFLAGS = "";
+ PRODUCT_NAME = WebCoreExportFileGenerator;
+ SKIP_INSTALL = YES;
+ };
+ name = Debug;
+ };
+ 5D87BB5211E3EAEB00702B6F /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */;
+ buildSettings = {
+ EXPORTED_SYMBOLS_FILE = "";
+ INSTALL_PATH = /usr/local/bin;
+ OTHER_LDFLAGS = "";
+ PRODUCT_NAME = WebCoreExportFileGenerator;
+ SKIP_INSTALL = YES;
+ };
+ name = Release;
+ };
+ 5D87BB5311E3EAEB00702B6F /* Production */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */;
+ buildSettings = {
+ EXPORTED_SYMBOLS_FILE = "";
+ INSTALL_PATH = /usr/local/bin;
+ OTHER_LDFLAGS = "";
+ PRODUCT_NAME = WebCoreExportFileGenerator;
+ SKIP_INSTALL = YES;
+ };
+ name = Production;
+ };
+ 5D87BB6511E3EBC200702B6F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "WebCoreExportFileGenerator Generator";
+ };
+ name = Debug;
+ };
+ 5D87BB6611E3EBC200702B6F /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "WebCoreExportFileGenerator Generator";
+ };
+ name = Release;
+ };
+ 5D87BB6711E3EBC200702B6F /* Production */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = "WebCoreExportFileGenerator Generator";
+ };
+ name = Production;
+ };
DD041FC209D9DDDC0010AF2A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */;
@@ -22155,6 +22344,26 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Production;
};
+ 5D87BB5911E3EB0700702B6F /* Build configuration list for PBXNativeTarget "WebCoreExportFileGenerator" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5D87BB5111E3EAEB00702B6F /* Debug */,
+ 5D87BB5211E3EAEB00702B6F /* Release */,
+ 5D87BB5311E3EAEB00702B6F /* Production */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Production;
+ };
+ 5D87BB6C11E3EC0000702B6F /* Build configuration list for PBXAggregateTarget "WebCoreExportFileGenerator Generator" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5D87BB6511E3EBC200702B6F /* Debug */,
+ 5D87BB6611E3EBC200702B6F /* Release */,
+ 5D87BB6711E3EBC200702B6F /* Production */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Production;
+ };
DD041FC109D9DDDC0010AF2A /* Build configuration list for PBXAggregateTarget "Derived Sources" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/WebCore/accessibility/AXObjectCache.h b/WebCore/accessibility/AXObjectCache.h
index 8d98fa3..f18d08a 100644
--- a/WebCore/accessibility/AXObjectCache.h
+++ b/WebCore/accessibility/AXObjectCache.h
@@ -27,7 +27,6 @@
#define AXObjectCache_h
#include "AccessibilityObject.h"
-#include "EventHandler.h"
#include "Timer.h"
#include <limits.h>
#include <wtf/HashMap.h>
diff --git a/WebCore/accessibility/AccessibilityListBox.h b/WebCore/accessibility/AccessibilityListBox.h
index 72ce82f..dcfdd6f 100644
--- a/WebCore/accessibility/AccessibilityListBox.h
+++ b/WebCore/accessibility/AccessibilityListBox.h
@@ -29,11 +29,10 @@
#ifndef AccessibilityListBox_h
#define AccessibilityListBox_h
-#include "AccessibilityObject.h"
#include "AccessibilityRenderObject.h"
namespace WebCore {
-
+
class AccessibilityListBox : public AccessibilityRenderObject {
private:
diff --git a/WebCore/accessibility/AccessibilityMenuList.h b/WebCore/accessibility/AccessibilityMenuList.h
index d00c8b4..376958f 100644
--- a/WebCore/accessibility/AccessibilityMenuList.h
+++ b/WebCore/accessibility/AccessibilityMenuList.h
@@ -26,7 +26,6 @@
#ifndef AccessibilityMenuList_h
#define AccessibilityMenuList_h
-#include "AccessibilityObject.h"
#include "AccessibilityRenderObject.h"
namespace WebCore {
diff --git a/WebCore/accessibility/AccessibilityRenderObject.cpp b/WebCore/accessibility/AccessibilityRenderObject.cpp
index 1ef6e09..2e53703 100644
--- a/WebCore/accessibility/AccessibilityRenderObject.cpp
+++ b/WebCore/accessibility/AccessibilityRenderObject.cpp
@@ -91,7 +91,8 @@ AccessibilityRenderObject::AccessibilityRenderObject(RenderObject* renderer)
, m_childrenDirty(false)
, m_roleForMSAA(UnknownRole)
{
- updateAccessibilityRole();
+ m_role = determineAccessibilityRole();
+
#ifndef NDEBUG
m_renderer->setHasAXObject(true);
#endif
@@ -553,7 +554,7 @@ bool AccessibilityRenderObject::isPressed() const
// If this is an ARIA button, check the aria-pressed attribute rather than node()->active()
if (ariaRoleAttribute() == ButtonRole) {
- if (equalIgnoringCase(getAttribute(aria_pressedAttr).string(), "true"))
+ if (equalIgnoringCase(getAttribute(aria_pressedAttr), "true"))
return true;
return false;
}
@@ -877,7 +878,7 @@ static Element* siblingWithAriaRole(String role, Node* node)
Node* sibling = node->parent()->firstChild();
while (sibling) {
if (sibling->isElementNode()) {
- String siblingAriaRole = static_cast<Element*>(sibling)->getAttribute(roleAttr).string();
+ const AtomicString& siblingAriaRole = static_cast<Element*>(sibling)->getAttribute(roleAttr);
if (equalIgnoringCase(siblingAriaRole, role))
return static_cast<Element*>(sibling);
}
@@ -1055,7 +1056,7 @@ int AccessibilityRenderObject::intValue() const
// If this is an ARIA checkbox or radio, check the aria-checked attribute rather than node()->checked()
AccessibilityRole ariaRole = ariaRoleAttribute();
if (ariaRole == RadioButtonRole || ariaRole == CheckBoxRole) {
- if (equalIgnoringCase(getAttribute(aria_checkedAttr).string(), "true"))
+ if (equalIgnoringCase(getAttribute(aria_checkedAttr), "true"))
return true;
return false;
}
@@ -1101,8 +1102,12 @@ String AccessibilityRenderObject::stringValue() const
if (!m_renderer || isPasswordField())
return String();
- if (ariaRoleAttribute() == StaticTextRole)
- return text();
+ if (ariaRoleAttribute() == StaticTextRole) {
+ String staticText = text();
+ if (!staticText.length())
+ staticText = textUnderElement();
+ return staticText;
+ }
if (m_renderer->isText())
return textUnderElement();
@@ -1336,7 +1341,7 @@ String AccessibilityRenderObject::accessibilityDescription() const
if (!m_renderer)
return String();
- String ariaLabel = getAttribute(aria_labelAttr).string();
+ const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
if (!ariaLabel.isEmpty())
return ariaLabel;
@@ -1542,7 +1547,7 @@ bool AccessibilityRenderObject::hasTextAlternative() const
{
// ARIA: section 2A, bullet #3 says if aria-labeledby or aria-label appears, it should
// override the "label" element association.
- if (!ariaLabeledByAttribute().isEmpty() || !getAttribute(aria_labelAttr).string().isEmpty())
+ if (!ariaLabeledByAttribute().isEmpty() || !getAttribute(aria_labelAttr).isEmpty())
return true;
return false;
@@ -1555,7 +1560,7 @@ bool AccessibilityRenderObject::ariaHasPopup() const
bool AccessibilityRenderObject::supportsARIAFlowTo() const
{
- return !getAttribute(aria_flowtoAttr).string().isEmpty();
+ return !getAttribute(aria_flowtoAttr).isEmpty();
}
void AccessibilityRenderObject::ariaFlowToElements(AccessibilityChildrenVector& flowTo) const
@@ -1576,13 +1581,13 @@ void AccessibilityRenderObject::ariaFlowToElements(AccessibilityChildrenVector&
bool AccessibilityRenderObject::supportsARIADropping() const
{
- const AtomicString& dropEffect = getAttribute(aria_dropeffectAttr).string();
+ const AtomicString& dropEffect = getAttribute(aria_dropeffectAttr);
return !dropEffect.isEmpty();
}
bool AccessibilityRenderObject::supportsARIADragging() const
{
- const AtomicString& grabbed = getAttribute(aria_grabbedAttr).string();
+ const AtomicString& grabbed = getAttribute(aria_grabbedAttr);
return equalIgnoringCase(grabbed, "true") || equalIgnoringCase(grabbed, "false");
}
@@ -1598,14 +1603,15 @@ void AccessibilityRenderObject::setARIAGrabbed(bool grabbed)
void AccessibilityRenderObject::determineARIADropEffects(Vector<String>& effects)
{
- String dropEffects = getAttribute(aria_dropeffectAttr).string();
+ const AtomicString& dropEffects = getAttribute(aria_dropeffectAttr);
if (dropEffects.isEmpty()) {
effects.clear();
return;
}
- dropEffects.replace('\n', ' ');
- dropEffects.split(' ', effects);
+ String dropEffectsString = dropEffects.string();
+ dropEffectsString.replace('\n', ' ');
+ dropEffectsString.split(' ', effects);
}
bool AccessibilityRenderObject::exposesTitleUIElement() const
@@ -1754,12 +1760,6 @@ bool AccessibilityRenderObject::accessibilityIsIgnored() const
if (controlObject && !controlObject->exposesTitleUIElement() && controlObject->isCheckboxOrRadio())
return true;
- AccessibilityRole ariaRole = ariaRoleAttribute();
- if (ariaRole == TextAreaRole || ariaRole == StaticTextRole) {
- String ariaText = text();
- return ariaText.isNull() || ariaText.isEmpty();
- }
-
// NOTE: BRs always have text boxes now, so the text box check here can be removed
if (m_renderer->isText()) {
// static text beneath MenuItems and MenuButtons are just reported along with the menu item, so it's ignored on an individual level
@@ -1784,7 +1784,7 @@ bool AccessibilityRenderObject::accessibilityIsIgnored() const
if (isControl())
return false;
- if (ariaRole != UnknownRole)
+ if (ariaRoleAttribute() != UnknownRole)
return false;
if (!helpText().isEmpty())
@@ -2047,7 +2047,7 @@ bool AccessibilityRenderObject::isVisited() const
bool AccessibilityRenderObject::isExpanded() const
{
- if (equalIgnoringCase(getAttribute(aria_expandedAttr).string(), "true"))
+ if (equalIgnoringCase(getAttribute(aria_expandedAttr), "true"))
return true;
return false;
@@ -2092,7 +2092,7 @@ void AccessibilityRenderObject::setIsExpanded(bool isExpanded)
bool AccessibilityRenderObject::isRequired() const
{
- if (equalIgnoringCase(getAttribute(aria_requiredAttr).string(), "true"))
+ if (equalIgnoringCase(getAttribute(aria_requiredAttr), "true"))
return true;
return false;
@@ -2107,7 +2107,7 @@ bool AccessibilityRenderObject::isSelected() const
if (!node)
return false;
- String ariaSelected = getAttribute(aria_selectedAttr).string();
+ const AtomicString& ariaSelected = getAttribute(aria_selectedAttr);
if (equalIgnoringCase(ariaSelected, "true"))
return true;
@@ -2263,7 +2263,7 @@ bool AccessibilityRenderObject::supportsARIAOwns() const
{
if (!m_renderer)
return false;
- const AtomicString& ariaOwns = getAttribute(aria_ownsAttr).string();
+ const AtomicString& ariaOwns = getAttribute(aria_ownsAttr);
return !ariaOwns.isEmpty();
}
@@ -2272,7 +2272,7 @@ bool AccessibilityRenderObject::isEnabled() const
{
ASSERT(m_renderer);
- if (equalIgnoringCase(getAttribute(aria_disabledAttr).string(), "true"))
+ if (equalIgnoringCase(getAttribute(aria_disabledAttr), "true"))
return false;
Node* node = m_renderer->node();
@@ -2817,7 +2817,7 @@ AccessibilityObject* AccessibilityRenderObject::activeDescendant() const
return 0;
Element* element = static_cast<Element*>(m_renderer->node());
- String activeDescendantAttrStr = element->getAttribute(aria_activedescendantAttr).string();
+ const AtomicString& activeDescendantAttrStr = element->getAttribute(aria_activedescendantAttr);
if (activeDescendantAttrStr.isNull() || activeDescendantAttrStr.isEmpty())
return 0;
@@ -2915,7 +2915,13 @@ bool AccessibilityRenderObject::renderObjectIsObservable(RenderObject* renderer)
return true;
// AX clients will listen for AXSelectedChildrenChanged on listboxes.
- if (renderer->isListBox() || axObjectCache()->nodeHasRole(renderer->node(), "listbox"))
+ AXObjectCache* cache = axObjectCache();
+ Node* node = renderer->node();
+ if (renderer->isListBox() || cache->nodeHasRole(node, "listbox"))
+ return true;
+
+ // Textboxes should send out notifications.
+ if (cache->nodeHasRole(node, "textbox"))
return true;
return false;
@@ -2934,7 +2940,7 @@ AccessibilityObject* AccessibilityRenderObject::observableObject() const
AccessibilityRole AccessibilityRenderObject::determineAriaRoleAttribute() const
{
- String ariaRole = getAttribute(roleAttr).string();
+ const AtomicString& ariaRole = getAttribute(roleAttr);
if (ariaRole.isNull() || ariaRole.isEmpty())
return UnknownRole;
@@ -2970,7 +2976,12 @@ AccessibilityRole AccessibilityRenderObject::ariaRoleAttribute() const
void AccessibilityRenderObject::updateAccessibilityRole()
{
+ bool ignoredStatus = accessibilityIsIgnored();
m_role = determineAccessibilityRole();
+
+ // The AX hierarchy only needs to be updated if the ignored status of an element has changed.
+ if (ignoredStatus != accessibilityIsIgnored())
+ childrenChanged();
}
AccessibilityRole AccessibilityRenderObject::determineAccessibilityRole()
@@ -3075,7 +3086,7 @@ AccessibilityRole AccessibilityRenderObject::determineAccessibilityRole()
AccessibilityOrientation AccessibilityRenderObject::orientation() const
{
- const AtomicString& ariaOrientation = getAttribute(aria_orientationAttr).string();
+ const AtomicString& ariaOrientation = getAttribute(aria_orientationAttr);
if (equalIgnoringCase(ariaOrientation, "horizontal"))
return AccessibilityOrientationHorizontal;
if (equalIgnoringCase(ariaOrientation, "vertical"))
@@ -3184,13 +3195,13 @@ bool AccessibilityRenderObject::canSetFocusAttribute() const
bool AccessibilityRenderObject::canSetExpandedAttribute() const
{
// An object can be expanded if it aria-expanded is true or false.
- String ariaExpanded = getAttribute(aria_expandedAttr).string();
+ const AtomicString& ariaExpanded = getAttribute(aria_expandedAttr);
return equalIgnoringCase(ariaExpanded, "true") || equalIgnoringCase(ariaExpanded, "false");
}
bool AccessibilityRenderObject::canSetValueAttribute() const
{
- if (equalIgnoringCase(getAttribute(aria_readonlyAttr).string(), "true"))
+ if (equalIgnoringCase(getAttribute(aria_readonlyAttr), "true"))
return false;
// Any node could be contenteditable, so isReadOnly should be relied upon
diff --git a/WebCore/accessibility/AccessibilityTable.cpp b/WebCore/accessibility/AccessibilityTable.cpp
index 8e0562c..437ac38 100644
--- a/WebCore/accessibility/AccessibilityTable.cpp
+++ b/WebCore/accessibility/AccessibilityTable.cpp
@@ -137,7 +137,10 @@ bool AccessibilityTable::isTableExposableThroughAccessibility()
unsigned borderedCellCount = 0;
unsigned backgroundDifferenceCellCount = 0;
+ int headersInFirstColumnCount = 0;
for (int row = 0; row < numRows; ++row) {
+
+ int headersInFirstRowCount = 0;
for (int col = 0; col < numCols; ++col) {
RenderTableCell* cell = firstBody->cellAt(row, col).cell;
if (!cell)
@@ -153,6 +156,15 @@ bool AccessibilityTable::isTableExposableThroughAccessibility()
HTMLTableCellElement* cellElement = static_cast<HTMLTableCellElement*>(cellNode);
+ bool isTHCell = cellElement->hasTagName(thTag);
+ // If the first row is comprised of all <th> tags, assume it is a data table.
+ if (!row && isTHCell)
+ headersInFirstRowCount++;
+
+ // If the first column is comprised of all <tg> tags, assume it is a data table.
+ if (!col && isTHCell)
+ headersInFirstColumnCount++;
+
// in this case, the developer explicitly assigned a "data" table attribute
if (!cellElement->headers().isEmpty() || !cellElement->abbr().isEmpty()
|| !cellElement->axis().isEmpty() || !cellElement->scope().isEmpty())
@@ -178,8 +190,14 @@ bool AccessibilityTable::isTableExposableThroughAccessibility()
if (borderedCellCount >= 10 || backgroundDifferenceCellCount >= 10)
return true;
}
+
+ if (!row && headersInFirstRowCount == numCols && numCols > 1)
+ return true;
}
+ if (headersInFirstColumnCount == numRows && numRows > 1)
+ return true;
+
// if there is less than two valid cells, it's not a data table
if (validCellCount <= 1)
return false;
diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.h b/WebCore/accessibility/mac/AccessibilityObjectWrapper.h
index e6cc706..b54d3fc 100644
--- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.h
+++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.h
@@ -29,8 +29,6 @@
#ifndef AccessibilityObjectWrapper_h
#define AccessibilityObjectWrapper_h
-#include <wtf/RefPtr.h>
-
#ifdef __OBJC__
@class WebCoreTextMarker;
@class WebCoreTextMarkerRange;
diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
index 9de7e4d..a711116 100644
--- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
+++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
@@ -44,6 +44,7 @@
#import "Frame.h"
#import "HTMLAnchorElement.h"
#import "HTMLAreaElement.h"
+#import "HTMLFrameOwnerElement.h"
#import "HTMLImageElement.h"
#import "HTMLInputElement.h"
#import "HTMLTextAreaElement.h"
@@ -1464,7 +1465,7 @@ static NSString* roleValueToNSString(AccessibilityRole value)
if ([attributeName isEqualToString: NSAccessibilitySelectedTextRangeAttribute]) {
PlainTextRange textRange = m_object->selectedTextRange();
if (textRange.isNull())
- return nil;
+ return [NSValue valueWithRange:NSMakeRange(0, 0)];
return [NSValue valueWithRange:NSMakeRange(textRange.start, textRange.length)];
}
// TODO: Get actual visible range. <rdar://problem/4712101>
diff --git a/WebCore/bindings/ScriptControllerBase.h b/WebCore/bindings/ScriptControllerBase.h
new file mode 100644
index 0000000..ed6ca62
--- /dev/null
+++ b/WebCore/bindings/ScriptControllerBase.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 Research in Motion Limited. All rights reserved.
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
+ * Copyright (C) 2001 Peter Kelly (pmk@post.com)
+ * Copyright (C) 1999 Harri Porten (porten@kde.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 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 ScriptControllerBase_h
+#define ScriptControllerBase_h
+
+namespace WebCore {
+
+enum ReasonForCallingCanExecuteScripts {
+ AboutToExecuteScript,
+ 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
diff --git a/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp b/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
index 93ce1ee..7d4e5c1 100644
--- a/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
+++ b/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp
@@ -75,6 +75,11 @@ bool RuntimeEnabledFeatures::mediaErrorEnabled()
return MediaPlayer::isAvailable();
}
+bool RuntimeEnabledFeatures::timeRangesEnabled()
+{
+ return MediaPlayer::isAvailable();
+}
+
#endif
#if ENABLE(SHARED_WORKERS)
diff --git a/WebCore/bindings/generic/RuntimeEnabledFeatures.h b/WebCore/bindings/generic/RuntimeEnabledFeatures.h
index 2d62a27..73bbf0f 100644
--- a/WebCore/bindings/generic/RuntimeEnabledFeatures.h
+++ b/WebCore/bindings/generic/RuntimeEnabledFeatures.h
@@ -63,6 +63,7 @@ public:
static bool htmlAudioElementEnabled();
static bool htmlVideoElementEnabled();
static bool mediaErrorEnabled();
+ static bool timeRangesEnabled();
#endif
#if ENABLE(SHARED_WORKERS)
diff --git a/WebCore/bindings/gobject/GObjectEventListener.h b/WebCore/bindings/gobject/GObjectEventListener.h
index c65b91e..7ca2cc7 100644
--- a/WebCore/bindings/gobject/GObjectEventListener.h
+++ b/WebCore/bindings/gobject/GObjectEventListener.h
@@ -21,6 +21,7 @@
#include "EventListener.h"
+#include "PlatformString.h"
#include <glib-object.h>
#include <glib.h>
#include <wtf/PassRefPtr.h>
diff --git a/WebCore/bindings/js/IDBBindingUtilities.cpp b/WebCore/bindings/js/IDBBindingUtilities.cpp
index faa2370..638a23e 100644
--- a/WebCore/bindings/js/IDBBindingUtilities.cpp
+++ b/WebCore/bindings/js/IDBBindingUtilities.cpp
@@ -26,10 +26,10 @@
#include "config.h"
#include "IDBBindingUtilities.h"
-#include "IDBKey.h"
-
#if ENABLE(INDEXED_DATABASE)
+#include "IDBKey.h"
+
namespace WebCore {
PassRefPtr<IDBKey> createIDBKeyFromValue(JSC::ExecState* exec, JSC::JSValue value)
diff --git a/WebCore/bindings/js/IDBBindingUtilities.h b/WebCore/bindings/js/IDBBindingUtilities.h
index 0a2fb790..f410344 100644
--- a/WebCore/bindings/js/IDBBindingUtilities.h
+++ b/WebCore/bindings/js/IDBBindingUtilities.h
@@ -26,11 +26,11 @@
#ifndef IDBBindingUtilities_h
#define IDBBindingUtilities_h
-#include "ScriptValue.h"
-#include <wtf/PassRefPtr.h>
-
#if ENABLE(INDEXED_DATABASE)
+#include "ScriptValue.h"
+#include <wtf/Forward.h>
+
namespace WebCore {
class IDBKey;
diff --git a/WebCore/bindings/js/JSBindingsAllInOne.cpp b/WebCore/bindings/js/JSBindingsAllInOne.cpp
index c9a77fb..373c0e0 100644
--- a/WebCore/bindings/js/JSBindingsAllInOne.cpp
+++ b/WebCore/bindings/js/JSBindingsAllInOne.cpp
@@ -97,7 +97,7 @@
#include "JSMessageChannelCustom.cpp"
#include "JSMessageEventCustom.cpp"
#include "JSMessagePortCustom.cpp"
-#include "JSMimeTypeArrayCustom.cpp"
+#include "JSDOMMimeTypeArrayCustom.cpp"
#include "JSNamedNodeMapCustom.cpp"
#include "JSNavigatorCustom.cpp"
#include "JSNodeCustom.cpp"
@@ -106,8 +106,8 @@
#include "JSNodeIteratorCustom.cpp"
#include "JSNodeListCustom.cpp"
#include "JSOptionConstructor.cpp"
-#include "JSPluginArrayCustom.cpp"
-#include "JSPluginCustom.cpp"
+#include "JSDOMPluginArrayCustom.cpp"
+#include "JSDOMPluginCustom.cpp"
#include "JSPluginElementFunctions.cpp"
#include "JSPopStateEventCustom.cpp"
#include "JSSQLResultSetRowListCustom.cpp"
diff --git a/WebCore/bindings/js/JSMimeTypeArrayCustom.cpp b/WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp
index bdd6ddb..2d41843 100644
--- a/WebCore/bindings/js/JSMimeTypeArrayCustom.cpp
+++ b/WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp
@@ -18,24 +18,24 @@
*/
#include "config.h"
-#include "JSMimeTypeArray.h"
+#include "JSDOMMimeTypeArray.h"
#include "AtomicString.h"
-#include "JSMimeType.h"
-#include "MimeTypeArray.h"
+#include "DOMMimeTypeArray.h"
+#include "JSDOMMimeType.h"
namespace WebCore {
using namespace JSC;
-bool JSMimeTypeArray::canGetItemsForName(ExecState*, MimeTypeArray* mimeTypeArray, const Identifier& propertyName)
+bool JSDOMMimeTypeArray::canGetItemsForName(ExecState*, DOMMimeTypeArray* mimeTypeArray, const Identifier& propertyName)
{
return mimeTypeArray->canGetItemsForName(identifierToAtomicString(propertyName));
}
-JSValue JSMimeTypeArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
+JSValue JSDOMMimeTypeArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
{
- JSMimeTypeArray* thisObj = static_cast<JSMimeTypeArray*>(asObject(slotBase));
+ JSDOMMimeTypeArray* thisObj = static_cast<JSDOMMimeTypeArray*>(asObject(slotBase));
return toJS(exec, thisObj->impl()->namedItem(identifierToAtomicString(propertyName)));
}
diff --git a/WebCore/bindings/js/JSPluginArrayCustom.cpp b/WebCore/bindings/js/JSDOMPluginArrayCustom.cpp
index b232f4d..abf3148 100644
--- a/WebCore/bindings/js/JSPluginArrayCustom.cpp
+++ b/WebCore/bindings/js/JSDOMPluginArrayCustom.cpp
@@ -18,24 +18,24 @@
*/
#include "config.h"
-#include "JSPluginArray.h"
+#include "JSDOMPluginArray.h"
#include "AtomicString.h"
-#include "JSPlugin.h"
-#include "PluginArray.h"
+#include "DOMPluginArray.h"
+#include "JSDOMPlugin.h"
namespace WebCore {
using namespace JSC;
-bool JSPluginArray::canGetItemsForName(ExecState*, PluginArray* pluginArray, const Identifier& propertyName)
+bool JSDOMPluginArray::canGetItemsForName(ExecState*, DOMPluginArray* pluginArray, const Identifier& propertyName)
{
return pluginArray->canGetItemsForName(identifierToAtomicString(propertyName));
}
-JSValue JSPluginArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
+JSValue JSDOMPluginArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
{
- JSPluginArray* thisObj = static_cast<JSPluginArray*>(asObject(slotBase));
+ JSDOMPluginArray* thisObj = static_cast<JSDOMPluginArray*>(asObject(slotBase));
return toJS(exec, thisObj->impl()->namedItem(identifierToAtomicString(propertyName)));
}
diff --git a/WebCore/bindings/js/JSPluginCustom.cpp b/WebCore/bindings/js/JSDOMPluginCustom.cpp
index 9fa0b76..c8d187e 100644
--- a/WebCore/bindings/js/JSPluginCustom.cpp
+++ b/WebCore/bindings/js/JSDOMPluginCustom.cpp
@@ -17,24 +17,24 @@
*/
#include "config.h"
-#include "JSPlugin.h"
+#include "JSDOMPlugin.h"
#include "AtomicString.h"
-#include "JSMimeType.h"
-#include "Plugin.h"
+#include "DOMPlugin.h"
+#include "JSDOMMimeType.h"
namespace WebCore {
using namespace JSC;
-bool JSPlugin::canGetItemsForName(ExecState*, Plugin* plugin, const Identifier& propertyName)
+bool JSDOMPlugin::canGetItemsForName(ExecState*, DOMPlugin* plugin, const Identifier& propertyName)
{
return plugin->canGetItemsForName(identifierToAtomicString(propertyName));
}
-JSValue JSPlugin::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
+JSValue JSDOMPlugin::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
{
- JSPlugin* thisObj = static_cast<JSPlugin*>(asObject(slotBase));
+ JSDOMPlugin* thisObj = static_cast<JSDOMPlugin*>(asObject(slotBase));
return toJS(exec, thisObj->impl()->namedItem(identifierToAtomicString(propertyName)));
}
diff --git a/WebCore/bindings/js/JSIDBAnyCustom.cpp b/WebCore/bindings/js/JSIDBAnyCustom.cpp
index 43a79a2..b7c845e 100644
--- a/WebCore/bindings/js/JSIDBAnyCustom.cpp
+++ b/WebCore/bindings/js/JSIDBAnyCustom.cpp
@@ -11,9 +11,6 @@
* 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
@@ -37,10 +34,12 @@
#include "IDBAny.h"
#include "IDBDatabaseRequest.h"
#include "IDBIndexRequest.h"
+#include "IDBKey.h"
#include "IDBObjectStoreRequest.h"
#include "IndexedDatabaseRequest.h"
#include "JSIDBDatabaseRequest.h"
#include "JSIDBIndexRequest.h"
+#include "JSIDBKey.h"
#include "JSIDBObjectStoreRequest.h"
#include "JSIndexedDatabaseRequest.h"
#include "SerializedScriptValue.h"
@@ -63,6 +62,8 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, IDBAny* idbAny)
return toJS(exec, globalObject, idbAny->idbDatabaseRequest());
case IDBAny::IDBIndexRequestType:
return toJS(exec, globalObject, idbAny->idbIndexRequest());
+ case IDBAny::IDBKeyType:
+ return toJS(exec, globalObject, idbAny->idbKey());
case IDBAny::IDBObjectStoreRequestType:
return toJS(exec, globalObject, idbAny->idbObjectStoreRequest());
case IDBAny::IndexedDatabaseRequestType:
diff --git a/WebCore/bindings/js/JSSharedWorkerCustom.cpp b/WebCore/bindings/js/JSSharedWorkerCustom.cpp
index 261ae2b..0d576e0 100644
--- a/WebCore/bindings/js/JSSharedWorkerCustom.cpp
+++ b/WebCore/bindings/js/JSSharedWorkerCustom.cpp
@@ -70,7 +70,10 @@ EncodedJSValue JSC_HOST_CALL JSSharedWorkerConstructor::constructJSSharedWorker(
DOMWindow* window = asJSDOMWindow(exec->lexicalGlobalObject())->impl();
ExceptionCode ec = 0;
RefPtr<SharedWorker> worker = SharedWorker::create(ustringToString(scriptURL), ustringToString(name), window->document(), ec);
- setDOMException(exec, ec);
+ if (ec) {
+ setDOMException(exec, ec);
+ return JSValue::encode(JSValue());
+ }
return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), worker.release())));
}
diff --git a/WebCore/bindings/js/ScriptCallStack.cpp b/WebCore/bindings/js/ScriptCallStack.cpp
index 86ddcd1..c9bb8b0 100644
--- a/WebCore/bindings/js/ScriptCallStack.cpp
+++ b/WebCore/bindings/js/ScriptCallStack.cpp
@@ -100,7 +100,7 @@ void ScriptCallStack::initialize()
m_initialized = true;
}
-bool ScriptCallStack::stackTrace(int, ScriptState*, ScriptArray&)
+bool ScriptCallStack::stackTrace(int, const RefPtr<InspectorArray>&)
{
return false;
}
diff --git a/WebCore/bindings/js/ScriptCallStack.h b/WebCore/bindings/js/ScriptCallStack.h
index 6cf7679..e461ac3 100644
--- a/WebCore/bindings/js/ScriptCallStack.h
+++ b/WebCore/bindings/js/ScriptCallStack.h
@@ -36,6 +36,7 @@
#include "ScriptState.h"
#include "ScriptString.h"
#include <wtf/Noncopyable.h>
+#include <wtf/RefPtr.h>
namespace JSC {
class ExecState;
@@ -44,6 +45,8 @@ namespace JSC {
namespace WebCore {
+ class InspectorArray;
+
class ScriptCallStack : public Noncopyable {
public:
ScriptCallStack(JSC::ExecState*, unsigned skipArgumentCount = 0);
@@ -54,7 +57,7 @@ namespace WebCore {
// frame retrieval methods
const ScriptCallFrame &at(unsigned);
unsigned size();
- static bool stackTrace(int, ScriptState*, ScriptArray&);
+ static bool stackTrace(int, const RefPtr<InspectorArray>&);
private:
void initialize();
diff --git a/WebCore/bindings/js/ScriptController.h b/WebCore/bindings/js/ScriptController.h
index 0debf39..c382a93 100644
--- a/WebCore/bindings/js/ScriptController.h
+++ b/WebCore/bindings/js/ScriptController.h
@@ -23,6 +23,7 @@
#define ScriptController_h
#include "JSDOMWindowShell.h"
+#include "ScriptControllerBase.h"
#include "ScriptInstance.h"
#include <runtime/Protect.h>
#include <wtf/RefPtr.h>
@@ -62,17 +63,6 @@ class XSSAuditor;
typedef HashMap<void*, RefPtr<JSC::Bindings::RootObject> > RootObjectMap;
-enum ReasonForCallingCanExecuteScripts {
- AboutToExecuteScript,
- NotAboutToExecuteScript
-};
-
-// Whether to call the XSSAuditor to audit a script before passing it to the JavaScript engine.
-enum ShouldAllowXSS {
- AllowXSS,
- DoNotAllowXSS
-};
-
class ScriptController {
friend class ScriptCachedFrameData;
typedef WTF::HashMap< RefPtr<DOMWrapperWorld>, JSC::ProtectedPtr<JSDOMWindowShell> > ShellMap;
diff --git a/WebCore/bindings/js/ScriptDebugServer.cpp b/WebCore/bindings/js/ScriptDebugServer.cpp
index d1b5112..0a40f13 100644
--- a/WebCore/bindings/js/ScriptDebugServer.cpp
+++ b/WebCore/bindings/js/ScriptDebugServer.cpp
@@ -568,7 +568,11 @@ void ScriptDebugServer::recompileAllJSFunctionsSoon()
void ScriptDebugServer::recompileAllJSFunctions(Timer<ScriptDebugServer>*)
{
JSLock lock(SilenceAssertionsOnly);
- Debugger::recompileAllJSFunctions(JSDOMWindow::commonJSGlobalData());
+ // If JavaScript stack is not empty postpone recompilation.
+ if (JSDOMWindow::commonJSGlobalData()->dynamicGlobalObject)
+ recompileAllJSFunctionsSoon();
+ else
+ Debugger::recompileAllJSFunctions(JSDOMWindow::commonJSGlobalData());
}
void ScriptDebugServer::didAddListener(Page* page)
diff --git a/WebCore/bindings/js/ScriptEventListener.cpp b/WebCore/bindings/js/ScriptEventListener.cpp
index 467f16b..d2baf82 100644
--- a/WebCore/bindings/js/ScriptEventListener.cpp
+++ b/WebCore/bindings/js/ScriptEventListener.cpp
@@ -105,18 +105,18 @@ PassRefPtr<JSLazyEventListener> createAttributeEventListener(Frame* frame, Attri
return JSLazyEventListener::create(attr->localName().string(), eventParameterName(frame->document()->isSVGDocument()), attr->value(), 0, sourceURL, lineNumber, wrapper, mainThreadNormalWorld());
}
-String eventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* eventListener)
+String eventListenerHandlerBody(Document* document, EventListener* eventListener)
{
const JSEventListener* jsListener = JSEventListener::cast(eventListener);
if (!jsListener)
return "";
- JSC::JSObject* jsFunction = jsListener->jsFunction(context);
+ JSC::JSObject* jsFunction = jsListener->jsFunction(document);
if (!jsFunction)
return "";
- return ustringToString(jsFunction->toString(scriptState));
+ return ustringToString(jsFunction->toString(scriptStateFromNode(jsListener->isolatedWorld(), document)));
}
-bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String&, int&)
+bool eventListenerHandlerLocation(Document*, EventListener*, String&, int&)
{
// FIXME: Add support for getting function location.
return false;
diff --git a/WebCore/bindings/js/ScriptEventListener.h b/WebCore/bindings/js/ScriptEventListener.h
index f1f203c..f96f31e 100644
--- a/WebCore/bindings/js/ScriptEventListener.h
+++ b/WebCore/bindings/js/ScriptEventListener.h
@@ -45,8 +45,8 @@ namespace WebCore {
PassRefPtr<JSLazyEventListener> createAttributeEventListener(Node*, Attribute*);
PassRefPtr<JSLazyEventListener> createAttributeEventListener(Frame*, Attribute*);
- String eventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*);
- bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String& sourceName, int& lineNumber);
+ String eventListenerHandlerBody(Document*, EventListener*);
+ bool eventListenerHandlerLocation(Document*, EventListener*, String& sourceName, int& lineNumber);
} // namespace WebCore
#endif // ScriptEventListener_h
diff --git a/WebCore/bindings/scripts/CodeGenerator.pm b/WebCore/bindings/scripts/CodeGenerator.pm
index fbcee02..d106920 100644
--- a/WebCore/bindings/scripts/CodeGenerator.pm
+++ b/WebCore/bindings/scripts/CodeGenerator.pm
@@ -3,7 +3,7 @@
#
# Copyright (C) 2005 Nikolas Zimmermann <wildfox@kde.org>
# Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
-# Copyright (C) 2007 Apple Inc. All rights reserved.
+# Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
# Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
#
# This library is free software; you can redistribute it and/or
@@ -83,6 +83,7 @@ sub new
$useLayerOnTop = shift;
$preprocessor = shift;
$writeDependencies = shift;
+ $verbose = shift;
bless($reference, $object);
return $reference;
@@ -103,10 +104,10 @@ sub ProcessDocument
$defines = shift;
my $ifaceName = "CodeGenerator" . $useGenerator;
+ require $ifaceName . ".pm";
# Dynamically load external code generation perl module
- require $ifaceName . ".pm";
- $codeGenerator = $ifaceName->new($object, $useOutputDir, $useLayerOnTop, $preprocessor, $writeDependencies);
+ $codeGenerator = $ifaceName->new($object, $useOutputDir, $useLayerOnTop, $preprocessor, $writeDependencies, $verbose);
unless (defined($codeGenerator)) {
my $classes = $useDocument->classes;
foreach my $class (@$classes) {
@@ -401,8 +402,7 @@ sub ContentAttributeName
{
my ($generator, $implIncludes, $interfaceName, $attribute) = @_;
- my $contentAttributeName = $attribute->signature->extendedAttributes->{"Reflect"}
- || $attribute->signature->extendedAttributes->{"ReflectURL"};
+ my $contentAttributeName = $attribute->signature->extendedAttributes->{"Reflect"};
return undef if !$contentAttributeName;
$contentAttributeName = lc $generator->AttributeNameForGetterAndSetter($attribute) if $contentAttributeName eq "1";
@@ -424,8 +424,12 @@ sub GetterExpressionPrefix
}
my $functionName;
- if ($attribute->signature->extendedAttributes->{"ReflectURL"}) {
- $functionName = "getURLAttribute";
+ if ($attribute->signature->extendedAttributes->{"URL"}) {
+ if ($attribute->signature->extendedAttributes->{"NonEmpty"}) {
+ $functionName = "getNonEmptyURLAttribute";
+ } else {
+ $functionName = "getURLAttribute";
+ }
} elsif ($attribute->signature->type eq "boolean") {
$functionName = "hasAttribute";
} elsif ($attribute->signature->type eq "long") {
diff --git a/WebCore/bindings/scripts/CodeGeneratorJS.pm b/WebCore/bindings/scripts/CodeGeneratorJS.pm
index 4c0cbe1..a0a2098 100644
--- a/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -210,6 +210,11 @@ sub GetVisibleClassName
return "DOMException" if $className eq "DOMCoreException";
return "FormData" if $className eq "DOMFormData";
+ return "MimeType" if $className eq "DOMMimeType";
+ return "MimeTypeArray" if $className eq "DOMMimeTypeArray";
+ return "Plugin" if $className eq "DOMPlugin";
+ return "PluginArray" if $className eq "DOMPluginArray";
+
return $className;
}
@@ -2317,7 +2322,7 @@ sub JSValueToNative
return "static_cast<SVGPaint::SVGPaintType>($value.toInt32(exec))" if $type eq "SVGPaintType";
if ($type eq "DOMString") {
- return "valueToStringWithNullCheck(exec, $value)" if $signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"} || $signature->extendedAttributes->{"ReflectURL"};
+ return "valueToStringWithNullCheck(exec, $value)" if $signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"};
return "valueToStringWithUndefinedOrNullCheck(exec, $value)" if $signature->extendedAttributes->{"ConvertUndefinedOrNullToNullString"};
return "ustringToString($value.toString(exec))";
}
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 1ae0f8f..383bb74 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -675,7 +675,8 @@ END
END
} else {
my $reflect = $attribute->signature->extendedAttributes->{"Reflect"};
- if ($getterStringUsesImp && $reflect && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) {
+ my $url = $attribute->signature->extendedAttributes->{"URL"};
+ if ($getterStringUsesImp && $reflect && !$url && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) {
# Generate super-compact call for regular attribute getter:
my $contentAttributeName = $reflect eq "1" ? lc $attrName : $reflect;
my $namespace = $codeGenerator->NamespaceForAttributeName($interfaceName, $contentAttributeName);
@@ -863,10 +864,9 @@ END
} else {
my $attrType = GetTypeFromSignature($attribute->signature);
my $reflect = $attribute->signature->extendedAttributes->{"Reflect"};
- my $reflectURL = $attribute->signature->extendedAttributes->{"ReflectURL"};
- if (($reflect || $reflectURL) && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) {
+ if ($reflect && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) {
# Generate super-compact call for regular attribute setter:
- my $contentAttributeName = ($reflect || $reflectURL) eq "1" ? lc $attrName : ($reflect || $reflectURL);
+ my $contentAttributeName = $reflect eq "1" ? lc $attrName : $reflect;
my $namespace = $codeGenerator->NamespaceForAttributeName($interfaceName, $contentAttributeName);
$implIncludes{"${namespace}.h"} = 1;
push(@implContentDecls, " setElementStringAttr(info, ${namespace}::${contentAttributeName}Attr, value);\n");
@@ -2678,7 +2678,7 @@ sub GetNativeTypeFromSignature
my $mode = "";
if ($signature->extendedAttributes->{"ConvertUndefinedOrNullToNullString"}) {
$mode = "WithUndefinedOrNullCheck";
- } elsif ($signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"} || $signature->extendedAttributes->{"ReflectURL"}) {
+ } elsif ($signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"}) {
$mode = "WithNullCheck";
}
$type .= "<$mode>";
diff --git a/WebCore/bindings/scripts/IDLParser.pm b/WebCore/bindings/scripts/IDLParser.pm
index 3df96ab..e250a4d 100644
--- a/WebCore/bindings/scripts/IDLParser.pm
+++ b/WebCore/bindings/scripts/IDLParser.pm
@@ -259,7 +259,7 @@ sub ParseInterface
my @interfaceMethods = split(/;/, $interfaceData);
foreach my $line (@interfaceMethods) {
- if ($line =~ /attribute/) {
+ if ($line =~ /\Wattribute\W/) {
$line =~ /$IDLStructure::interfaceAttributeSelector/;
my $attributeType = (defined($1) ? $1 : die("Parsing error!\nSource:\n$line\n)"));
diff --git a/WebCore/bindings/scripts/InFilesParser.pm b/WebCore/bindings/scripts/InFilesParser.pm
index c6b3644..6539380 100644
--- a/WebCore/bindings/scripts/InFilesParser.pm
+++ b/WebCore/bindings/scripts/InFilesParser.pm
@@ -85,6 +85,10 @@ sub parse($)
my $perTagHandler = shift;
foreach (<$fileStream>) {
+ # Ignore whitespace, in case the .in files have the wrong EOL
+ # markers and those are getting treated as whitespace.
+ $_ = trimWS($_);
+
# Empty line, change from common parameter part
# to per tag part if we have started parsing.
if (/^$/) {
diff --git a/WebCore/bindings/scripts/generate-bindings.pl b/WebCore/bindings/scripts/generate-bindings.pl
index 44ed4d3..b293b3c 100755
--- a/WebCore/bindings/scripts/generate-bindings.pl
+++ b/WebCore/bindings/scripts/generate-bindings.pl
@@ -41,30 +41,36 @@ my @idlDirectories;
my $outputDirectory;
my $generator;
my $defines;
+my $prefix;
my $preprocessor;
my $writeDependencies;
+my $verbose;
GetOptions('include=s@' => \@idlDirectories,
'outputDir=s' => \$outputDirectory,
'generator=s' => \$generator,
'defines=s' => \$defines,
+ 'prefix=s' => \$prefix,
'preprocessor=s' => \$preprocessor,
+ 'verbose' => \$verbose,
'write-dependencies' => \$writeDependencies);
my $idlFile = $ARGV[0];
die('Must specify input file.') unless defined($idlFile);
-die('Must specify IDL search path.') unless @idlDirectories;
die('Must specify generator') unless defined($generator);
die('Must specify output directory.') unless defined($outputDirectory);
die('Must specify defines') unless defined($defines);
+if ($verbose) {
+ print "$generator: $idlFile\n";
+}
$defines =~ s/^\s+|\s+$//g; # trim whitespace
# Parse the given IDL file.
-my $parser = IDLParser->new(1);
+my $parser = IDLParser->new(!$verbose);
my $document = $parser->Parse($idlFile, $defines, $preprocessor);
# Generate desired output for given IDL file.
-my $codeGen = CodeGenerator->new(\@idlDirectories, $generator, $outputDirectory, 0, $preprocessor, $writeDependencies);
+my $codeGen = CodeGenerator->new(\@idlDirectories, $generator, $outputDirectory, 0, $preprocessor, $writeDependencies, $verbose);
$codeGen->ProcessDocument($document, $defines);
diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp
index ee8afcf..179b301 100644
--- a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp
+++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp
@@ -240,6 +240,22 @@ void WebDOMTestObj::setReflectedURLAttr(const WebDOMString& newReflectedURLAttr)
impl()->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, newReflectedURLAttr);
}
+WebDOMString WebDOMTestObj::reflectedNonEmptyURLAttr() const
+{
+ if (!impl())
+ return WebDOMString();
+
+ return static_cast<const WebCore::String&>(impl()->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr));
+}
+
+void WebDOMTestObj::setReflectedNonEmptyURLAttr(const WebDOMString& newReflectedNonEmptyURLAttr)
+{
+ if (!impl())
+ return;
+
+ impl()->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, newReflectedNonEmptyURLAttr);
+}
+
WebDOMString WebDOMTestObj::reflectedStringAttr() const
{
if (!impl())
@@ -288,7 +304,7 @@ void WebDOMTestObj::setReflectedCustomBooleanAttr(bool newReflectedCustomBoolean
impl()->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, newReflectedCustomBooleanAttr);
}
-WebDOMString WebDOMTestObj::reflectedURLAttr() const
+WebDOMString WebDOMTestObj::reflectedCustomURLAttr() const
{
if (!impl())
return WebDOMString();
@@ -296,12 +312,28 @@ WebDOMString WebDOMTestObj::reflectedURLAttr() const
return static_cast<const WebCore::String&>(impl()->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr));
}
-void WebDOMTestObj::setReflectedURLAttr(const WebDOMString& newReflectedURLAttr)
+void WebDOMTestObj::setReflectedCustomURLAttr(const WebDOMString& newReflectedCustomURLAttr)
+{
+ if (!impl())
+ return;
+
+ impl()->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedCustomURLAttr);
+}
+
+WebDOMString WebDOMTestObj::reflectedCustomNonEmptyURLAttr() const
+{
+ if (!impl())
+ return WebDOMString();
+
+ return static_cast<const WebCore::String&>(impl()->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr));
+}
+
+void WebDOMTestObj::setReflectedCustomNonEmptyURLAttr(const WebDOMString& newReflectedCustomNonEmptyURLAttr)
{
if (!impl())
return;
- impl()->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedURLAttr);
+ impl()->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, newReflectedCustomNonEmptyURLAttr);
}
int WebDOMTestObj::attrWithGetterException() const
diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h
index cdd47ed..1eb5ed3 100644
--- a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h
+++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h
@@ -63,14 +63,18 @@ public:
void setReflectedBooleanAttr(bool);
WebDOMString reflectedURLAttr() const;
void setReflectedURLAttr(const WebDOMString&);
+ WebDOMString reflectedNonEmptyURLAttr() const;
+ void setReflectedNonEmptyURLAttr(const WebDOMString&);
WebDOMString reflectedStringAttr() const;
void setReflectedStringAttr(const WebDOMString&);
int reflectedCustomIntegralAttr() const;
void setReflectedCustomIntegralAttr(int);
bool reflectedCustomBooleanAttr() const;
void setReflectedCustomBooleanAttr(bool);
- WebDOMString reflectedURLAttr() const;
- void setReflectedURLAttr(const WebDOMString&);
+ WebDOMString reflectedCustomURLAttr() const;
+ void setReflectedCustomURLAttr(const WebDOMString&);
+ WebDOMString reflectedCustomNonEmptyURLAttr() const;
+ void setReflectedCustomNonEmptyURLAttr(const WebDOMString&);
int attrWithGetterException() const;
void setAttrWithGetterException(int);
int attrWithSetterException() const;
diff --git a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp
index 3fcd3f7..b4b6787 100644
--- a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp
+++ b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp
@@ -180,6 +180,7 @@ webkit_dom_test_obj_serialized_value(WebKitDOMTestObj* self, WebKitDOMSerialized
void
webkit_dom_test_obj_idb_key(WebKitDOMTestObj* self, WebKitDOMIDBKey* key)
{
+ WebCore::JSMainThreadNullState state;
g_return_if_fail(self);
WebCore::TestObj * item = WebKit::core(self);
g_return_if_fail(key);
@@ -555,6 +556,27 @@ webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value
}
gchar*
+webkit_dom_test_obj_get_reflected_non_empty_url_attr(WebKitDOMTestObj* self)
+{
+ WebCore::JSMainThreadNullState state;
+ g_return_val_if_fail(self, 0);
+ WebCore::TestObj * item = WebKit::core(self);
+ gchar* res = convertToUTF8String(item->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr));
+ return res;
+}
+
+void
+webkit_dom_test_obj_set_reflected_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value)
+{
+ WebCore::JSMainThreadNullState state;
+ g_return_if_fail(self);
+ WebCore::TestObj * item = WebKit::core(self);
+ g_return_if_fail(value);
+ WebCore::String converted_value = WebCore::String::fromUTF8(value);
+ item->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, converted_value);
+}
+
+gchar*
webkit_dom_test_obj_get_reflected_string_attr(WebKitDOMTestObj* self)
{
WebCore::JSMainThreadNullState state;
@@ -614,7 +636,7 @@ webkit_dom_test_obj_set_reflected_custom_boolean_attr(WebKitDOMTestObj* self, gb
}
gchar*
-webkit_dom_test_obj_get_reflected_url_attr(WebKitDOMTestObj* self)
+webkit_dom_test_obj_get_reflected_custom_url_attr(WebKitDOMTestObj* self)
{
WebCore::JSMainThreadNullState state;
g_return_val_if_fail(self, 0);
@@ -624,7 +646,7 @@ webkit_dom_test_obj_get_reflected_url_attr(WebKitDOMTestObj* self)
}
void
-webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value)
+webkit_dom_test_obj_set_reflected_custom_url_attr(WebKitDOMTestObj* self, gchar* value)
{
WebCore::JSMainThreadNullState state;
g_return_if_fail(self);
@@ -634,6 +656,27 @@ webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value
item->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, converted_value);
}
+gchar*
+webkit_dom_test_obj_get_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self)
+{
+ WebCore::JSMainThreadNullState state;
+ g_return_val_if_fail(self, 0);
+ WebCore::TestObj * item = WebKit::core(self);
+ gchar* res = convertToUTF8String(item->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr));
+ return res;
+}
+
+void
+webkit_dom_test_obj_set_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value)
+{
+ WebCore::JSMainThreadNullState state;
+ g_return_if_fail(self);
+ WebCore::TestObj * item = WebKit::core(self);
+ g_return_if_fail(value);
+ WebCore::String converted_value = WebCore::String::fromUTF8(value);
+ item->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, converted_value);
+}
+
glong
webkit_dom_test_obj_get_attr_with_getter_exception(WebKitDOMTestObj* self, GError **error)
{
@@ -893,10 +936,12 @@ enum {
PROP_REFLECTED_INTEGRAL_ATTR,
PROP_REFLECTED_BOOLEAN_ATTR,
PROP_REFLECTED_URL_ATTR,
+ PROP_REFLECTED_NON_EMPTY_URL_ATTR,
PROP_REFLECTED_STRING_ATTR,
PROP_REFLECTED_CUSTOM_INTEGRAL_ATTR,
PROP_REFLECTED_CUSTOM_BOOLEAN_ATTR,
- PROP_REFLECTED_URL_ATTR,
+ PROP_REFLECTED_CUSTOM_URL_ATTR,
+ PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR,
PROP_ATTR_WITH_GETTER_EXCEPTION,
PROP_ATTR_WITH_SETTER_EXCEPTION,
PROP_STRING_ATTR_WITH_GETTER_EXCEPTION,
@@ -975,6 +1020,11 @@ static void webkit_dom_test_obj_set_property(GObject* object, guint prop_id, con
coreSelf->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, WebCore::String::fromUTF8(g_value_get_string(value)));
break;
}
+ case PROP_REFLECTED_NON_EMPTY_URL_ATTR:
+ {
+ coreSelf->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, WebCore::String::fromUTF8(g_value_get_string(value)));
+ break;
+ }
case PROP_REFLECTED_STRING_ATTR:
{
coreSelf->setAttribute(WebCore::HTMLNames::customContentStringAttrAttr, WebCore::String::fromUTF8(g_value_get_string(value)));
@@ -990,11 +1040,16 @@ static void webkit_dom_test_obj_set_property(GObject* object, guint prop_id, con
coreSelf->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, (g_value_get_boolean(value)));
break;
}
- case PROP_REFLECTED_URL_ATTR:
+ case PROP_REFLECTED_CUSTOM_URL_ATTR:
{
coreSelf->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, WebCore::String::fromUTF8(g_value_get_string(value)));
break;
}
+ case PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR:
+ {
+ coreSelf->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, WebCore::String::fromUTF8(g_value_get_string(value)));
+ break;
+ }
case PROP_ATTR_WITH_GETTER_EXCEPTION:
{
WebCore::ExceptionCode ec = 0;
@@ -1120,6 +1175,11 @@ static void webkit_dom_test_obj_get_property(GObject* object, guint prop_id, GVa
g_value_take_string(value, convertToUTF8String(coreSelf->getURLAttribute(WebCore::HTMLNames::reflectedurlattrAttr)));
break;
}
+ case PROP_REFLECTED_NON_EMPTY_URL_ATTR:
+ {
+ g_value_take_string(value, convertToUTF8String(coreSelf->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr)));
+ break;
+ }
case PROP_REFLECTED_STRING_ATTR:
{
g_value_take_string(value, convertToUTF8String(coreSelf->getAttribute(WebCore::HTMLNames::customContentStringAttrAttr)));
@@ -1135,11 +1195,16 @@ static void webkit_dom_test_obj_get_property(GObject* object, guint prop_id, GVa
g_value_set_boolean(value, coreSelf->hasAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr));
break;
}
- case PROP_REFLECTED_URL_ATTR:
+ case PROP_REFLECTED_CUSTOM_URL_ATTR:
{
g_value_take_string(value, convertToUTF8String(coreSelf->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr)));
break;
}
+ case PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR:
+ {
+ g_value_take_string(value, convertToUTF8String(coreSelf->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr)));
+ break;
+ }
case PROP_ATTR_WITH_GETTER_EXCEPTION:
{
WebCore::ExceptionCode ec = 0;
@@ -1320,6 +1385,13 @@ G_MAXLONG, /* max */
"", /* default */
WEBKIT_PARAM_READWRITE));
g_object_class_install_property(gobjectClass,
+ PROP_REFLECTED_NON_EMPTY_URL_ATTR,
+ g_param_spec_string("reflected-non-empty-url-attr", /* name */
+ "test_obj_reflected-non-empty-url-attr", /* short description */
+ "read-write gchar* TestObj.reflected-non-empty-url-attr", /* longer - could do with some extra doc stuff here */
+ "", /* default */
+ WEBKIT_PARAM_READWRITE));
+ g_object_class_install_property(gobjectClass,
PROP_REFLECTED_STRING_ATTR,
g_param_spec_string("reflected-string-attr", /* name */
"test_obj_reflected-string-attr", /* short description */
@@ -1343,10 +1415,17 @@ G_MAXLONG, /* max */
FALSE, /* default */
WEBKIT_PARAM_READWRITE));
g_object_class_install_property(gobjectClass,
- PROP_REFLECTED_URL_ATTR,
- g_param_spec_string("reflected-url-attr", /* name */
- "test_obj_reflected-url-attr", /* short description */
- "read-write gchar* TestObj.reflected-url-attr", /* longer - could do with some extra doc stuff here */
+ PROP_REFLECTED_CUSTOM_URL_ATTR,
+ g_param_spec_string("reflected-custom-url-attr", /* name */
+ "test_obj_reflected-custom-url-attr", /* short description */
+ "read-write gchar* TestObj.reflected-custom-url-attr", /* longer - could do with some extra doc stuff here */
+ "", /* default */
+ WEBKIT_PARAM_READWRITE));
+ g_object_class_install_property(gobjectClass,
+ PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR,
+ g_param_spec_string("reflected-custom-non-empty-url-attr", /* name */
+ "test_obj_reflected-custom-non-empty-url-attr", /* short description */
+ "read-write gchar* TestObj.reflected-custom-non-empty-url-attr", /* longer - could do with some extra doc stuff here */
"", /* default */
WEBKIT_PARAM_READWRITE));
g_object_class_install_property(gobjectClass,
diff --git a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h
index 61c3d95..baf278c 100644
--- a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h
+++ b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h
@@ -188,6 +188,12 @@ WEBKIT_API void
webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value);
WEBKIT_API gchar*
+webkit_dom_test_obj_get_reflected_non_empty_url_attr(WebKitDOMTestObj* self);
+
+WEBKIT_API void
+webkit_dom_test_obj_set_reflected_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value);
+
+WEBKIT_API gchar*
webkit_dom_test_obj_get_reflected_string_attr(WebKitDOMTestObj* self);
WEBKIT_API void
@@ -206,10 +212,16 @@ WEBKIT_API void
webkit_dom_test_obj_set_reflected_custom_boolean_attr(WebKitDOMTestObj* self, gboolean value);
WEBKIT_API gchar*
-webkit_dom_test_obj_get_reflected_url_attr(WebKitDOMTestObj* self);
+webkit_dom_test_obj_get_reflected_custom_url_attr(WebKitDOMTestObj* self);
WEBKIT_API void
-webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value);
+webkit_dom_test_obj_set_reflected_custom_url_attr(WebKitDOMTestObj* self, gchar* value);
+
+WEBKIT_API gchar*
+webkit_dom_test_obj_get_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self);
+
+WEBKIT_API void
+webkit_dom_test_obj_set_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value);
WEBKIT_API glong
webkit_dom_test_obj_get_attr_with_getter_exception(WebKitDOMTestObj* self, GError **error);
diff --git a/WebCore/bindings/scripts/test/JS/JSTestObj.cpp b/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
index 31a3f70..2f561f9 100644
--- a/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
+++ b/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
@@ -49,7 +49,7 @@ ASSERT_CLASS_FITS_IN_CELL(JSTestObj);
#define THUNK_GENERATOR(generator)
#endif
-static const HashTableValue JSTestObjTableValues[30] =
+static const HashTableValue JSTestObjTableValues[32] =
{
{ "readOnlyIntAttr", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyIntAttr), (intptr_t)0 THUNK_GENERATOR(0) },
{ "readOnlyStringAttr", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t)0 THUNK_GENERATOR(0) },
@@ -63,10 +63,12 @@ static const HashTableValue JSTestObjTableValues[30] =
{ "reflectedIntegralAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t)setJSTestObjReflectedIntegralAttr THUNK_GENERATOR(0) },
{ "reflectedBooleanAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t)setJSTestObjReflectedBooleanAttr THUNK_GENERATOR(0) },
{ "reflectedURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t)setJSTestObjReflectedURLAttr THUNK_GENERATOR(0) },
+ { "reflectedNonEmptyURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedNonEmptyURLAttr), (intptr_t)setJSTestObjReflectedNonEmptyURLAttr THUNK_GENERATOR(0) },
{ "reflectedStringAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t)setJSTestObjReflectedStringAttr THUNK_GENERATOR(0) },
{ "reflectedCustomIntegralAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t)setJSTestObjReflectedCustomIntegralAttr THUNK_GENERATOR(0) },
{ "reflectedCustomBooleanAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t)setJSTestObjReflectedCustomBooleanAttr THUNK_GENERATOR(0) },
- { "reflectedURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t)setJSTestObjReflectedURLAttr THUNK_GENERATOR(0) },
+ { "reflectedCustomURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t)setJSTestObjReflectedCustomURLAttr THUNK_GENERATOR(0) },
+ { "reflectedCustomNonEmptyURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomNonEmptyURLAttr), (intptr_t)setJSTestObjReflectedCustomNonEmptyURLAttr THUNK_GENERATOR(0) },
{ "attrWithGetterException", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithGetterException), (intptr_t)setJSTestObjAttrWithGetterException THUNK_GENERATOR(0) },
{ "attrWithSetterException", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithSetterException), (intptr_t)setJSTestObjAttrWithSetterException THUNK_GENERATOR(0) },
{ "stringAttrWithGetterException", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t)setJSTestObjStringAttrWithGetterException THUNK_GENERATOR(0) },
@@ -90,7 +92,7 @@ static const HashTableValue JSTestObjTableValues[30] =
};
#undef THUNK_GENERATOR
-static JSC_CONST_HASHTABLE HashTable JSTestObjTable = { 69, 63, JSTestObjTableValues, 0 };
+static JSC_CONST_HASHTABLE HashTable JSTestObjTable = { 68, 63, JSTestObjTableValues, 0 };
/* Hash table for constructor */
#if ENABLE(JIT)
#define THUNK_GENERATOR(generator) , generator
@@ -336,6 +338,15 @@ JSValue jsTestObjReflectedURLAttr(ExecState* exec, JSValue slotBase, const Ident
return result;
}
+JSValue jsTestObjReflectedNonEmptyURLAttr(ExecState* exec, JSValue slotBase, const Identifier&)
+{
+ JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase));
+ UNUSED_PARAM(exec);
+ TestObj* imp = static_cast<TestObj*>(castedThis->impl());
+ JSValue result = jsString(exec, imp->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr));
+ return result;
+}
+
JSValue jsTestObjReflectedStringAttr(ExecState* exec, JSValue slotBase, const Identifier&)
{
JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase));
@@ -363,7 +374,7 @@ JSValue jsTestObjReflectedCustomBooleanAttr(ExecState* exec, JSValue slotBase, c
return result;
}
-JSValue jsTestObjReflectedURLAttr(ExecState* exec, JSValue slotBase, const Identifier&)
+JSValue jsTestObjReflectedCustomURLAttr(ExecState* exec, JSValue slotBase, const Identifier&)
{
JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase));
UNUSED_PARAM(exec);
@@ -372,6 +383,15 @@ JSValue jsTestObjReflectedURLAttr(ExecState* exec, JSValue slotBase, const Ident
return result;
}
+JSValue jsTestObjReflectedCustomNonEmptyURLAttr(ExecState* exec, JSValue slotBase, const Identifier&)
+{
+ JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase));
+ UNUSED_PARAM(exec);
+ TestObj* imp = static_cast<TestObj*>(castedThis->impl());
+ JSValue result = jsString(exec, imp->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr));
+ return result;
+}
+
JSValue jsTestObjAttrWithGetterException(ExecState* exec, JSValue slotBase, const Identifier&)
{
JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase));
@@ -558,6 +578,13 @@ void setJSTestObjReflectedURLAttr(ExecState* exec, JSObject* thisObject, JSValue
imp->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, valueToStringWithNullCheck(exec, value));
}
+void setJSTestObjReflectedNonEmptyURLAttr(ExecState* exec, JSObject* thisObject, JSValue value)
+{
+ JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject);
+ TestObj* imp = static_cast<TestObj*>(castedThis->impl());
+ imp->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, valueToStringWithNullCheck(exec, value));
+}
+
void setJSTestObjReflectedStringAttr(ExecState* exec, JSObject* thisObject, JSValue value)
{
JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject);
@@ -579,13 +606,20 @@ void setJSTestObjReflectedCustomBooleanAttr(ExecState* exec, JSObject* thisObjec
imp->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, value.toBoolean(exec));
}
-void setJSTestObjReflectedURLAttr(ExecState* exec, JSObject* thisObject, JSValue value)
+void setJSTestObjReflectedCustomURLAttr(ExecState* exec, JSObject* thisObject, JSValue value)
{
JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject);
TestObj* imp = static_cast<TestObj*>(castedThis->impl());
imp->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, valueToStringWithNullCheck(exec, value));
}
+void setJSTestObjReflectedCustomNonEmptyURLAttr(ExecState* exec, JSObject* thisObject, JSValue value)
+{
+ JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject);
+ TestObj* imp = static_cast<TestObj*>(castedThis->impl());
+ imp->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, valueToStringWithNullCheck(exec, value));
+}
+
void setJSTestObjAttrWithGetterException(ExecState* exec, JSObject* thisObject, JSValue value)
{
JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject);
diff --git a/WebCore/bindings/scripts/test/JS/JSTestObj.h b/WebCore/bindings/scripts/test/JS/JSTestObj.h
index 4dea3d2..c83e568 100644
--- a/WebCore/bindings/scripts/test/JS/JSTestObj.h
+++ b/WebCore/bindings/scripts/test/JS/JSTestObj.h
@@ -139,14 +139,18 @@ JSC::JSValue jsTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSValue, const
void setJSTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
JSC::JSValue jsTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
void setJSTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
+JSC::JSValue jsTestObjReflectedNonEmptyURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
+void setJSTestObjReflectedNonEmptyURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
JSC::JSValue jsTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
void setJSTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
JSC::JSValue jsTestObjReflectedCustomIntegralAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
void setJSTestObjReflectedCustomIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
JSC::JSValue jsTestObjReflectedCustomBooleanAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
void setJSTestObjReflectedCustomBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
-JSC::JSValue jsTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
-void setJSTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
+JSC::JSValue jsTestObjReflectedCustomURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
+void setJSTestObjReflectedCustomURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
+JSC::JSValue jsTestObjReflectedCustomNonEmptyURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
+void setJSTestObjReflectedCustomNonEmptyURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
JSC::JSValue jsTestObjAttrWithGetterException(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
void setJSTestObjAttrWithGetterException(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
JSC::JSValue jsTestObjAttrWithSetterException(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
diff --git a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h
index d38dece..1eac990 100644
--- a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h
+++ b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h
@@ -56,14 +56,18 @@
- (void)setReflectedBooleanAttr:(BOOL)newReflectedBooleanAttr;
- (NSString *)reflectedURLAttr;
- (void)setReflectedURLAttr:(NSString *)newReflectedURLAttr;
+- (NSString *)reflectedNonEmptyURLAttr;
+- (void)setReflectedNonEmptyURLAttr:(NSString *)newReflectedNonEmptyURLAttr;
- (NSString *)reflectedStringAttr;
- (void)setReflectedStringAttr:(NSString *)newReflectedStringAttr;
- (int)reflectedCustomIntegralAttr;
- (void)setReflectedCustomIntegralAttr:(int)newReflectedCustomIntegralAttr;
- (BOOL)reflectedCustomBooleanAttr;
- (void)setReflectedCustomBooleanAttr:(BOOL)newReflectedCustomBooleanAttr;
-- (NSString *)reflectedURLAttr;
-- (void)setReflectedURLAttr:(NSString *)newReflectedURLAttr;
+- (NSString *)reflectedCustomURLAttr;
+- (void)setReflectedCustomURLAttr:(NSString *)newReflectedCustomURLAttr;
+- (NSString *)reflectedCustomNonEmptyURLAttr;
+- (void)setReflectedCustomNonEmptyURLAttr:(NSString *)newReflectedCustomNonEmptyURLAttr;
- (int)attrWithGetterException;
- (void)setAttrWithGetterException:(int)newAttrWithGetterException;
- (int)attrWithSetterException;
diff --git a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm
index d71cb05..99c3cc6 100644
--- a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm
+++ b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm
@@ -202,6 +202,18 @@
IMPL->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, newReflectedURLAttr);
}
+- (NSString *)reflectedNonEmptyURLAttr
+{
+ WebCore::JSMainThreadNullState state;
+ return IMPL->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr);
+}
+
+- (void)setReflectedNonEmptyURLAttr:(NSString *)newReflectedNonEmptyURLAttr
+{
+ WebCore::JSMainThreadNullState state;
+ IMPL->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, newReflectedNonEmptyURLAttr);
+}
+
- (NSString *)reflectedStringAttr
{
WebCore::JSMainThreadNullState state;
@@ -238,16 +250,28 @@
IMPL->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, newReflectedCustomBooleanAttr);
}
-- (NSString *)reflectedURLAttr
+- (NSString *)reflectedCustomURLAttr
{
WebCore::JSMainThreadNullState state;
return IMPL->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr);
}
-- (void)setReflectedURLAttr:(NSString *)newReflectedURLAttr
+- (void)setReflectedCustomURLAttr:(NSString *)newReflectedCustomURLAttr
+{
+ WebCore::JSMainThreadNullState state;
+ IMPL->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedCustomURLAttr);
+}
+
+- (NSString *)reflectedCustomNonEmptyURLAttr
+{
+ WebCore::JSMainThreadNullState state;
+ return IMPL->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr);
+}
+
+- (void)setReflectedCustomNonEmptyURLAttr:(NSString *)newReflectedCustomNonEmptyURLAttr
{
WebCore::JSMainThreadNullState state;
- IMPL->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedURLAttr);
+ IMPL->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, newReflectedCustomNonEmptyURLAttr);
}
- (int)attrWithGetterException
diff --git a/WebCore/bindings/scripts/test/TestObj.idl b/WebCore/bindings/scripts/test/TestObj.idl
index 3467116..43fc211 100644
--- a/WebCore/bindings/scripts/test/TestObj.idl
+++ b/WebCore/bindings/scripts/test/TestObj.idl
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary formstrArg, with or without
* modification, are permitted provided that the following conditions
@@ -44,11 +45,13 @@ module test {
attribute [Reflect] DOMString reflectedStringAttr;
attribute [Reflect] long reflectedIntegralAttr;
attribute [Reflect] boolean reflectedBooleanAttr;
- attribute [ReflectURL] DOMString reflectedURLAttr;
+ attribute [Reflect,URL] DOMString reflectedURLAttr;
+ attribute [Reflect,NonEmpty,URL] DOMString reflectedNonEmptyURLAttr;
attribute [Reflect=customContentStringAttr] DOMString reflectedStringAttr;
attribute [Reflect=customContentIntegralAttr] long reflectedCustomIntegralAttr;
attribute [Reflect=customContentBooleanAttr] boolean reflectedCustomBooleanAttr;
- attribute [ReflectURL=customContentURLAttr] DOMString reflectedURLAttr;
+ attribute [Reflect=customContentURLAttr,URL] DOMString reflectedCustomURLAttr;
+ attribute [Reflect=customContentNonEmptyURLAttr,NonEmpty,URL] DOMString reflectedCustomNonEmptyURLAttr;
// Methods
void voidMethod();
diff --git a/WebCore/bindings/scripts/test/V8/V8TestObj.cpp b/WebCore/bindings/scripts/test/V8/V8TestObj.cpp
index 1ad8a41..0b9d034 100644
--- a/WebCore/bindings/scripts/test/V8/V8TestObj.cpp
+++ b/WebCore/bindings/scripts/test/V8/V8TestObj.cpp
@@ -218,6 +218,22 @@ static void reflectedURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8:
return;
}
+static v8::Handle<v8::Value> reflectedNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._get");
+ TestObj* imp = V8TestObj::toNative(info.Holder());
+ return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr));
+}
+
+static void reflectedNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._set");
+ TestObj* imp = V8TestObj::toNative(info.Holder());
+ V8Parameter<WithNullCheck> v = value;
+ imp->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, v);
+ return;
+}
+
static v8::Handle<v8::Value> reflectedStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
INC_STATS("DOM.TestObj.reflectedStringAttr._get");
@@ -266,22 +282,38 @@ static void reflectedCustomBooleanAttrAttrSetter(v8::Local<v8::String> name, v8:
return;
}
-static v8::Handle<v8::Value> reflectedURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+static v8::Handle<v8::Value> reflectedCustomURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
- INC_STATS("DOM.TestObj.reflectedURLAttr._get");
+ INC_STATS("DOM.TestObj.reflectedCustomURLAttr._get");
TestObj* imp = V8TestObj::toNative(info.Holder());
return v8String(imp->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr));
}
-static void reflectedURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+static void reflectedCustomURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
{
- INC_STATS("DOM.TestObj.reflectedURLAttr._set");
+ INC_STATS("DOM.TestObj.reflectedCustomURLAttr._set");
TestObj* imp = V8TestObj::toNative(info.Holder());
V8Parameter<WithNullCheck> v = value;
imp->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, v);
return;
}
+static v8::Handle<v8::Value> reflectedCustomNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+ INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._get");
+ TestObj* imp = V8TestObj::toNative(info.Holder());
+ return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr));
+}
+
+static void reflectedCustomNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
+{
+ INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._set");
+ TestObj* imp = V8TestObj::toNative(info.Holder());
+ V8Parameter<WithNullCheck> v = value;
+ imp->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, v);
+ return;
+}
+
static v8::Handle<v8::Value> attrWithGetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
INC_STATS("DOM.TestObj.attrWithGetterException._get");
@@ -912,16 +944,20 @@ static const BatchedAttribute TestObjAttrs[] = {
{"reflectedIntegralAttr", TestObjInternal::reflectedIntegralAttrAttrGetter, TestObjInternal::reflectedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'reflectedBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
{"reflectedBooleanAttr", TestObjInternal::reflectedBooleanAttrAttrGetter, TestObjInternal::reflectedBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
- // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'ReflectURL')
+ // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect')
{"reflectedURLAttr", TestObjInternal::reflectedURLAttrAttrGetter, TestObjInternal::reflectedURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+ // Attribute 'reflectedNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect')
+ {"reflectedNonEmptyURLAttr", TestObjInternal::reflectedNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'reflectedStringAttr' (Type: 'attribute' ExtAttr: 'Reflect')
{"reflectedStringAttr", TestObjInternal::reflectedStringAttrAttrGetter, TestObjInternal::reflectedStringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'reflectedCustomIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
{"reflectedCustomIntegralAttr", TestObjInternal::reflectedCustomIntegralAttrAttrGetter, TestObjInternal::reflectedCustomIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'reflectedCustomBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
{"reflectedCustomBooleanAttr", TestObjInternal::reflectedCustomBooleanAttrAttrGetter, TestObjInternal::reflectedCustomBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
- // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'ReflectURL')
- {"reflectedURLAttr", TestObjInternal::reflectedURLAttrAttrGetter, TestObjInternal::reflectedURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+ // Attribute 'reflectedCustomURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect')
+ {"reflectedCustomURLAttr", TestObjInternal::reflectedCustomURLAttrAttrGetter, TestObjInternal::reflectedCustomURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
+ // Attribute 'reflectedCustomNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect')
+ {"reflectedCustomNonEmptyURLAttr", TestObjInternal::reflectedCustomNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedCustomNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'attrWithGetterException' (Type: 'attribute' ExtAttr: '')
{"attrWithGetterException", TestObjInternal::attrWithGetterExceptionAttrGetter, TestObjInternal::attrWithGetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
// Attribute 'attrWithSetterException' (Type: 'attribute' ExtAttr: '')
diff --git a/WebCore/bindings/v8/IDBBindingUtilities.cpp b/WebCore/bindings/v8/IDBBindingUtilities.cpp
index 2f977e0..4b38a61 100644
--- a/WebCore/bindings/v8/IDBBindingUtilities.cpp
+++ b/WebCore/bindings/v8/IDBBindingUtilities.cpp
@@ -26,11 +26,11 @@
#include "config.h"
#include "IDBBindingUtilities.h"
+#if ENABLE(INDEXED_DATABASE)
+
#include "IDBKey.h"
#include "V8Binding.h"
-#if ENABLE(INDEXED_DATABASE)
-
namespace WebCore {
PassRefPtr<IDBKey> createIDBKeyFromValue(v8::Handle<v8::Value> value)
diff --git a/WebCore/bindings/v8/IDBBindingUtilities.h b/WebCore/bindings/v8/IDBBindingUtilities.h
index 04e5c29..76f2bba 100644
--- a/WebCore/bindings/v8/IDBBindingUtilities.h
+++ b/WebCore/bindings/v8/IDBBindingUtilities.h
@@ -26,11 +26,11 @@
#ifndef IDBBindingUtilities_h
#define IDBBindingUtilities_h
-#include <v8.h>
-#include <wtf/PassRefPtr.h>
-
#if ENABLE(INDEXED_DATABASE)
+#include <v8.h>
+#include <wtf/Forward.h>
+
namespace WebCore {
class IDBKey;
diff --git a/WebCore/bindings/v8/ScriptCallStack.cpp b/WebCore/bindings/v8/ScriptCallStack.cpp
index 89809b2..cdc9662 100644
--- a/WebCore/bindings/v8/ScriptCallStack.cpp
+++ b/WebCore/bindings/v8/ScriptCallStack.cpp
@@ -31,6 +31,7 @@
#include "config.h"
#include "ScriptCallStack.h"
+#include "InspectorValues.h"
#include "ScriptScope.h"
#include "ScriptController.h"
#include "ScriptDebugServer.h"
@@ -93,13 +94,30 @@ const ScriptCallFrame& ScriptCallStack::at(unsigned index) const
return m_lastCaller;
}
-bool ScriptCallStack::stackTrace(int frameLimit, ScriptState* state, ScriptArray& stackTrace)
+bool ScriptCallStack::stackTrace(int frameLimit, const RefPtr<InspectorArray>& stackTrace)
{
- ScriptScope scope(state);
+ if (!v8::Context::InContext())
+ return false;
+ v8::Handle<v8::Context> context = v8::Context::GetCurrent();
+ if (context.IsEmpty())
+ return false;
+ v8::HandleScope scope;
+ v8::Context::Scope contextScope(context);
v8::Handle<v8::StackTrace> trace(v8::StackTrace::CurrentStackTrace(frameLimit));
- if (trace.IsEmpty() || !trace->GetFrameCount())
+ int frameCount = trace->GetFrameCount();
+ if (trace.IsEmpty() || !frameCount)
return false;
- stackTrace = ScriptArray(state, trace->AsArray());
+ for (int i = 0; i < frameCount; ++i) {
+ v8::Handle<v8::StackFrame> frame = trace->GetFrame(i);
+ RefPtr<InspectorObject> frameObject = InspectorObject::create();
+ v8::Local<v8::String> scriptName = frame->GetScriptName();
+ frameObject->setString("scriptName", scriptName.IsEmpty() ? "" : toWebCoreString(scriptName));
+ v8::Local<v8::String> functionName = frame->GetFunctionName();
+ frameObject->setString("functionName", functionName.IsEmpty() ? "" : toWebCoreString(functionName));
+ frameObject->setNumber("lineNumber", frame->GetLineNumber());
+ frameObject->setNumber("column", frame->GetColumn());
+ stackTrace->push(frameObject);
+ }
return true;
}
diff --git a/WebCore/bindings/v8/ScriptCallStack.h b/WebCore/bindings/v8/ScriptCallStack.h
index 8b02814..80d5f76 100644
--- a/WebCore/bindings/v8/ScriptCallStack.h
+++ b/WebCore/bindings/v8/ScriptCallStack.h
@@ -36,6 +36,7 @@
#include "ScriptState.h"
#include "ScriptValue.h"
#include <wtf/Noncopyable.h>
+#include <wtf/RefPtr.h>
namespace v8 {
class Arguments;
@@ -43,6 +44,8 @@ namespace v8 {
namespace WebCore {
+class InspectorArray;
+
class ScriptCallStack : public Noncopyable {
public:
static ScriptCallStack* create(const v8::Arguments&, unsigned skipArgumentCount = 0);
@@ -57,7 +60,7 @@ public:
// lineNumber: <1 based line number>
// column: <1 based column offset on the line>
// }
- static bool stackTrace(int frameLimit, ScriptState* state, ScriptArray& stackTrace);
+ static bool stackTrace(int frameLimit, const RefPtr<InspectorArray>& stackTrace);
const ScriptCallFrame& at(unsigned) const;
// FIXME: implement retrieving and storing call stack trace
diff --git a/WebCore/bindings/v8/ScriptController.cpp b/WebCore/bindings/v8/ScriptController.cpp
index 889642f..2396de0 100644
--- a/WebCore/bindings/v8/ScriptController.cpp
+++ b/WebCore/bindings/v8/ScriptController.cpp
@@ -290,13 +290,19 @@ void ScriptController::bindToWindowObject(Frame* frame, const String& key, NPObj
void ScriptController::collectGarbage()
{
v8::HandleScope handleScope;
- v8::Handle<v8::Context> v8Context = V8Proxy::mainWorldContext(m_proxy->frame());
+
+ v8::Persistent<v8::Context> v8Context = v8::Context::New();
if (v8Context.IsEmpty())
return;
-
- v8::Context::Scope scope(v8Context);
-
- m_proxy->evaluate(ScriptSourceCode("if (window.gc) void(gc());"), 0);
+ {
+ v8::Context::Scope scope(v8Context);
+ v8::Local<v8::String> source = v8::String::New("if (gc) gc();");
+ v8::Local<v8::String> name = v8::String::New("gc");
+ v8::Handle<v8::Script> script = v8::Script::Compile(source, name);
+ if (!script.IsEmpty())
+ script->Run();
+ }
+ v8Context.Dispose();
}
void ScriptController::lowMemoryNotification()
diff --git a/WebCore/bindings/v8/ScriptController.h b/WebCore/bindings/v8/ScriptController.h
index 3187180..75ae0bf 100644
--- a/WebCore/bindings/v8/ScriptController.h
+++ b/WebCore/bindings/v8/ScriptController.h
@@ -31,6 +31,7 @@
#ifndef ScriptController_h
#define ScriptController_h
+#include "ScriptControllerBase.h"
#include "ScriptInstance.h"
#include "ScriptValue.h"
@@ -55,17 +56,6 @@ class String;
class Widget;
class XSSAuditor;
-enum ReasonForCallingCanExecuteScripts {
- AboutToExecuteScript,
- NotAboutToExecuteScript
-};
-
-// Whether to call the XSSAuditor to audit a script before passing it to the JavaScript engine.
-enum ShouldAllowXSS {
- AllowXSS,
- DoNotAllowXSS
-};
-
class ScriptController {
public:
ScriptController(Frame*);
diff --git a/WebCore/bindings/v8/ScriptDebugServer.cpp b/WebCore/bindings/v8/ScriptDebugServer.cpp
index 8553ee5..138237b 100644
--- a/WebCore/bindings/v8/ScriptDebugServer.cpp
+++ b/WebCore/bindings/v8/ScriptDebugServer.cpp
@@ -356,6 +356,10 @@ void ScriptDebugServer::handleV8DebugEvent(const v8::Debug::EventDetails& eventD
if (!stackTrace->GetFrameCount())
return;
}
+
+ // Don't allow nested breaks.
+ if (m_pausedPage)
+ return;
m_executionState.set(eventDetails.GetExecutionState());
m_pausedPage = frame->page();
ScriptState* currentCallFrameState = mainWorldScriptState(frame);
diff --git a/WebCore/bindings/v8/ScriptEventListener.cpp b/WebCore/bindings/v8/ScriptEventListener.cpp
index 63e7dff..72df79d 100644
--- a/WebCore/bindings/v8/ScriptEventListener.cpp
+++ b/WebCore/bindings/v8/ScriptEventListener.cpp
@@ -100,28 +100,32 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame* frame, Attri
return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld));
}
-String eventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener)
+String eventListenerHandlerBody(Document* document, EventListener* listener)
{
if (listener->type() != EventListener::JSEventListenerType)
return "";
- ScriptScope scope(scriptState);
+ v8::HandleScope scope;
V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener);
- v8::Handle<v8::Object> function = v8Listener->getListenerObject(context);
+ v8::Handle<v8::Context> context = toV8Context(document, v8Listener->worldContext());
+ v8::Context::Scope contextScope(context);
+ v8::Handle<v8::Object> function = v8Listener->getListenerObject(document);
if (function.IsEmpty())
return "";
return toWebCoreStringWithNullCheck(function);
}
-bool eventListenerHandlerLocation(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener, String& sourceName, int& lineNumber)
+bool eventListenerHandlerLocation(Document* document, EventListener* listener, String& sourceName, int& lineNumber)
{
if (listener->type() != EventListener::JSEventListenerType)
return false;
- ScriptScope scope(scriptState);
+ v8::HandleScope scope;
V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener);
- v8::Handle<v8::Object> object = v8Listener->getListenerObject(context);
+ v8::Handle<v8::Context> context = toV8Context(document, v8Listener->worldContext());
+ v8::Context::Scope contextScope(context);
+ v8::Handle<v8::Object> object = v8Listener->getListenerObject(document);
if (object.IsEmpty() || !object->IsFunction())
return false;
diff --git a/WebCore/bindings/v8/ScriptEventListener.h b/WebCore/bindings/v8/ScriptEventListener.h
index 7815e29..0fce088 100644
--- a/WebCore/bindings/v8/ScriptEventListener.h
+++ b/WebCore/bindings/v8/ScriptEventListener.h
@@ -38,15 +38,15 @@
namespace WebCore {
class Attribute;
+ class Document;
class EventListener;
class Frame;
class Node;
- class ScriptState;
PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node*, Attribute*);
PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame*, Attribute*);
- String eventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*);
- bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String& sourceName, int& lineNumber);
+ String eventListenerHandlerBody(Document*, EventListener*);
+ bool eventListenerHandlerLocation(Document*, EventListener*, String& sourceName, int& lineNumber);
} // namespace WebCore
diff --git a/WebCore/bindings/v8/ScriptSourceCode.h b/WebCore/bindings/v8/ScriptSourceCode.h
index dbc9d5e..485daea 100644
--- a/WebCore/bindings/v8/ScriptSourceCode.h
+++ b/WebCore/bindings/v8/ScriptSourceCode.h
@@ -46,6 +46,14 @@ public:
, m_url(url)
, m_startLine(startLine)
{
+ // FIXME: Copying the source to strip BOMs isn't strictly necessary
+ // because V8 treats BOMs as whitespace. However, it is here because it
+ // must be in sync with CachedScript::script() which strips the BOMs. We
+ // should investigate the performance implications.
+ if (m_source.length()) {
+ bool scratch = false;
+ m_source = String(source.impl()->copyStringWithoutBOMs(false, scratch));
+ }
}
// We lose the encoding information from CachedScript.
diff --git a/WebCore/bindings/v8/V8AbstractEventListener.h b/WebCore/bindings/v8/V8AbstractEventListener.h
index 0afbed5..4b36ffb 100644
--- a/WebCore/bindings/v8/V8AbstractEventListener.h
+++ b/WebCore/bindings/v8/V8AbstractEventListener.h
@@ -96,6 +96,8 @@ namespace WebCore {
// Dispose listener object and clear the handle.
void disposeListenerObject();
+ const WorldContextHandle& worldContext() const { return m_worldContext; }
+
protected:
V8AbstractEventListener(bool isAttribute, const WorldContextHandle& worldContext);
@@ -108,8 +110,6 @@ namespace WebCore {
// Get the receiver object to use for event listener call.
v8::Local<v8::Object> getReceiverObject(Event*);
- const WorldContextHandle& worldContext() const { return m_worldContext; }
-
private:
// Implementation of EventListener function.
virtual bool virtualisAttribute() const { return m_isAttribute; }
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index 596090d..b5703d2 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -224,8 +224,7 @@ PassRefPtr<NodeFilter> V8DOMWrapper::wrapNativeNodeFilter(v8::Handle<v8::Value>
if (!filter->IsFunction())
return 0;
- NodeFilterCondition* condition = new V8NodeFilterCondition(filter);
- return NodeFilter::create(condition);
+ return NodeFilter::create(V8NodeFilterCondition::create(filter));
}
static bool globalObjectPrototypeIsDOMWindow(v8::Handle<v8::Object> objectPrototype)
diff --git a/WebCore/bindings/v8/V8NodeFilterCondition.h b/WebCore/bindings/v8/V8NodeFilterCondition.h
index 5850b69..b864e5e 100644
--- a/WebCore/bindings/v8/V8NodeFilterCondition.h
+++ b/WebCore/bindings/v8/V8NodeFilterCondition.h
@@ -33,6 +33,7 @@
#include "NodeFilterCondition.h"
#include <v8.h>
+#include <wtf/PassRefPtr.h>
// NodeFilter is a JavaScript function that takes a Node as parameter and returns a short (ACCEPT, SKIP, REJECT) as the result.
namespace WebCore {
@@ -43,12 +44,18 @@ namespace WebCore {
// NodeFilterCondition is a wrapper around a NodeFilter JS function.
class V8NodeFilterCondition : public NodeFilterCondition {
public:
- explicit V8NodeFilterCondition(v8::Handle<v8::Value> filter);
+ static PassRefPtr<V8NodeFilterCondition> create(v8::Handle<v8::Value> filter)
+ {
+ return adoptRef(new V8NodeFilterCondition(filter));
+ }
+
virtual ~V8NodeFilterCondition();
virtual short acceptNode(ScriptState*, Node*) const;
private:
+ explicit V8NodeFilterCondition(v8::Handle<v8::Value> filter);
+
mutable v8::Persistent<v8::Value> m_filter;
};
diff --git a/WebCore/bindings/v8/V8Utilities.cpp b/WebCore/bindings/v8/V8Utilities.cpp
index ffccb06..f780218 100644
--- a/WebCore/bindings/v8/V8Utilities.cpp
+++ b/WebCore/bindings/v8/V8Utilities.cpp
@@ -100,10 +100,24 @@ bool processingUserGesture()
return frame && frame->script()->processingUserGesture();
}
+Frame* callingOrEnteredFrame()
+{
+ Frame* frame = V8Proxy::retrieveFrameForCallingContext();
+ if (!frame) {
+ // Unfortunately, when processing script from a plug-in, we might not
+ // have a calling context. In those cases, we fall back to the
+ // entered context for security checks.
+ // FIXME: We need a better API for retrieving frames that abstracts
+ // away this concern.
+ frame = V8Proxy::retrieveFrameForEnteredContext();
+ }
+ return frame;
+}
+
bool shouldAllowNavigation(Frame* frame)
{
- Frame* callingFrame = V8Proxy::retrieveFrameForCallingContext();
- return callingFrame && callingFrame->loader()->shouldAllowNavigation(frame);
+ Frame* callingOrEntered = callingOrEnteredFrame();
+ return callingOrEntered && callingOrEntered->loader()->shouldAllowNavigation(frame);
}
KURL completeURL(const String& relativeURL)
@@ -117,12 +131,11 @@ KURL completeURL(const String& relativeURL)
void navigateIfAllowed(Frame* frame, const KURL& url, bool lockHistory, bool lockBackForwardList)
{
- Frame* callingFrame = V8Proxy::retrieveFrameForCallingContext();
- if (!callingFrame)
+ Frame* callingOrEntered = callingOrEnteredFrame();
+ if (!callingOrEntered)
return;
-
if (!protocolIsJavaScript(url) || ScriptController::isSafeScript(frame))
- frame->redirectScheduler()->scheduleLocationChange(url.string(), callingFrame->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, processingUserGesture());
+ frame->redirectScheduler()->scheduleLocationChange(url.string(), callingOrEntered->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, processingUserGesture());
}
ScriptExecutionContext* getScriptExecutionContext()
diff --git a/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp
index 58a85dc..ef428a9 100644
--- a/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp
@@ -52,8 +52,7 @@ static v8::Handle<v8::Value> getNamedItems(HTMLAllCollection* collection, Atomic
if (namedItems.size() == 1)
return toV8(namedItems.at(0).release());
- NodeList* list = new V8NamedNodesCollection(namedItems);
- return toV8(list);
+ return toV8(V8NamedNodesCollection::create(namedItems));
}
static v8::Handle<v8::Value> getItem(HTMLAllCollection* collection, v8::Handle<v8::Value> argument)
diff --git a/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp
index a4a0c57..9e89ce8 100644
--- a/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp
@@ -52,8 +52,7 @@ static v8::Handle<v8::Value> getNamedItems(HTMLCollection* collection, AtomicStr
if (namedItems.size() == 1)
return toV8(namedItems.at(0).release());
- NodeList* list = new V8NamedNodesCollection(namedItems);
- return toV8(list);
+ return toV8(V8NamedNodesCollection::create(namedItems));
}
static v8::Handle<v8::Value> getItem(HTMLCollection* collection, v8::Handle<v8::Value> argument)
diff --git a/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp
index e6f1b8f..09f0a6f 100644
--- a/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp
@@ -51,20 +51,20 @@ namespace WebCore {
v8::Local<v8::Object> V8HTMLDocument::WrapInShadowObject(v8::Local<v8::Object> wrapper, Node* impl)
{
- DEFINE_STATIC_LOCAL(v8::Persistent<v8::Function>, shadowConstructor, ());
- if (shadowConstructor.IsEmpty()) {
- v8::Local<v8::FunctionTemplate> shadowTemplate = v8::FunctionTemplate::New();
+ DEFINE_STATIC_LOCAL(v8::Persistent<v8::FunctionTemplate>, shadowTemplate, ());
+ if (shadowTemplate.IsEmpty()) {
+ shadowTemplate = v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New());
if (shadowTemplate.IsEmpty())
return v8::Local<v8::Object>();
shadowTemplate->SetClassName(v8::String::New("HTMLDocument"));
shadowTemplate->Inherit(V8HTMLDocument::GetTemplate());
shadowTemplate->InstanceTemplate()->SetInternalFieldCount(V8HTMLDocument::internalFieldCount);
- shadowConstructor = v8::Persistent<v8::Function>::New(shadowTemplate->GetFunction());
- if (shadowConstructor.IsEmpty())
- return v8::Local<v8::Object>();
}
- ASSERT(!shadowConstructor.IsEmpty());
+ v8::Local<v8::Function> shadowConstructor = shadowTemplate->GetFunction();
+ if (shadowConstructor.IsEmpty())
+ return v8::Local<v8::Object>();
+
v8::Local<v8::Object> shadow = shadowConstructor->NewInstance();
if (shadow.IsEmpty())
return v8::Local<v8::Object>();
diff --git a/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp
index 786a96a..9baf78a 100644
--- a/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp
@@ -77,8 +77,7 @@ v8::Handle<v8::Value> V8HTMLFormElement::namedPropertyGetter(v8::Local<v8::Strin
if (elements.size() == 1)
return toV8(elements.at(0).release());
- NodeList* collection = new V8NamedNodesCollection(elements);
- return toV8(collection);
+ return toV8(V8NamedNodesCollection::create(elements));
}
} // namespace WebCore
diff --git a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
index d0d8dac..13a9d30 100644
--- a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
@@ -70,8 +70,7 @@ v8::Handle<v8::Value> V8HTMLSelectElement::namedPropertyGetter(v8::Local<v8::Str
if (items.size() == 1)
return toV8(items.at(0).release());
- NodeList* list = new V8NamedNodesCollection(items);
- return toV8(list);
+ return toV8(V8NamedNodesCollection::create(items));
}
v8::Handle<v8::Value> V8HTMLSelectElement::indexedPropertyGetter(uint32_t index, const v8::AccessorInfo& info)
diff --git a/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp b/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp
index 5ef50a6..def1120 100644
--- a/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp
@@ -11,9 +11,6 @@
* 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
@@ -37,6 +34,7 @@
#include "SerializedScriptValue.h"
#include "V8IDBDatabaseRequest.h"
#include "V8IDBIndexRequest.h"
+#include "V8IDBKey.h"
#include "V8IDBObjectStoreRequest.h"
#include "V8IndexedDatabaseRequest.h"
@@ -56,6 +54,8 @@ v8::Handle<v8::Value> toV8(IDBAny* impl)
return toV8(impl->idbDatabaseRequest());
case IDBAny::IDBIndexRequestType:
return toV8(impl->idbIndexRequest());
+ case IDBAny::IDBKeyType:
+ return toV8(impl->idbKey());
case IDBAny::IDBObjectStoreRequestType:
return toV8(impl->idbObjectStoreRequest());
case IDBAny::IndexedDatabaseRequestType:
diff --git a/WebCore/bindings/v8/custom/V8NamedNodesCollection.h b/WebCore/bindings/v8/custom/V8NamedNodesCollection.h
index d13b7a8..0372de1 100644
--- a/WebCore/bindings/v8/custom/V8NamedNodesCollection.h
+++ b/WebCore/bindings/v8/custom/V8NamedNodesCollection.h
@@ -33,6 +33,7 @@
#include "Node.h"
#include "NodeList.h"
+#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
@@ -40,13 +41,19 @@ namespace WebCore {
class V8NamedNodesCollection : public NodeList {
public:
- explicit V8NamedNodesCollection(const Vector<RefPtr<Node> >& nodes)
- : m_nodes(nodes) { }
+ static PassRefPtr<NodeList> create(const Vector<RefPtr<Node> >& nodes)
+ {
+ return adoptRef(new V8NamedNodesCollection(nodes));
+ }
+
virtual unsigned length() const { return m_nodes.size(); }
virtual Node* item(unsigned) const;
virtual Node* itemWithName(const AtomicString&) const;
private:
+ explicit V8NamedNodesCollection(const Vector<RefPtr<Node> >& nodes)
+ : m_nodes(nodes) { }
+
Vector<RefPtr<Node> > m_nodes;
};
diff --git a/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp b/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
index e1a9c0e..fd6e120 100644
--- a/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
@@ -477,12 +477,12 @@ static v8::Handle<v8::Value> vertexAttribAndUniformHelperf(const v8::Arguments&
return v8::Undefined();
}
- v8::Handle<v8::Array> array =
- v8::Local<v8::Array>::Cast(args[1]);
- if (array.IsEmpty()) {
- V8Proxy::setDOMException(SYNTAX_ERR);
+ if (args[1].IsEmpty() || !args[1]->IsArray()) {
+ V8Proxy::throwTypeError();
return notHandledByInterceptor();
}
+ v8::Handle<v8::Array> array =
+ v8::Local<v8::Array>::Cast(args[1]);
uint32_t len = array->Length();
float* data = jsArrayToFloatArray(array, len);
if (!data) {
@@ -545,12 +545,12 @@ static v8::Handle<v8::Value> uniformHelperi(const v8::Arguments& args,
return v8::Undefined();
}
- v8::Handle<v8::Array> array =
- v8::Local<v8::Array>::Cast(args[1]);
- if (array.IsEmpty()) {
- V8Proxy::setDOMException(SYNTAX_ERR);
+ if (args[1].IsEmpty() || !args[1]->IsArray()) {
+ V8Proxy::throwTypeError();
return notHandledByInterceptor();
}
+ v8::Handle<v8::Array> array =
+ v8::Local<v8::Array>::Cast(args[1]);
uint32_t len = array->Length();
int* data = jsArrayToIntArray(array, len);
if (!data) {
@@ -658,12 +658,12 @@ static v8::Handle<v8::Value> uniformMatrixHelper(const v8::Arguments& args,
return v8::Undefined();
}
- v8::Handle<v8::Array> array =
- v8::Local<v8::Array>::Cast(args[2]);
- if (array.IsEmpty()) {
- V8Proxy::setDOMException(SYNTAX_ERR);
+ if (args[2].IsEmpty() || !args[2]->IsArray()) {
+ V8Proxy::throwTypeError();
return notHandledByInterceptor();
}
+ v8::Handle<v8::Array> array =
+ v8::Local<v8::Array>::Cast(args[2]);
uint32_t len = array->Length();
float* data = jsArrayToFloatArray(array, len);
if (!data) {
diff --git a/WebCore/bridge/jni/v8/JavaInstanceV8.cpp b/WebCore/bridge/jni/v8/JavaInstanceV8.cpp
index dd4750f..980bf91 100644
--- a/WebCore/bridge/jni/v8/JavaInstanceV8.cpp
+++ b/WebCore/bridge/jni/v8/JavaInstanceV8.cpp
@@ -32,11 +32,14 @@
#include "JavaClassV8.h"
#include <assert.h>
+<<<<<<< HEAD
// ANDROID
#define LOG_TAG "v8binding"
#include <utils/Log.h>
// END ANDROID
+=======
+>>>>>>> webkit.org at r63173
using namespace JSC::Bindings;
diff --git a/WebCore/bridge/qt/qt_instance.cpp b/WebCore/bridge/qt/qt_instance.cpp
index 1229919..3723ec0 100644
--- a/WebCore/bridge/qt/qt_instance.cpp
+++ b/WebCore/bridge/qt/qt_instance.cpp
@@ -192,6 +192,34 @@ void QtInstance::markAggregate(MarkStack& markStack)
if (val)
markStack.append(val);
}
+ foreach (QtField* field, m_fields.values()) {
+ bool mark = false;
+ if (field->fieldType() == QtField::MetaProperty)
+ mark = true;
+ else if (field->fieldType() == QtField::DynamicProperty) {
+ if (m_object && m_object->dynamicPropertyNames().indexOf(field->name()) >= 0)
+ mark = true;
+ } else if (m_object) {
+ QList<QObject*> children = m_object->children();
+ for (int index = 0; index < children.count(); ++index) {
+ QObject* child = children.at(index);
+ if (child->objectName().toLatin1() == field->name()) {
+ mark = true;
+ break;
+ }
+ }
+ }
+ if (mark) {
+ if (RefPtr<RootObject> ro = rootObject()) {
+ JSGlobalObject* globalobj = ro->globalObject();
+ if (globalobj) {
+ ExecState* exec = globalobj->globalExec();
+ JSValue val = field->valueFromInstance(exec, this);
+ markStack.append(val);
+ }
+ }
+ }
+ }
}
void QtInstance::begin()
diff --git a/WebCore/css/CSSComputedStyleDeclaration.cpp b/WebCore/css/CSSComputedStyleDeclaration.cpp
index 06779a9..c4ccdb3 100644
--- a/WebCore/css/CSSComputedStyleDeclaration.cpp
+++ b/WebCore/css/CSSComputedStyleDeclaration.cpp
@@ -691,9 +691,13 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
if (!style)
return 0;
+<<<<<<< HEAD
#ifdef ANDROID_LAYOUT
const Settings * settings = node->document()->frame() ? node->document()->frame()->settings() : 0;
#endif
+=======
+ propertyID = CSSProperty::resolveDirectionAwareProperty(propertyID, style->direction());
+>>>>>>> webkit.org at r63173
switch (static_cast<CSSPropertyID>(propertyID)) {
case CSSPropertyInvalid:
@@ -1480,6 +1484,14 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
case CSSPropertyTextUnderlineWidth:
break;
+ /* Directional properties are resolved by resolveDirectionAwareProperty() before the switch. */
+ case CSSPropertyWebkitMarginEnd:
+ case CSSPropertyWebkitMarginStart:
+ case CSSPropertyWebkitPaddingEnd:
+ case CSSPropertyWebkitPaddingStart:
+ ASSERT_NOT_REACHED();
+ break;
+
/* Unimplemented @font-face properties */
case CSSPropertyFontStretch:
case CSSPropertySrc:
@@ -1505,13 +1517,11 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
case CSSPropertyWebkitColumns:
case CSSPropertyWebkitColumnRule:
case CSSPropertyWebkitMarginCollapse:
- case CSSPropertyWebkitMarginStart:
case CSSPropertyWebkitMarquee:
case CSSPropertyWebkitMarqueeSpeed:
case CSSPropertyWebkitMask:
case CSSPropertyWebkitMaskRepeatX:
case CSSPropertyWebkitMaskRepeatY:
- case CSSPropertyWebkitPaddingStart:
case CSSPropertyWebkitPerspectiveOriginX:
case CSSPropertyWebkitPerspectiveOriginY:
case CSSPropertyWebkitTextStroke:
diff --git a/WebCore/css/CSSComputedStyleDeclaration.h b/WebCore/css/CSSComputedStyleDeclaration.h
index a2e8ba7..816d15a 100644
--- a/WebCore/css/CSSComputedStyleDeclaration.h
+++ b/WebCore/css/CSSComputedStyleDeclaration.h
@@ -22,14 +22,17 @@
#define CSSComputedStyleDeclaration_h
#include "CSSStyleDeclaration.h"
-#include "Node.h"
+#include "PlatformString.h"
#include "RenderStyleConstants.h"
+#include <wtf/RefPtr.h>
namespace WebCore {
class Color;
class CSSMutableStyleDeclaration;
class CSSPrimitiveValue;
+class Node;
+class RenderStyle;
class ShadowData;
enum EUpdateLayout { DoNotUpdateLayout = false, UpdateLayout = true };
diff --git a/WebCore/css/CSSFontFaceSource.cpp b/WebCore/css/CSSFontFaceSource.cpp
index 921b149..00dfcba 100644
--- a/WebCore/css/CSSFontFaceSource.cpp
+++ b/WebCore/css/CSSFontFaceSource.cpp
@@ -42,6 +42,7 @@
#include "HTMLNames.h"
#include "SVGFontData.h"
#include "SVGFontElement.h"
+#include "SVGFontFaceElement.h"
#include "SVGURIReference.h"
#endif
@@ -187,9 +188,10 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri
fontData.set(new SimpleFontData(tempData->platformData(), true, true));
}
- m_fontDataTable.set(hashKey, fontData.get());
- return fontData.release();
-}
+ SimpleFontData* fontDataRawPtr = fontData.leakPtr();
+ m_fontDataTable.set(hashKey, fontDataRawPtr);
+ return fontDataRawPtr;
}
+}
diff --git a/WebCore/css/CSSFontFaceSource.h b/WebCore/css/CSSFontFaceSource.h
index c6baef2..278ba72 100644
--- a/WebCore/css/CSSFontFaceSource.h
+++ b/WebCore/css/CSSFontFaceSource.h
@@ -31,10 +31,6 @@
#include "CachedResourceHandle.h"
#include <wtf/HashMap.h>
-#if ENABLE(SVG_FONTS)
-#include "SVGFontFaceElement.h"
-#endif
-
namespace WebCore {
class CachedFont;
@@ -42,6 +38,11 @@ class CSSFontFace;
class CSSFontSelector;
class FontDescription;
class SimpleFontData;
+#if ENABLE(SVG_FONTS)
+class SVGFontElement;
+class SVGFontFaceElement;
+#endif
+
class CSSFontFaceSource : public CachedResourceClient {
public:
diff --git a/WebCore/css/CSSHelper.cpp b/WebCore/css/CSSHelper.cpp
index a0daebd..e0ce7c3 100644
--- a/WebCore/css/CSSHelper.cpp
+++ b/WebCore/css/CSSHelper.cpp
@@ -79,8 +79,10 @@ String deprecatedParseURL(const String& url)
// Optimize for the likely case there there is nothing to strip.
if (l == length) {
int k;
+ // If the URL has any control characters in it, we have to strip them.
+ // '\r' (ascii value 13) is the largest control character.
for (k = 0; k < length; k++) {
- if (characters[k] > '\r')
+ if (characters[k] <= '\r')
break;
}
if (k == length)
diff --git a/WebCore/css/CSSImportRule.idl b/WebCore/css/CSSImportRule.idl
index 8e60905..05654fe 100644
--- a/WebCore/css/CSSImportRule.idl
+++ b/WebCore/css/CSSImportRule.idl
@@ -23,7 +23,7 @@ module css {
// Introduced in DOM Level 2:
interface CSSImportRule : CSSRule {
readonly attribute [ConvertNullStringTo=Null] DOMString href;
- readonly attribute stylesheets::MediaList media;
+ readonly attribute MediaList media;
readonly attribute CSSStyleSheet styleSheet;
};
diff --git a/WebCore/css/CSSMediaRule.idl b/WebCore/css/CSSMediaRule.idl
index 813bd70..4b75f49 100644
--- a/WebCore/css/CSSMediaRule.idl
+++ b/WebCore/css/CSSMediaRule.idl
@@ -22,7 +22,7 @@ module css {
// Introduced in DOM Level 2:
interface CSSMediaRule : CSSRule {
- readonly attribute stylesheets::MediaList media;
+ readonly attribute MediaList media;
readonly attribute CSSRuleList cssRules;
[OldStyleObjC] unsigned long insertRule(in DOMString rule,
diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp
index 087018b..be410b4 100644
--- a/WebCore/css/CSSParser.cpp
+++ b/WebCore/css/CSSParser.cpp
@@ -155,8 +155,8 @@ CSSParser::CSSParser(bool strictParsing)
, m_ruleRanges(0)
, m_data(0)
, yy_start(1)
- , m_line(0)
- , m_lastSelectorLine(0)
+ , m_lineNumber(0)
+ , m_lastSelectorLineNumber(0)
, m_allowImportRules(true)
, m_allowVariablesRules(true)
, m_allowNamespaceDeclarations(true)
@@ -235,7 +235,7 @@ void CSSParser::setupParser(const char* prefix, const String& string, const char
resetRuleBodyMarks();
}
-void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, StyleRuleRanges* ruleRangeMap)
+void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, int startLineNumber, StyleRuleRanges* ruleRangeMap)
{
#ifdef ANDROID_INSTRUMENT
android::TimeCounter::start(android::TimeCounter::CSSParseTimeCounter);
@@ -244,6 +244,7 @@ void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, StyleRule
m_defaultNamespace = starAtom; // Reset the default namespace.
m_ruleRanges = ruleRangeMap;
+ m_lineNumber = startLineNumber;
setupParser("", string, "");
cssyyparse(this);
m_ruleRanges = 0;
@@ -318,21 +319,21 @@ bool CSSParser::parseValue(CSSMutableStyleDeclaration* declaration, int id, cons
// possible to set up a default color.
bool CSSParser::parseColor(RGBA32& color, const String& string, bool strict)
{
+ // First try creating a color specified by name, rgb() or "#" syntax.
+ if (parseColor(string, color, strict))
+ return true;
+
CSSParser parser(true);
+ RefPtr<CSSMutableStyleDeclaration> dummyStyleDeclaration = CSSMutableStyleDeclaration::create();
- // First try creating a color specified by name or the "#" syntax.
- if (!parser.parseColor(string, color, strict)) {
- RefPtr<CSSMutableStyleDeclaration> dummyStyleDeclaration = CSSMutableStyleDeclaration::create();
+ // Now try to create a color from rgba() syntax.
+ if (!parser.parseColor(dummyStyleDeclaration.get(), string))
+ return false;
- // Now try to create a color from the rgb() or rgba() syntax.
- if (parser.parseColor(dummyStyleDeclaration.get(), string)) {
- CSSValue* value = parser.m_parsedProperties[0]->value();
- if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) {
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- color = primitiveValue->getRGBA32Value();
- }
- } else
- 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();
}
return true;
@@ -439,9 +440,9 @@ void CSSParser::addProperty(int propId, PassRefPtr<CSSValue> value, bool importa
if (m_maxParsedProperties > UINT_MAX / sizeof(CSSProperty*))
return;
m_parsedProperties = static_cast<CSSProperty**>(fastRealloc(m_parsedProperties,
- m_maxParsedProperties * sizeof(CSSProperty*)));
+ m_maxParsedProperties * sizeof(CSSProperty*)));
}
- m_parsedProperties[m_numParsedProperties++] = prop.release();
+ m_parsedProperties[m_numParsedProperties++] = prop.leakPtr();
}
void CSSParser::rollbackLastProperties(int num)
@@ -1038,6 +1039,7 @@ bool CSSParser::parseValue(int propId, bool important)
case CSSPropertyPaddingBottom: // <length> | <percentage>
case CSSPropertyPaddingLeft: ////
case CSSPropertyWebkitPaddingStart:
+ case CSSPropertyWebkitPaddingEnd:
validPrimitive = (!id && validUnit(value, FLength | FPercent | FNonNeg, m_strict));
break;
@@ -1098,6 +1100,7 @@ bool CSSParser::parseValue(int propId, bool important)
case CSSPropertyMarginBottom: // <length> | <percentage> | auto | inherit
case CSSPropertyMarginLeft: ////
case CSSPropertyWebkitMarginStart:
+ case CSSPropertyWebkitMarginEnd:
if (id == CSSValueAuto)
validPrimitive = true;
else
@@ -3644,7 +3647,14 @@ bool CSSParser::parseFontFaceUnicodeRange()
{
RefPtr<CSSValueList> values = CSSValueList::createCommaSeparated();
bool failed = false;
- while (m_valueList->current()) {
+ bool operatorExpected = false;
+ for (; m_valueList->current(); m_valueList->next(), operatorExpected = !operatorExpected) {
+ if (operatorExpected) {
+ if (m_valueList->current()->unit == CSSParserValue::Operator && m_valueList->current()->iValue == ',')
+ continue;
+ failed = true;
+ break;
+ }
if (m_valueList->current()->unit != CSSPrimitiveValue::CSS_UNICODE_RANGE) {
failed = true;
break;
@@ -3719,7 +3729,6 @@ bool CSSParser::parseFontFaceUnicodeRange()
}
if (from <= to)
values->append(CSSUnicodeRangeValue::create(from, to));
- m_valueList->next();
}
if (failed || !values->length())
return false;
@@ -3768,13 +3777,23 @@ static inline bool parseColorInt(const UChar*& string, const UChar* end, UChar t
bool CSSParser::parseColor(const String &name, RGBA32& rgb, bool strict)
{
- if (!strict && Color::parseHexColor(name, rgb))
- return true;
+ const UChar* characters = name.characters();
+ unsigned length = name.length();
+
+ if (!strict && length >= 3) {
+ if (name[0] == '#') {
+ if (Color::parseHexColor(characters + 1, length - 1, rgb))
+ return true;
+ } else {
+ if (Color::parseHexColor(characters, length, rgb))
+ return true;
+ }
+ }
// Try rgb() syntax.
if (name.startsWith("rgb(")) {
- const UChar* current = name.characters() + 4;
- const UChar* end = name.characters() + name.length();
+ const UChar* current = characters + 4;
+ const UChar* end = characters + length;
int red;
int green;
int blue;
@@ -5167,7 +5186,7 @@ void CSSParser::countLines()
{
for (UChar* current = yytext; current < yytext + yyleng; ++current) {
if (*current == '\n')
- ++m_line;
+ ++m_lineNumber;
}
}
@@ -5341,7 +5360,7 @@ CSSRule* CSSParser::createStyleRule(Vector<CSSSelector*>* selectors)
CSSStyleRule* result = 0;
markRuleBodyEnd();
if (selectors) {
- RefPtr<CSSStyleRule> rule = CSSStyleRule::create(m_styleSheet, m_lastSelectorLine);
+ RefPtr<CSSStyleRule> rule = CSSStyleRule::create(m_styleSheet, m_lastSelectorLineNumber);
rule->adoptSelectorVector(*selectors);
if (m_hasFontFaceOnlyValues)
deleteFontFaceOnlyValues();
@@ -5447,7 +5466,7 @@ CSSRule* CSSParser::createPageRule(CSSSelector* pageSelector)
m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false;
CSSPageRule* pageRule = 0;
if (pageSelector) {
- RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, pageSelector, m_lastSelectorLine);
+ RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, pageSelector, m_lastSelectorLineNumber);
rule->setDeclaration(CSSMutableStyleDeclaration::create(rule.get(), m_parsedProperties, m_numParsedProperties));
pageRule = rule.get();
m_parsedStyleObjects.append(rule.release());
@@ -5601,7 +5620,7 @@ void CSSParser::invalidBlockHit()
void CSSParser::updateLastSelectorLineAndPosition()
{
- m_lastSelectorLine = m_line;
+ m_lastSelectorLineNumber = m_lineNumber;
markRuleBodyStart();
}
diff --git a/WebCore/css/CSSParser.h b/WebCore/css/CSSParser.h
index 81b1ae2..5d76a41 100644
--- a/WebCore/css/CSSParser.h
+++ b/WebCore/css/CSSParser.h
@@ -60,7 +60,7 @@ namespace WebCore {
CSSParser(bool strictParsing = true);
~CSSParser();
- void parseSheet(CSSStyleSheet*, const String&, StyleRuleRanges* ruleRangeMap = 0);
+ void parseSheet(CSSStyleSheet*, const String&, int startLineNumber = 0, StyleRuleRanges* ruleRangeMap = 0);
PassRefPtr<CSSRule> parseRule(CSSStyleSheet*, const String&);
PassRefPtr<CSSRule> parseKeyframeRule(CSSStyleSheet*, const String&);
bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important);
@@ -288,8 +288,8 @@ namespace WebCore {
int yyleng;
int yyTok;
int yy_start;
- int m_line;
- int m_lastSelectorLine;
+ int m_lineNumber;
+ int m_lastSelectorLineNumber;
bool m_allowImportRules;
bool m_allowVariablesRules;
diff --git a/WebCore/css/CSSPrimitiveValueMappings.h b/WebCore/css/CSSPrimitiveValueMappings.h
index baa1ab8..9533f68 100644
--- a/WebCore/css/CSSPrimitiveValueMappings.h
+++ b/WebCore/css/CSSPrimitiveValueMappings.h
@@ -36,7 +36,6 @@
#include "FontSmoothingMode.h"
#include "GraphicsTypes.h"
#include "Path.h"
-#include "RenderStyleConstants.h"
#include "SVGRenderStyleDefs.h"
#include "TextDirection.h"
#include "TextRenderingMode.h"
@@ -253,6 +252,9 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e)
case MediaVolumeSliderPart:
m_value.ident = CSSValueMediaVolumeSlider;
break;
+ case MediaVolumeSliderMuteButtonPart:
+ m_value.ident = CSSValueMediaVolumeSliderMuteButton;
+ break;
case MediaVolumeSliderThumbPart:
m_value.ident = CSSValueMediaVolumeSliderthumb;
break;
diff --git a/WebCore/css/CSSProperty.cpp b/WebCore/css/CSSProperty.cpp
index d7f2175..777c0c0 100644
--- a/WebCore/css/CSSProperty.cpp
+++ b/WebCore/css/CSSProperty.cpp
@@ -38,4 +38,20 @@ bool operator==(const CSSProperty& a, const CSSProperty& b)
return a.m_id == b.m_id && a.m_important == b.m_important && a.m_value == b.m_value;
}
+int CSSProperty::resolveDirectionAwareProperty(int propertyID, TextDirection direction)
+{
+ switch (static_cast<CSSPropertyID>(propertyID)) {
+ case CSSPropertyWebkitMarginEnd:
+ return direction == LTR ? CSSPropertyMarginRight : CSSPropertyMarginLeft;
+ case CSSPropertyWebkitMarginStart:
+ return direction == LTR ? CSSPropertyMarginLeft : CSSPropertyMarginRight;
+ case CSSPropertyWebkitPaddingEnd:
+ return direction == LTR ? CSSPropertyPaddingRight : CSSPropertyPaddingLeft;
+ case CSSPropertyWebkitPaddingStart:
+ return direction == LTR ? CSSPropertyPaddingLeft : CSSPropertyPaddingRight;
+ default:
+ return propertyID;
+ }
+}
+
} // namespace WebCore
diff --git a/WebCore/css/CSSProperty.h b/WebCore/css/CSSProperty.h
index 4505f33..7a3da68 100644
--- a/WebCore/css/CSSProperty.h
+++ b/WebCore/css/CSSProperty.h
@@ -22,6 +22,7 @@
#define CSSProperty_h
#include "CSSValue.h"
+#include "TextDirection.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
@@ -58,6 +59,8 @@ public:
String cssText() const;
+ static int resolveDirectionAwareProperty(int propertyID, TextDirection);
+
friend bool operator==(const CSSProperty&, const CSSProperty&);
// Make sure the following fits in 4 bytes. Really.
diff --git a/WebCore/css/CSSPropertyNames.in b/WebCore/css/CSSPropertyNames.in
index 9c65971..a330abe 100644
--- a/WebCore/css/CSSPropertyNames.in
+++ b/WebCore/css/CSSPropertyNames.in
@@ -19,6 +19,7 @@ font-size
font-style
font-variant
font-weight
+text-rendering
-webkit-text-size-adjust
zoom
@@ -134,7 +135,6 @@ text-overline-color
text-overline-mode
text-overline-style
text-overline-width
-text-rendering
text-shadow
text-transform
text-underline
@@ -215,6 +215,7 @@ z-index
-webkit-line-clamp
-webkit-margin-bottom-collapse
-webkit-margin-collapse
+-webkit-margin-end
-webkit-margin-start
-webkit-margin-top-collapse
-webkit-marquee
@@ -239,6 +240,7 @@ z-index
-webkit-mask-size
-webkit-match-nearest-mail-blockquote-color
-webkit-nbsp-mode
+-webkit-padding-end
-webkit-padding-start
-webkit-perspective
-webkit-perspective-origin
diff --git a/WebCore/css/CSSSegmentedFontFace.cpp b/WebCore/css/CSSSegmentedFontFace.cpp
index c3e3fd0..b13dd9c 100644
--- a/WebCore/css/CSSSegmentedFontFace.cpp
+++ b/WebCore/css/CSSSegmentedFontFace.cpp
@@ -110,15 +110,15 @@ FontData* CSSSegmentedFontFace::getFontData(const FontDescription& fontDescripti
FontTraitsMask traitsMask = m_fontFaces[i]->traitsMask();
bool syntheticBold = !(traitsMask & (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask)) && (desiredTraitsMask & (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask));
bool syntheticItalic = !(traitsMask & FontStyleItalicMask) && (desiredTraitsMask & FontStyleItalicMask);
- if (const FontData* faceFontData = m_fontFaces[i]->getFontData(fontDescription, syntheticBold, syntheticItalic)) {
+ if (const SimpleFontData* faceFontData = m_fontFaces[i]->getFontData(fontDescription, syntheticBold, syntheticItalic)) {
ASSERT(!faceFontData->isSegmented());
const Vector<CSSFontFace::UnicodeRange>& ranges = m_fontFaces[i]->ranges();
unsigned numRanges = ranges.size();
if (!numRanges)
- fontData->appendRange(FontDataRange(0, 0x7FFFFFFF, static_cast<const SimpleFontData*>(faceFontData)));
+ fontData->appendRange(FontDataRange(0, 0x7FFFFFFF, faceFontData));
else {
for (unsigned j = 0; j < numRanges; ++j)
- fontData->appendRange(FontDataRange(ranges[j].from(), ranges[j].to(), static_cast<const SimpleFontData*>(faceFontData)));
+ fontData->appendRange(FontDataRange(ranges[j].from(), ranges[j].to(), faceFontData));
}
}
}
diff --git a/WebCore/css/CSSSelector.cpp b/WebCore/css/CSSSelector.cpp
index ddf1737..47ead5f 100644
--- a/WebCore/css/CSSSelector.cpp
+++ b/WebCore/css/CSSSelector.cpp
@@ -3,7 +3,7 @@
* 1999 Waldo Bastian (bastian@kde.org)
* 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch)
* 2001-2003 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2002, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2008 David Smith (catfish.man@gmail.com)
* Copyright (C) 2010 Google Inc. All rights reserved.
*
@@ -140,6 +140,8 @@ PseudoId CSSSelector::pseudoId(PseudoType type)
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:
@@ -324,6 +326,7 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap(
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"));
@@ -437,6 +440,7 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap(
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);
@@ -541,6 +545,7 @@ void CSSSelector::extractPseudoType() const
case PseudoMediaControlsTimeRemainingDisplay:
case PseudoMediaControlsTimeline:
case PseudoMediaControlsVolumeSlider:
+ case PseudoMediaControlsVolumeSliderMuteButton:
case PseudoMediaControlsSeekBackButton:
case PseudoMediaControlsSeekForwardButton:
case PseudoMediaControlsRewindButton:
diff --git a/WebCore/css/CSSSelector.h b/WebCore/css/CSSSelector.h
index d55fafc..fc0dd7b 100644
--- a/WebCore/css/CSSSelector.h
+++ b/WebCore/css/CSSSelector.h
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org)
* 1999 Waldo Bastian (bastian@kde.org)
- * Copyright (C) 2004, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 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
@@ -26,6 +26,7 @@
#include "QualifiedName.h"
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
namespace WebCore {
@@ -176,6 +177,7 @@ namespace WebCore {
PseudoMediaControlsPlayButton,
PseudoMediaControlsTimelineContainer,
PseudoMediaControlsVolumeSliderContainer,
+ PseudoMediaControlsVolumeSliderMuteButton,
PseudoMediaControlsCurrentTimeDisplay,
PseudoMediaControlsTimeRemainingDisplay,
PseudoMediaControlsToggleClosedCaptions,
@@ -283,11 +285,10 @@ namespace WebCore {
void extractPseudoType() const;
struct RareData : Noncopyable {
- RareData(CSSSelector* tagHistory)
+ RareData(PassOwnPtr<CSSSelector> tagHistory)
: m_a(0)
, m_b(0)
, m_tagHistory(tagHistory)
- , m_simpleSelector(0)
, m_attribute(anyQName())
, m_argument(nullAtom)
{
@@ -308,7 +309,7 @@ namespace WebCore {
{
if (m_hasRareData)
return;
- m_data.m_rareData = new RareData(m_data.m_tagHistory);
+ m_data.m_rareData = new RareData(adoptPtr(m_data.m_tagHistory));
m_hasRareData = true;
}
diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp
index 750988e..44d9e66 100644
--- a/WebCore/css/CSSStyleSelector.cpp
+++ b/WebCore/css/CSSStyleSelector.cpp
@@ -1038,7 +1038,7 @@ bool CSSStyleSelector::canShareStyleWithElement(Node* n)
if (classesMatch) {
bool mappedAttrsMatch = true;
if (s->hasMappedAttributes())
- mappedAttrsMatch = s->mappedAttributes()->mappedMapsEquivalent(m_styledElement->mappedAttributes());
+ mappedAttrsMatch = s->attributeMap()->mappedMapsEquivalent(m_styledElement->attributeMap());
if (mappedAttrsMatch) {
if (s->isLink()) {
if (m_elementLinkState != style->insideLink())
@@ -1258,7 +1258,7 @@ PassRefPtr<RenderStyle> CSSStyleSelector::styleForElement(Element* e, RenderStyl
// Ask if the HTML element has mapped attributes.
if (m_styledElement->hasMappedAttributes()) {
// Walk our attribute list and add in each decl.
- const NamedNodeMap* map = m_styledElement->mappedAttributes();
+ const NamedNodeMap* map = m_styledElement->attributeMap();
for (unsigned i = 0; i < map->length(); i++) {
Attribute* attr = map->attributeItem(i);
if (attr->isMappedAttribute() && attr->decl()) {
@@ -2920,7 +2920,7 @@ void CSSStyleSelector::applyDeclarations(bool isImportant, int startIndex, int e
if (applyFirst) {
COMPILE_ASSERT(firstCSSProperty == CSSPropertyColor, CSS_color_is_first_property);
- COMPILE_ASSERT(CSSPropertyZoom == CSSPropertyColor + 10, CSS_zoom_is_end_of_first_prop_range);
+ COMPILE_ASSERT(CSSPropertyZoom == CSSPropertyColor + 11, CSS_zoom_is_end_of_first_prop_range);
COMPILE_ASSERT(CSSPropertyLineHeight == CSSPropertyZoom + 1, CSS_line_height_is_after_zoom);
// give special priority to font-xxx, color properties, etc
@@ -3108,11 +3108,7 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
bool isInherit = m_parentNode && valueType == CSSValue::CSS_INHERIT;
bool isInitial = valueType == CSSValue::CSS_INITIAL || (!m_parentNode && valueType == CSSValue::CSS_INHERIT);
- // These properties are used to set the correct margins/padding on RTL lists.
- if (id == CSSPropertyWebkitMarginStart)
- id = m_style->direction() == LTR ? CSSPropertyMarginLeft : CSSPropertyMarginRight;
- else if (id == CSSPropertyWebkitPaddingStart)
- id = m_style->direction() == LTR ? CSSPropertyPaddingLeft : CSSPropertyPaddingRight;
+ id = CSSProperty::resolveDirectionAwareProperty(id, m_style->direction());
if (m_checker.m_matchVisitedPseudoClass && !isValidVisitedLinkProperty(id)) {
// Limit the properties that can be applied to only the ones honored by :visited.
@@ -5502,7 +5498,9 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
case CSSPropertyTextUnderlineStyle:
case CSSPropertyTextUnderlineWidth:
case CSSPropertyWebkitFontSizeDelta:
+ case CSSPropertyWebkitMarginEnd:
case CSSPropertyWebkitMarginStart:
+ case CSSPropertyWebkitPaddingEnd:
case CSSPropertyWebkitPaddingStart:
case CSSPropertyWebkitTextDecorationsInEffect:
case CSSPropertyWebkitTextStroke:
diff --git a/WebCore/css/CSSStyleSheet.cpp b/WebCore/css/CSSStyleSheet.cpp
index 227d37c..1ef1c2b 100644
--- a/WebCore/css/CSSStyleSheet.cpp
+++ b/WebCore/css/CSSStyleSheet.cpp
@@ -183,9 +183,14 @@ const AtomicString& CSSStyleSheet::determineNamespace(const AtomicString& prefix
bool CSSStyleSheet::parseString(const String &string, bool strict)
{
+ return parseStringAtLine(string, strict, 0);
+}
+
+bool CSSStyleSheet::parseStringAtLine(const String& string, bool strict, int startLineNumber)
+{
setStrictParsing(strict);
CSSParser p(strict);
- p.parseSheet(this, string);
+ p.parseSheet(this, string, startLineNumber);
return true;
}
diff --git a/WebCore/css/CSSStyleSheet.h b/WebCore/css/CSSStyleSheet.h
index 4c59144..fe82794 100644
--- a/WebCore/css/CSSStyleSheet.h
+++ b/WebCore/css/CSSStyleSheet.h
@@ -81,6 +81,8 @@ public:
virtual bool parseString(const String&, bool strict = true);
+ bool parseStringAtLine(const String&, bool strict, int startLineNumber);
+
virtual bool isLoading();
virtual void checkLoaded();
diff --git a/WebCore/css/CSSStyleSheet.idl b/WebCore/css/CSSStyleSheet.idl
index e180217..e488657 100644
--- a/WebCore/css/CSSStyleSheet.idl
+++ b/WebCore/css/CSSStyleSheet.idl
@@ -21,7 +21,7 @@
module css {
// Introduced in DOM Level 2:
- interface CSSStyleSheet : stylesheets::StyleSheet {
+ interface CSSStyleSheet : StyleSheet {
readonly attribute CSSRule ownerRule;
readonly attribute CSSRuleList cssRules;
diff --git a/WebCore/css/CSSValueKeywords.in b/WebCore/css/CSSValueKeywords.in
index 3439878..d302990 100644
--- a/WebCore/css/CSSValueKeywords.in
+++ b/WebCore/css/CSSValueKeywords.in
@@ -583,6 +583,7 @@ media-sliderthumb
media-volume-slider-container
media-volume-slider
media-volume-sliderthumb
+media-volume-slider-mute-button
media-controls-background
media-current-time-display
media-time-remaining-display
diff --git a/WebCore/css/CSSVariablesRule.idl b/WebCore/css/CSSVariablesRule.idl
index 780e84d..b7559f6 100644
--- a/WebCore/css/CSSVariablesRule.idl
+++ b/WebCore/css/CSSVariablesRule.idl
@@ -26,7 +26,7 @@
module css {
interface CSSVariablesRule : CSSRule {
- readonly attribute stylesheets::MediaList media;
+ readonly attribute MediaList media;
readonly attribute CSSVariablesDeclaration variables;
};
diff --git a/WebCore/css/MediaQuery.cpp b/WebCore/css/MediaQuery.cpp
index 187a33d..b71706c 100644
--- a/WebCore/css/MediaQuery.cpp
+++ b/WebCore/css/MediaQuery.cpp
@@ -78,7 +78,7 @@ static bool expressionCompare(const MediaQueryExp* a, const MediaQueryExp* b)
MediaQuery::MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > exprs)
: m_restrictor(r)
, m_mediaType(mediaType.lower())
- , m_expressions(exprs.release())
+ , m_expressions(exprs)
, m_ignored(false)
{
if (!m_expressions) {
@@ -108,7 +108,6 @@ MediaQuery::MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector<
MediaQuery::~MediaQuery()
{
deleteAllValues(*m_expressions);
- delete m_expressions;
}
// http://dev.w3.org/csswg/cssom/#compare-media-queries
diff --git a/WebCore/css/MediaQuery.h b/WebCore/css/MediaQuery.h
index ccc59ac..3eea3b2 100644
--- a/WebCore/css/MediaQuery.h
+++ b/WebCore/css/MediaQuery.h
@@ -43,11 +43,11 @@ public:
Only, Not, None
};
- MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > exprs);
+ MediaQuery(Restrictor, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > exprs);
~MediaQuery();
Restrictor restrictor() const { return m_restrictor; }
- const Vector<MediaQueryExp*>* expressions() const { return m_expressions; }
+ const Vector<MediaQueryExp*>* expressions() const { return m_expressions.get(); }
String mediaType() const { return m_mediaType; }
bool operator==(const MediaQuery& other) const;
String cssText() const;
@@ -56,7 +56,7 @@ public:
private:
Restrictor m_restrictor;
String m_mediaType;
- Vector<MediaQueryExp*>* m_expressions;
+ OwnPtr<Vector<MediaQueryExp*> > m_expressions;
bool m_ignored;
String m_serializationCache;
diff --git a/WebCore/css/StyleMedia.h b/WebCore/css/StyleMedia.h
index 761e6a3..82c9eba 100644
--- a/WebCore/css/StyleMedia.h
+++ b/WebCore/css/StyleMedia.h
@@ -27,10 +27,12 @@
#ifndef StyleMedia_h
#define StyleMedia_h
-#include "DOMWindow.h"
+#include "PlatformString.h"
namespace WebCore {
+class Frame;
+
class StyleMedia : public RefCounted<StyleMedia> {
public:
static PassRefPtr<StyleMedia> create(Frame* frame)
diff --git a/WebCore/css/mathml.css b/WebCore/css/mathml.css
index 7a9b348..ca9d7b0 100644
--- a/WebCore/css/mathml.css
+++ b/WebCore/css/mathml.css
@@ -5,6 +5,7 @@ math {
display: inline-block;
padding: 0px;
margin: 0px;
+ text-align: left;
vertical-align: baseline;
line-height: 1.0;
padding-left: 1px;
@@ -17,10 +18,6 @@ math[display="block"] {
margin-bottom: 1em;
}
-math * {
- text-align: left;
-}
-
math > * {
vertical-align: baseline;
}
@@ -32,7 +29,7 @@ mrow, mfenced {
padding-right: 1px;
}
-mi, mtext {
+mi{
font-style: italic;
padding-right: 0.1em;
}
@@ -97,15 +94,15 @@ math > mo, mrow > mo, mfenced > mo {
padding-right: 0.05em;
}
-mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"] {
+math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"]{
font-size: 0.75em;
}
-mo[mathsize="normal"],mn[mathsize="normal"],mi[mathsize="normal"] {
+math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"]{
font-size: 1em;
}
-mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"] {
+math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"]{
font-size: 1.5em;
}
diff --git a/WebCore/css/mediaControls.css b/WebCore/css/mediaControls.css
index de2c2fe..6a0f14b 100644
--- a/WebCore/css/mediaControls.css
+++ b/WebCore/css/mediaControls.css
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -131,3 +131,8 @@ audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-medi
width: 16px;
height: 16px;
}
+
+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;
+}
diff --git a/WebCore/css/mediaControlsQuickTime.css b/WebCore/css/mediaControlsQuickTime.css
index 965685d..d2c731f 100644
--- a/WebCore/css/mediaControlsQuickTime.css
+++ b/WebCore/css/mediaControlsQuickTime.css
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -32,6 +32,7 @@ audio {
audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel {
/* In mediaControls.css */
-webkit-appearance: media-controls-background;
+ overflow: visible;
height: 25px;
}
@@ -41,10 +42,11 @@ video:-webkit-full-page-media::-webkit-media-controls-panel {
audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button {
-webkit-box-ordinal-group: 2; /* Before the fullscreen button */
- width: 15px;
- height: 14px;
+
+ width: 14px;
+ height: 12px;
margin-left: 2px;
- margin-right: 8px;
+ margin-right: 9px;
}
audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button {
@@ -185,3 +187,38 @@ audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-medi
margin-right: 7px;
-webkit-box-ordinal-group: 3; /* between mute and fullscreen */
}
+
+audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container {
+ -webkit-appearance: media-volume-slider-container;
+ position: absolute;
+
+ top: 0;
+ left: 0;
+
+ width: 22px;
+ height: 114px;
+}
+
+audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider {
+ -webkit-appearance: media-volume-slider;
+ display: inline;
+ position: absolute;
+
+ top: 7px;
+ left: 6px;
+
+ width: 10px;
+ height: 80px;
+}
+
+audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button {
+ -webkit-appearance: media-volume-slider-mute-button;
+ display: inline;
+ position: absolute;
+
+ bottom: 5px;
+ left: 4px;
+
+ width: 14px;
+ height: 12px;
+}
diff --git a/WebCore/css/themeWin.css b/WebCore/css/themeWin.css
index a0170ac..f2ad669 100644
--- a/WebCore/css/themeWin.css
+++ b/WebCore/css/themeWin.css
@@ -78,8 +78,7 @@ input[type="search"]::-webkit-search-results-button {
}
input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button {
- /* Matches Firefox */
- padding: 0 6px;
+ padding: 1px 6px;
}
/* Windows selects are not rounded. Custom borders for them shouldn't be either. */
diff --git a/WebCore/dom/Attribute.h b/WebCore/dom/Attribute.h
index 9e1afc6..cf84a6f 100644
--- a/WebCore/dom/Attribute.h
+++ b/WebCore/dom/Attribute.h
@@ -78,6 +78,11 @@ public:
void setValue(const AtomicString& value) { m_value = value; }
void setPrefix(const AtomicString& prefix) { m_name.setPrefix(prefix); }
+ // Note: This API is only for HTMLTreeBuilder. It is not safe to change the
+ // name of an attribute once parseMappedAttribute has been called as DOM
+ // elements may have placed the Attribute in a hash by name.
+ void parserSetName(const QualifiedName& name) { m_name = name; }
+
bool isMappedAttribute() { return m_isMappedAttribute; }
private:
diff --git a/WebCore/dom/BeforeLoadEvent.h b/WebCore/dom/BeforeLoadEvent.h
index fc5814a..f60e438 100644
--- a/WebCore/dom/BeforeLoadEvent.h
+++ b/WebCore/dom/BeforeLoadEvent.h
@@ -28,7 +28,6 @@
#define BeforeLoadEvent_h
#include "Event.h"
-#include "EventNames.h"
namespace WebCore {
diff --git a/WebCore/dom/CanvasSurface.h b/WebCore/dom/CanvasSurface.h
deleted file mode 100644
index 3601381..0000000
--- a/WebCore/dom/CanvasSurface.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- * 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:
- * 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 CanvasSurface_h
-#define CanvasSurface_h
-
-#include "AffineTransform.h"
-#include "IntSize.h"
-#include "PlatformString.h"
-
-#include <wtf/OwnPtr.h>
-#include <wtf/Noncopyable.h>
-
-namespace WebCore {
-
-class AffineTransform;
-class FloatPoint;
-class FloatRect;
-class FloatSize;
-class GraphicsContext;
-class ImageBuffer;
-class IntPoint;
-
-class CSSStyleSelector;
-class RenderBox;
-class RenderStyle;
-class SecurityOrigin;
-
-typedef int ExceptionCode;
-
-class CanvasSurface : public Noncopyable {
-public:
- CanvasSurface(float pageScaleFactor);
- virtual ~CanvasSurface();
-
- int width() const { return m_size.width(); }
- int height() const { return m_size.height(); }
-
- String toDataURL(const String& mimeType, const double* quality, ExceptionCode&);
- String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, 0, ec); }
-
- const IntSize& size() const { return m_size; }
-
- virtual void willDraw(const FloatRect&);
-
- GraphicsContext* drawingContext() const;
-
- ImageBuffer* buffer() const;
-
- IntRect convertLogicalToDevice(const FloatRect&) const;
- IntSize convertLogicalToDevice(const FloatSize&) const;
- IntPoint convertLogicalToDevice(const FloatPoint&) const;
-
- void setOriginTainted() { m_originClean = false; }
- bool originClean() const { return m_originClean; }
-
- AffineTransform baseTransform() const;
-
- const SecurityOrigin& securityOrigin() const;
- RenderBox* renderBox() const;
- RenderStyle* computedStyle();
- CSSStyleSelector* styleSelector();
-
-protected:
- void setSurfaceSize(const IntSize&);
- bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; }
-
- static const int DefaultWidth;
- static const int DefaultHeight;
-
-private:
- void createImageBuffer() const;
-
- static const float MaxCanvasArea;
-
- IntSize m_size;
-
- float m_pageScaleFactor;
- bool m_originClean;
-
- // m_createdImageBuffer means we tried to malloc the buffer. We didn't necessarily get it.
- mutable bool m_hasCreatedImageBuffer;
- mutable OwnPtr<ImageBuffer> m_imageBuffer;
-};
-
-} // namespace WebCore
-
-#endif
diff --git a/WebCore/dom/CharacterData.cpp b/WebCore/dom/CharacterData.cpp
index 075df47..5fbb6f2 100644
--- a/WebCore/dom/CharacterData.cpp
+++ b/WebCore/dom/CharacterData.cpp
@@ -59,7 +59,7 @@ String CharacterData::substringData(unsigned offset, unsigned count, ExceptionCo
return m_data->substring(offset, count);
}
-void CharacterData::appendData(const String& arg, ExceptionCode&)
+PassRefPtr<StringImpl> CharacterData::parserAppendData(const String& arg)
{
String newStr = m_data;
newStr.append(arg);
@@ -72,7 +72,13 @@ void CharacterData::appendData(const String& arg, ExceptionCode&)
attach();
} else if (renderer())
toRenderText(renderer())->setTextWithOffset(m_data, oldStr->length(), 0);
-
+
+ return oldStr.release();
+}
+
+void CharacterData::appendData(const String& arg, ExceptionCode&)
+{
+ RefPtr<StringImpl> oldStr = parserAppendData(arg);
dispatchModifiedEvent(oldStr.get());
}
diff --git a/WebCore/dom/CharacterData.h b/WebCore/dom/CharacterData.h
index 5ca4b75..ecc0cf7 100644
--- a/WebCore/dom/CharacterData.h
+++ b/WebCore/dom/CharacterData.h
@@ -42,6 +42,9 @@ public:
StringImpl* dataImpl() { return m_data.get(); }
+ // Like appendData, but optimized for the parser (e.g., no mutation events).
+ PassRefPtr<StringImpl> parserAppendData(const String&);
+
protected:
CharacterData(Document* document, const String& text, ConstructionType type)
: Node(document, type)
diff --git a/WebCore/dom/ContainerNode.cpp b/WebCore/dom/ContainerNode.cpp
index 6539e5b..80bd035 100644
--- a/WebCore/dom/ContainerNode.cpp
+++ b/WebCore/dom/ContainerNode.cpp
@@ -616,6 +616,11 @@ void ContainerNode::queuePostAttachCallback(NodeCallback callback, Node* node)
s_postAttachCallbackQueue->append(std::pair<NodeCallback, RefPtr<Node> >(callback, node));
}
+bool ContainerNode::postAttachCallbacksAreSuspended()
+{
+ return s_attachDepth;
+}
+
void ContainerNode::dispatchPostAttachCallbacks()
{
// We recalculate size() each time through the loop because a callback
diff --git a/WebCore/dom/ContainerNode.h b/WebCore/dom/ContainerNode.h
index 36e6ac5..a27d95b 100644
--- a/WebCore/dom/ContainerNode.h
+++ b/WebCore/dom/ContainerNode.h
@@ -76,10 +76,12 @@ public:
bool dispatchBeforeLoadEvent(const String& sourceURL);
+ static void queuePostAttachCallback(NodeCallback, Node*);
+ static bool postAttachCallbacksAreSuspended();
+
protected:
ContainerNode(Document*, ConstructionType = CreateContainer);
- static void queuePostAttachCallback(NodeCallback, Node*);
void suspendPostAttachCallbacks();
void resumePostAttachCallbacks();
diff --git a/WebCore/dom/CustomEvent.h b/WebCore/dom/CustomEvent.h
index d910767..d287a65 100644
--- a/WebCore/dom/CustomEvent.h
+++ b/WebCore/dom/CustomEvent.h
@@ -29,7 +29,6 @@
#include "AtomicString.h"
#include "Event.h"
#include "ScriptValue.h"
-#include <wtf/RefCounted.h>
namespace WebCore {
diff --git a/WebCore/dom/DOMStringMap.h b/WebCore/dom/DOMStringMap.h
index c0bc07d..e91d884 100644
--- a/WebCore/dom/DOMStringMap.h
+++ b/WebCore/dom/DOMStringMap.h
@@ -28,7 +28,6 @@
#include "PlatformString.h"
#include <wtf/Noncopyable.h>
-#include <wtf/PassRefPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
diff --git a/WebCore/dom/DeviceOrientation.cpp b/WebCore/dom/DeviceOrientationController.cpp
index 6f8d06a..97ddcd8 100644
--- a/WebCore/dom/DeviceOrientation.cpp
+++ b/WebCore/dom/DeviceOrientationController.cpp
@@ -24,7 +24,7 @@
*/
#include "config.h"
-#include "DeviceOrientation.h"
+#include "DeviceOrientationController.h"
#if ENABLE(DEVICE_ORIENTATION)
@@ -34,13 +34,13 @@
namespace WebCore {
-DeviceOrientation::DeviceOrientation(Page* page, DeviceOrientationClient* client)
+DeviceOrientationController::DeviceOrientationController(Page* page, DeviceOrientationClient* client)
: m_page(page)
, m_client(client)
{
}
-void DeviceOrientation::onDeviceOrientationChange(double alpha, double beta, double gamma)
+void DeviceOrientationController::onDeviceOrientationChange(double alpha, double beta, double gamma)
{
// FIXME: Fire DeviceOrientationEvents on the window object of all frames
// that are listening to orientation.
diff --git a/WebCore/dom/DeviceOrientation.h b/WebCore/dom/DeviceOrientationController.h
index e4d96be..5f8f49a 100644
--- a/WebCore/dom/DeviceOrientation.h
+++ b/WebCore/dom/DeviceOrientationController.h
@@ -23,17 +23,17 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef DeviceOrientation_h
-#define DeviceOrientation_h
+#ifndef DeviceOrientationController_h
+#define DeviceOrientationController_h
namespace WebCore {
class DeviceOrientationClient;
class Page;
-class DeviceOrientation {
+class DeviceOrientationController {
public:
- DeviceOrientation(Page*, DeviceOrientationClient*);
+ DeviceOrientationController(Page*, DeviceOrientationClient*);
// FIXME: Add methods to start and stop the service.
@@ -46,4 +46,4 @@ private:
} // namespace WebCore
-#endif // DeviceOrientation_h
+#endif // DeviceOrientationController_h
diff --git a/WebCore/dom/DeviceOrientationEvent.h b/WebCore/dom/DeviceOrientationEvent.h
index 0cec9ba..33ff026 100644
--- a/WebCore/dom/DeviceOrientationEvent.h
+++ b/WebCore/dom/DeviceOrientationEvent.h
@@ -26,7 +26,6 @@
#ifndef DeviceOrientationEvent_h
#define DeviceOrientationEvent_h
-#include "DOMWindow.h"
#include "Event.h"
namespace WebCore {
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index be2bb4c..6f91738 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -44,6 +44,7 @@
#include "CustomEvent.h"
#include "DOMImplementation.h"
#include "DOMWindow.h"
+#include "DeviceOrientationEvent.h"
#include "DocLoader.h"
#include "DocumentFragment.h"
#include "DocumentLoader.h"
@@ -2061,7 +2062,7 @@ void Document::write(const SegmentedString& text, Document* ownerDocument)
printf("Beginning a document.write at %d\n", elapsedTime());
#endif
- if (!m_parser || m_parser->finishWasCalled())
+ if (!m_parser)
open(ownerDocument);
ASSERT(m_parser);
@@ -2199,6 +2200,8 @@ const Vector<RefPtr<CSSStyleSheet> >* Document::pageGroupUserSheets() const
const UserStyleSheetVector* sheets = it->second;
for (unsigned i = 0; i < sheets->size(); ++i) {
const UserStyleSheet* sheet = sheets->at(i).get();
+ if (sheet->injectedFrames() == InjectInTopFrameOnly && ownerElement())
+ continue;
if (!UserContentURLPattern::matchesPatterns(url(), sheet->whitelist(), sheet->blacklist()))
continue;
RefPtr<CSSStyleSheet> parsedSheet = CSSStyleSheet::createInline(const_cast<Document*>(this), sheet->url());
@@ -3321,6 +3324,10 @@ PassRefPtr<Event> Document::createEvent(const String& eventType, ExceptionCode&
#endif
event = TouchEvent::create();
#endif
+#if ENABLE(DEVICE_ORIENTATION)
+ else if (eventType == "DeviceOrientationEvent")
+ event = DeviceOrientationEvent::create();
+#endif
if (event)
return event.release();
@@ -3375,7 +3382,7 @@ CSSStyleDeclaration* Document::getOverrideStyle(Element*, const String&)
return 0;
}
-Element* Document::ownerElement() const
+HTMLFrameOwnerElement* Document::ownerElement() const
{
if (!frame())
return 0;
diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h
index 3d9cf48..63a8d12 100644
--- a/WebCore/dom/Document.h
+++ b/WebCore/dom/Document.h
@@ -81,6 +81,7 @@ namespace WebCore {
class HTMLDocument;
class HTMLElement;
class HTMLFormElement;
+ class HTMLFrameOwnerElement;
class HTMLHeadElement;
class HTMLInputElement;
class HTMLMapElement;
@@ -734,7 +735,7 @@ public:
// Returns the owning element in the parent document.
// Returns 0 if this is the top level document.
- Element* ownerElement() const;
+ HTMLFrameOwnerElement* ownerElement() const;
String title() const { return m_title; }
void setTitle(const String&, Element* titleElement = 0);
diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
index 3dbd880..a1ff56d 100644
--- a/WebCore/dom/Element.cpp
+++ b/WebCore/dom/Element.cpp
@@ -70,8 +70,8 @@ PassRefPtr<Element> Element::create(const QualifiedName& tagName, Document* docu
Element::~Element()
{
- if (namedAttrMap)
- namedAttrMap->detachFromElement();
+ if (m_attributeMap)
+ m_attributeMap->detachFromElement();
}
inline ElementRareData* Element::rareData() const
@@ -165,9 +165,9 @@ PassRefPtr<Element> Element::cloneElementWithoutChildren()
void Element::removeAttribute(const QualifiedName& name, ExceptionCode& ec)
{
- if (namedAttrMap) {
+ if (m_attributeMap) {
ec = 0;
- namedAttrMap->removeNamedItem(name, ec);
+ m_attributeMap->removeNamedItem(name, ec);
if (ec == NOT_FOUND_ERR)
ec = 0;
}
@@ -195,12 +195,6 @@ void Element::setBooleanAttribute(const QualifiedName& name, bool b)
}
}
-// Virtual function, defined in base class.
-NamedNodeMap* Element::attributes() const
-{
- return attributes(false);
-}
-
Node::NodeType Element::nodeType() const
{
return ELEMENT_NODE;
@@ -526,8 +520,8 @@ const AtomicString& Element::getAttribute(const String& name) const
}
#endif
- if (namedAttrMap) {
- if (Attribute* attribute = namedAttrMap->getAttributeItem(name, ignoreCase))
+ if (m_attributeMap) {
+ if (Attribute* attribute = m_attributeMap->getAttributeItem(name, ignoreCase))
return attribute->value();
}
@@ -560,9 +554,9 @@ void Element::setAttribute(const AtomicString& name, const AtomicString& value,
updateId(old ? old->value() : nullAtom, value);
if (old && value.isNull())
- namedAttrMap->removeAttribute(old->name());
+ m_attributeMap->removeAttribute(old->name());
else if (!old && !value.isNull())
- namedAttrMap->addAttribute(createAttribute(QualifiedName(nullAtom, localName, nullAtom), value));
+ m_attributeMap->addAttribute(createAttribute(QualifiedName(nullAtom, localName, nullAtom), value));
else if (old && !value.isNull()) {
old->setValue(value);
attributeChanged(old);
@@ -589,9 +583,9 @@ void Element::setAttribute(const QualifiedName& name, const AtomicString& value,
updateId(old ? old->value() : nullAtom, value);
if (old && value.isNull())
- namedAttrMap->removeAttribute(name);
+ m_attributeMap->removeAttribute(name);
else if (!old && !value.isNull())
- namedAttrMap->addAttribute(createAttribute(name, value));
+ m_attributeMap->addAttribute(createAttribute(name, value));
else if (old) {
old->setValue(value);
attributeChanged(old);
@@ -670,38 +664,38 @@ void Element::setAttributeMap(PassRefPtr<NamedNodeMap> list, FragmentScriptingPe
// If setting the whole map changes the id attribute, we need to call updateId.
const QualifiedName& idName = document()->idAttributeName();
- Attribute* oldId = namedAttrMap ? namedAttrMap->getAttributeItem(idName) : 0;
+ Attribute* oldId = m_attributeMap ? m_attributeMap->getAttributeItem(idName) : 0;
Attribute* newId = list ? list->getAttributeItem(idName) : 0;
if (oldId || newId)
updateId(oldId ? oldId->value() : nullAtom, newId ? newId->value() : nullAtom);
- if (namedAttrMap)
- namedAttrMap->m_element = 0;
+ if (m_attributeMap)
+ m_attributeMap->m_element = 0;
- namedAttrMap = list;
+ m_attributeMap = list;
- if (namedAttrMap) {
- namedAttrMap->m_element = this;
+ if (m_attributeMap) {
+ m_attributeMap->m_element = this;
// If the element is created as result of a paste or drag-n-drop operation
// we want to remove all the script and event handlers.
if (scriptingPermission == FragmentScriptingNotAllowed) {
unsigned i = 0;
- while (i < namedAttrMap->length()) {
- const QualifiedName& attributeName = namedAttrMap->m_attributes[i]->name();
+ while (i < m_attributeMap->length()) {
+ const QualifiedName& attributeName = m_attributeMap->m_attributes[i]->name();
if (isEventHandlerAttribute(attributeName)) {
- namedAttrMap->m_attributes.remove(i);
+ m_attributeMap->m_attributes.remove(i);
continue;
}
- if (isAttributeToRemove(attributeName, namedAttrMap->m_attributes[i]->value()))
- namedAttrMap->m_attributes[i]->setValue(nullAtom);
+ if (isAttributeToRemove(attributeName, m_attributeMap->m_attributes[i]->value()))
+ m_attributeMap->m_attributes[i]->setValue(nullAtom);
i++;
}
}
- unsigned len = namedAttrMap->length();
+ unsigned len = m_attributeMap->length();
for (unsigned i = 0; i < len; i++)
- attributeChanged(namedAttrMap->m_attributes[i].get());
+ attributeChanged(m_attributeMap->m_attributes[i].get());
// FIXME: What about attributes that were in the old map that are not in the new map?
}
}
@@ -716,7 +710,7 @@ bool Element::hasAttributes() const
updateAnimatedSVGAttribute(anyQName());
#endif
- return namedAttrMap && namedAttrMap->length() > 0;
+ return m_attributeMap && m_attributeMap->length();
}
String Element::nodeName() const
@@ -759,7 +753,7 @@ KURL Element::baseURI() const
void Element::createAttributeMap() const
{
- namedAttrMap = NamedNodeMap::create(const_cast<Element*>(this));
+ m_attributeMap = NamedNodeMap::create(const_cast<Element*>(this));
}
bool Element::isURLAttribute(Attribute*) const
@@ -792,8 +786,8 @@ void Element::insertedIntoDocument()
ContainerNode::insertedIntoDocument();
if (hasID()) {
- if (NamedNodeMap* attrs = namedAttrMap.get()) {
- Attribute* idItem = attrs->getAttributeItem(document()->idAttributeName());
+ if (m_attributeMap) {
+ Attribute* idItem = m_attributeMap->getAttributeItem(document()->idAttributeName());
if (idItem && !idItem->isNull())
updateId(nullAtom, idItem->value());
}
@@ -803,8 +797,8 @@ void Element::insertedIntoDocument()
void Element::removedFromDocument()
{
if (hasID()) {
- if (NamedNodeMap* attrs = namedAttrMap.get()) {
- Attribute* idItem = attrs->getAttributeItem(document()->idAttributeName());
+ if (m_attributeMap) {
+ Attribute* idItem = m_attributeMap->getAttributeItem(document()->idAttributeName());
if (idItem && !idItem->isNull())
updateId(idItem->value(), nullAtom);
}
@@ -1231,8 +1225,8 @@ void Element::removeAttribute(const String& name, ExceptionCode& ec)
{
String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
- if (namedAttrMap) {
- namedAttrMap->removeNamedItem(localName, ec);
+ if (m_attributeMap) {
+ m_attributeMap->removeNamedItem(localName, ec);
if (ec == NOT_FOUND_ERR)
ec = 0;
}
@@ -1532,14 +1526,28 @@ DOMStringMap* Element::dataset()
KURL Element::getURLAttribute(const QualifiedName& name) const
{
#if !ASSERT_DISABLED
- if (namedAttrMap) {
- if (Attribute* attribute = namedAttrMap->getAttributeItem(name))
+ if (m_attributeMap) {
+ if (Attribute* attribute = m_attributeMap->getAttributeItem(name))
ASSERT(isURLAttribute(attribute));
}
#endif
return document()->completeURL(deprecatedParseURL(getAttribute(name)));
}
+KURL Element::getNonEmptyURLAttribute(const QualifiedName& name) const
+{
+#if !ASSERT_DISABLED
+ if (m_attributeMap) {
+ if (Attribute* attribute = m_attributeMap->getAttributeItem(name))
+ ASSERT(isURLAttribute(attribute));
+ }
+#endif
+ String value = deprecatedParseURL(getAttribute(name));
+ if (value.isEmpty())
+ return KURL();
+ return document()->completeURL(value);
+}
+
int Element::getIntegralAttribute(const QualifiedName& attributeName) const
{
return getAttribute(attributeName).string().toInt();
diff --git a/WebCore/dom/Element.h b/WebCore/dom/Element.h
index 7dd7d80..a66809a 100644
--- a/WebCore/dom/Element.h
+++ b/WebCore/dom/Element.h
@@ -198,15 +198,13 @@ public:
// use a static AtomicString value instead to avoid the conversion overhead.
void setCStringAttribute(const QualifiedName&, const char* cStringValue);
- virtual NamedNodeMap* attributes() const;
- NamedNodeMap* attributes(bool readonly) const;
+ NamedNodeMap* attributes(bool readonly = false) const;
// This method is called whenever an attribute is added, changed or removed.
virtual void attributeChanged(Attribute*, bool preserveDecls = false);
- // not part of the DOM
void setAttributeMap(PassRefPtr<NamedNodeMap>, FragmentScriptingPermission = FragmentScriptingAllowed);
- NamedNodeMap* attributeMap() const { return namedAttrMap.get(); }
+ NamedNodeMap* attributeMap() const { return m_attributeMap.get(); }
virtual void copyNonAttributeProperties(const Element* /*source*/) { }
@@ -223,7 +221,10 @@ public:
virtual void accessKeyAction(bool /*sendToAnyEvent*/) { }
virtual bool isURLAttribute(Attribute*) const;
+
KURL getURLAttribute(const QualifiedName&) const;
+ KURL getNonEmptyURLAttribute(const QualifiedName&) const;
+
virtual const QualifiedName& imageSourceAttributeName() const;
virtual String target() const { return String(); }
@@ -348,8 +349,8 @@ private:
ElementRareData* rareData() const;
ElementRareData* ensureRareData();
-protected:
- mutable RefPtr<NamedNodeMap> namedAttrMap;
+private:
+ mutable RefPtr<NamedNodeMap> m_attributeMap;
};
inline bool Node::hasTagName(const QualifiedName& name) const
@@ -383,9 +384,9 @@ inline NamedNodeMap* Element::attributes(bool readonly) const
updateAnimatedSVGAttribute(anyQName());
#endif
- if (!readonly && !namedAttrMap)
+ if (!readonly && !m_attributeMap)
createAttributeMap();
- return namedAttrMap.get();
+ return m_attributeMap.get();
}
inline void Element::updateId(const AtomicString& oldId, const AtomicString& newId)
@@ -405,13 +406,13 @@ inline void Element::updateId(const AtomicString& oldId, const AtomicString& new
inline bool Element::fastHasAttribute(const QualifiedName& name) const
{
- return namedAttrMap && namedAttrMap->getAttributeItem(name);
+ return m_attributeMap && m_attributeMap->getAttributeItem(name);
}
inline const AtomicString& Element::fastGetAttribute(const QualifiedName& name) const
{
- if (namedAttrMap) {
- if (Attribute* attribute = namedAttrMap->getAttributeItem(name))
+ if (m_attributeMap) {
+ if (Attribute* attribute = m_attributeMap->getAttributeItem(name))
return attribute->value();
}
return nullAtom;
@@ -420,7 +421,7 @@ inline const AtomicString& Element::fastGetAttribute(const QualifiedName& name)
inline const AtomicString& Element::idForStyleResolution() const
{
ASSERT(hasID());
- return namedAttrMap->idForStyleResolution();
+ return m_attributeMap->idForStyleResolution();
}
inline bool Element::isIdAttributeName(const QualifiedName& attributeName) const
diff --git a/WebCore/dom/EventListener.h b/WebCore/dom/EventListener.h
index ff02204..96bc858 100644
--- a/WebCore/dom/EventListener.h
+++ b/WebCore/dom/EventListener.h
@@ -21,7 +21,6 @@
#ifndef EventListener_h
#define EventListener_h
-#include "PlatformString.h"
#include <wtf/RefCounted.h>
namespace JSC {
diff --git a/WebCore/dom/MappedAttributeEntry.h b/WebCore/dom/MappedAttributeEntry.h
index f28f182..aa1cd1f 100644
--- a/WebCore/dom/MappedAttributeEntry.h
+++ b/WebCore/dom/MappedAttributeEntry.h
@@ -4,6 +4,7 @@
* (C) 2001 Peter Kelly (pmk@post.com)
* (C) 2001 Dirk Mueller (mueller@kde.org)
* Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
+ * Copyright (C) 2010 Franois Sausset (sausset@gmail.com). 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
@@ -44,6 +45,9 @@ enum MappedAttributeEntry {
#if ENABLE(SVG)
, eSVG
#endif
+#if ENABLE(MATHML)
+ , eMathML
+#endif
// When adding new entries, make sure to keep eLastEntry at the end of the list.
, eLastEntry
};
diff --git a/WebCore/dom/MessagePort.h b/WebCore/dom/MessagePort.h
index ae1eb22..65332b8 100644
--- a/WebCore/dom/MessagePort.h
+++ b/WebCore/dom/MessagePort.h
@@ -29,10 +29,8 @@
#include "AtomicStringHash.h"
#include "EventListener.h"
-#include "EventNames.h"
#include "EventTarget.h"
#include "MessagePortChannel.h"
-#include <wtf/HashMap.h>
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/PassRefPtr.h>
diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp
index 77a88e7..73eb926 100644
--- a/WebCore/dom/Node.cpp
+++ b/WebCore/dom/Node.cpp
@@ -45,6 +45,7 @@
#include "ContextMenuController.h"
#include "DOMImplementation.h"
#include "Document.h"
+#include "DocumentType.h"
#include "DynamicNodeList.h"
#include "Element.h"
#include "Event.h"
@@ -74,6 +75,7 @@
#include "RenderBox.h"
#include "ScriptController.h"
#include "SelectorNodeList.h"
+#include "StaticNodeList.h"
#include "StringBuilder.h"
#include "TagNodeList.h"
#include "Text.h"
@@ -1735,12 +1737,13 @@ KURL Node::baseURI() const
return parentNode() ? parentNode()->baseURI() : KURL();
}
-bool Node::isEqualNode(Node *other) const
+bool Node::isEqualNode(Node* other) const
{
if (!other)
return false;
- if (nodeType() != other->nodeType())
+ NodeType nodeType = this->nodeType();
+ if (nodeType != other->nodeType())
return false;
if (nodeName() != other->nodeName())
@@ -1758,17 +1761,17 @@ bool Node::isEqualNode(Node *other) const
if (nodeValue() != other->nodeValue())
return false;
- NamedNodeMap *attrs = attributes();
- NamedNodeMap *otherAttrs = other->attributes();
+ NamedNodeMap* attributes = this->attributes();
+ NamedNodeMap* otherAttributes = other->attributes();
- if (!attrs && otherAttrs)
+ if (!attributes && otherAttributes)
return false;
- if (attrs && !attrs->mapsEquivalent(otherAttrs))
+ if (attributes && !attributes->mapsEquivalent(otherAttributes))
return false;
- Node *child = firstChild();
- Node *otherChild = other->firstChild();
+ Node* child = firstChild();
+ Node* otherChild = other->firstChild();
while (child) {
if (!child->isEqualNode(otherChild))
@@ -1781,8 +1784,33 @@ bool Node::isEqualNode(Node *other) const
if (otherChild)
return false;
- // FIXME: For DocumentType nodes we should check equality on
- // the entities and notations NamedNodeMaps as well.
+ if (nodeType == DOCUMENT_TYPE_NODE) {
+ const DocumentType* documentTypeThis = static_cast<const DocumentType*>(this);
+ const DocumentType* documentTypeOther = static_cast<const DocumentType*>(other);
+
+ if (documentTypeThis->publicId() != documentTypeOther->publicId())
+ return false;
+
+ if (documentTypeThis->systemId() != documentTypeOther->systemId())
+ return false;
+
+ if (documentTypeThis->internalSubset() != documentTypeOther->internalSubset())
+ return false;
+
+ NamedNodeMap* entities = documentTypeThis->entities();
+ NamedNodeMap* otherEntities = documentTypeOther->entities();
+ if (!entities && otherEntities)
+ return false;
+ if (entities && !entities->mapsEquivalent(otherEntities))
+ return false;
+
+ NamedNodeMap* notations = documentTypeThis->notations();
+ NamedNodeMap* otherNotations = documentTypeOther->notations();
+ if (!notations && otherNotations)
+ return false;
+ if (notations && !notations->mapsEquivalent(otherNotations))
+ return false;
+ }
return true;
}
@@ -3119,6 +3147,8 @@ void Node::defaultEventHandler(Event* event)
if (startNode && startNode->renderer())
if (Frame* frame = document()->frame())
frame->eventHandler()->defaultWheelEventHandler(startNode, wheelEvent);
+ } else if (event->type() == eventNames().webkitEditableContentChangedEvent) {
+ dispatchEvent(Event::create(eventNames().inputEvent, true, false));
}
}
diff --git a/WebCore/dom/NodeFilter.h b/WebCore/dom/NodeFilter.h
index 53b32e1..d2022bc 100644
--- a/WebCore/dom/NodeFilter.h
+++ b/WebCore/dom/NodeFilter.h
@@ -26,7 +26,6 @@
#define NodeFilter_h
#include "NodeFilterCondition.h"
-#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
namespace WebCore {
diff --git a/WebCore/dom/NodeRareData.h b/WebCore/dom/NodeRareData.h
index d88f964..4d80cee 100644
--- a/WebCore/dom/NodeRareData.h
+++ b/WebCore/dom/NodeRareData.h
@@ -24,10 +24,8 @@
#include "ClassNodeList.h"
#include "DynamicNodeList.h"
-#include "EventListener.h"
#include "NameNodeList.h"
#include "QualifiedName.h"
-#include "RegisteredEventListener.h"
#include "StringHash.h"
#include "TagNodeList.h"
#include <wtf/HashSet.h>
diff --git a/WebCore/dom/RegisteredEventListener.h b/WebCore/dom/RegisteredEventListener.h
index c34a341..12483fa 100644
--- a/WebCore/dom/RegisteredEventListener.h
+++ b/WebCore/dom/RegisteredEventListener.h
@@ -24,8 +24,8 @@
#ifndef RegisteredEventListener_h
#define RegisteredEventListener_h
-#include "AtomicString.h"
#include "EventListener.h"
+#include <wtf/RefPtr.h>
namespace WebCore {
diff --git a/WebCore/dom/SelectorNodeList.cpp b/WebCore/dom/SelectorNodeList.cpp
index bc97034..5beaaee 100644
--- a/WebCore/dom/SelectorNodeList.cpp
+++ b/WebCore/dom/SelectorNodeList.cpp
@@ -35,6 +35,7 @@
#include "Document.h"
#include "Element.h"
#include "HTMLNames.h"
+#include "StaticNodeList.h"
namespace WebCore {
diff --git a/WebCore/dom/SelectorNodeList.h b/WebCore/dom/SelectorNodeList.h
index 8240189..8357034 100644
--- a/WebCore/dom/SelectorNodeList.h
+++ b/WebCore/dom/SelectorNodeList.h
@@ -29,11 +29,13 @@
#ifndef SelectorNodeList_h
#define SelectorNodeList_h
-#include "StaticNodeList.h"
+#include <wtf/PassRefPtr.h>
namespace WebCore {
class CSSSelectorList;
+ class Node;
+ class StaticNodeList;
PassRefPtr<StaticNodeList> createSelectorNodeList(Node* rootNode, const CSSSelectorList&);
diff --git a/WebCore/dom/SpaceSplitString.h b/WebCore/dom/SpaceSplitString.h
index 2ef3fc4..9fd1832 100644
--- a/WebCore/dom/SpaceSplitString.h
+++ b/WebCore/dom/SpaceSplitString.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2010 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
@@ -23,6 +23,7 @@
#include "AtomicString.h"
#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
@@ -64,9 +65,9 @@ namespace WebCore {
class SpaceSplitString {
public:
SpaceSplitString() { }
- SpaceSplitString(const String& string, bool shouldFoldCase) : m_data(new SpaceSplitStringData(string, shouldFoldCase)) { }
+ SpaceSplitString(const String& string, bool shouldFoldCase) : m_data(adoptPtr(new SpaceSplitStringData(string, shouldFoldCase))) { }
- void set(const String& string, bool shouldFoldCase) { m_data.set(new SpaceSplitStringData(string, shouldFoldCase)); }
+ void set(const String& string, bool shouldFoldCase) { m_data = adoptPtr(new SpaceSplitStringData(string, shouldFoldCase)); }
void clear() { m_data.clear(); }
bool contains(const AtomicString& string) const { return m_data && m_data->contains(string); }
diff --git a/WebCore/dom/StyleElement.cpp b/WebCore/dom/StyleElement.cpp
index a323e16..580f318 100644
--- a/WebCore/dom/StyleElement.cpp
+++ b/WebCore/dom/StyleElement.cpp
@@ -36,13 +36,13 @@ StyleElement::StyleElement()
StyleSheet* StyleElement::sheet(Element* e)
{
if (!m_sheet)
- createSheet(e);
+ createSheet(e, 0);
return m_sheet.get();
}
void StyleElement::insertedIntoDocument(Document*, Element* element)
{
- process(element);
+ process(element, 0);
}
void StyleElement::removedFromDocument(Document* document)
@@ -56,7 +56,7 @@ void StyleElement::removedFromDocument(Document* document)
document->updateStyleSelector();
}
-void StyleElement::process(Element* e)
+void StyleElement::process(Element* e, int startLineNumber)
{
if (!e || !e->inDocument())
return;
@@ -82,10 +82,10 @@ void StyleElement::process(Element* e)
}
ASSERT(p == text + resultLength);
- createSheet(e, sheetText);
+ createSheet(e, startLineNumber, sheetText);
}
-void StyleElement::createSheet(Element* e, const String& text)
+void StyleElement::createSheet(Element* e, int startLineNumber, const String& text)
{
Document* document = e->document();
if (m_sheet) {
@@ -104,7 +104,7 @@ void StyleElement::createSheet(Element* e, const String& text)
document->addPendingSheet();
setLoading(true);
m_sheet = CSSStyleSheet::create(e, String(), KURL(), document->inputEncoding());
- m_sheet->parseString(text, !document->inCompatMode());
+ m_sheet->parseStringAtLine(text, !document->inCompatMode(), startLineNumber);
m_sheet->setMedia(mediaList.get());
m_sheet->setTitle(e->title());
setLoading(false);
diff --git a/WebCore/dom/StyleElement.h b/WebCore/dom/StyleElement.h
index 9d3ac84..4ec10c4 100644
--- a/WebCore/dom/StyleElement.h
+++ b/WebCore/dom/StyleElement.h
@@ -24,6 +24,7 @@
namespace WebCore {
+class Document;
class Element;
class StyleElement {
@@ -41,9 +42,9 @@ protected:
void insertedIntoDocument(Document*, Element*);
void removedFromDocument(Document*);
- void process(Element*);
+ void process(Element*, int startLineNumber);
- void createSheet(Element* e, const String& text = String());
+ void createSheet(Element* e, int startLineNumber, const String& text = String());
protected:
RefPtr<CSSStyleSheet> m_sheet;
diff --git a/WebCore/dom/StyledElement.cpp b/WebCore/dom/StyledElement.cpp
index 994b084..9b22f1d 100644
--- a/WebCore/dom/StyledElement.cpp
+++ b/WebCore/dom/StyledElement.cpp
@@ -148,8 +148,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls)
if (attr->decl() && !preserveDecls) {
attr->setDecl(0);
setNeedsStyleRecalc();
- if (namedAttrMap)
- mappedAttributes()->declRemoved();
+ if (attributeMap())
+ attributeMap()->declRemoved();
}
bool checkDecl = true;
@@ -158,8 +158,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls)
if (preserveDecls) {
if (attr->decl()) {
setNeedsStyleRecalc();
- if (namedAttrMap)
- mappedAttributes()->declAdded();
+ if (attributeMap())
+ attributeMap()->declAdded();
checkDecl = false;
}
} else if (!attr->isNull() && entry != eNone) {
@@ -167,8 +167,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls)
if (decl) {
attr->setDecl(decl);
setNeedsStyleRecalc();
- if (namedAttrMap)
- mappedAttributes()->declAdded();
+ if (attributeMap())
+ attributeMap()->declAdded();
checkDecl = false;
} else
needToParse = true;
@@ -191,8 +191,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls)
attr->decl()->setMappedState(entry, attr->name(), attr->value());
attr->decl()->setParent(0);
attr->decl()->setNode(0);
- if (namedAttrMap)
- mappedAttributes()->declAdded();
+ if (attributeMap())
+ attributeMap()->declAdded();
}
updateAfterAttributeChanged(attr);
@@ -215,12 +215,13 @@ void StyledElement::classAttributeChanged(const AtomicString& newClassString)
if (!isClassWhitespace(characters[i]))
break;
}
- setHasClass(i < length);
- if (namedAttrMap) {
- if (i < length)
- mappedAttributes()->setClass(newClassString);
- else
- mappedAttributes()->clearClass();
+ bool hasClass = i < length;
+ setHasClass(hasClass);
+ if (hasClass)
+ attributes()->setClass(newClassString);
+ else {
+ if (attributeMap())
+ attributeMap()->clearClass();
}
setNeedsStyleRecalc();
dispatchSubtreeModifiedEvent();
@@ -230,13 +231,13 @@ void StyledElement::parseMappedAttribute(Attribute* attr)
{
if (isIdAttributeName(attr->name())) {
setHasID(!attr->isNull());
- if (namedAttrMap) {
+ if (attributeMap()) {
if (attr->isNull())
- namedAttrMap->setIdForStyleResolution(nullAtom);
+ attributeMap()->setIdForStyleResolution(nullAtom);
else if (document()->inCompatMode())
- namedAttrMap->setIdForStyleResolution(attr->value().lower());
+ attributeMap()->setIdForStyleResolution(attr->value().lower());
else
- namedAttrMap->setIdForStyleResolution(attr->value());
+ attributeMap()->setIdForStyleResolution(attr->value());
}
setNeedsStyleRecalc();
} else if (attr->name() == classAttr)
diff --git a/WebCore/dom/StyledElement.h b/WebCore/dom/StyledElement.h
index 6facce7..8040dbf 100644
--- a/WebCore/dom/StyledElement.h
+++ b/WebCore/dom/StyledElement.h
@@ -3,7 +3,7 @@
* (C) 1999 Antti Koivisto (koivisto@kde.org)
* (C) 2001 Peter Kelly (pmk@post.com)
* (C) 2001 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
@@ -26,10 +26,8 @@
#define StyledElement_h
#include "CSSMutableStyleDeclaration.h"
-#include "CSSPrimitiveValue.h"
#include "Element.h"
#include "MappedAttributeEntry.h"
-#include "NamedNodeMap.h"
namespace WebCore {
@@ -40,10 +38,7 @@ class StyledElement : public Element {
public:
virtual ~StyledElement();
- NamedNodeMap* mappedAttributes() { return namedAttrMap.get(); }
- const NamedNodeMap* mappedAttributes() const { return namedAttrMap.get(); }
-
- bool hasMappedAttributes() const { return namedAttrMap && mappedAttributes()->hasMappedAttributes(); }
+ bool hasMappedAttributes() const { return attributeMap() && attributeMap()->hasMappedAttributes(); }
bool isMappedAttribute(const QualifiedName& name) const { MappedAttributeEntry res = eNone; mapToEntry(name, res); return res != eNone; }
void addCSSLength(Attribute*, int id, const String& value);
@@ -61,12 +56,12 @@ public:
CSSMutableStyleDeclaration* inlineStyleDecl() const { return m_inlineStyleDecl.get(); }
virtual bool canHaveAdditionalAttributeStyleDecls() const { return false; }
- virtual void additionalAttributeStyleDecls(Vector<CSSMutableStyleDeclaration*>&) {};
+ virtual void additionalAttributeStyleDecls(Vector<CSSMutableStyleDeclaration*>&) { }
CSSMutableStyleDeclaration* getInlineStyleDecl();
CSSStyleDeclaration* style();
void invalidateStyleAttribute();
- const SpaceSplitString& classNames() const { ASSERT(hasClass()); ASSERT(mappedAttributes()); return mappedAttributes()->classNames(); }
+ const SpaceSplitString& classNames() const;
virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const;
@@ -101,6 +96,13 @@ private:
RefPtr<CSSMutableStyleDeclaration> m_inlineStyleDecl;
};
+inline const SpaceSplitString& StyledElement::classNames() const
+{
+ ASSERT(hasClass());
+ ASSERT(attributeMap());
+ return attributeMap()->classNames();
+}
+
inline void StyledElement::invalidateStyleAttribute()
{
clearIsStyleAttributeValid();
diff --git a/WebCore/dom/Traversal.h b/WebCore/dom/Traversal.h
index fc4403f..8b4f764 100644
--- a/WebCore/dom/Traversal.h
+++ b/WebCore/dom/Traversal.h
@@ -26,7 +26,6 @@
#define Traversal_h
#include "ScriptState.h"
-#include <wtf/Forward.h>
#include <wtf/RefPtr.h>
namespace WebCore {
diff --git a/WebCore/dom/make_names.pl b/WebCore/dom/make_names.pl
index a675438..9e0784a 100755
--- a/WebCore/dom/make_names.pl
+++ b/WebCore/dom/make_names.pl
@@ -37,17 +37,26 @@ use IO::File;
use InFilesParser;
use Switch;
+sub readTags($$);
+sub readAttrs($$);
+
my $printFactory = 0;
my $printWrapperFactory = 0;
my $printWrapperFactoryV8 = 0;
my $tagsFile = "";
my $attrsFile = "";
my $outputDir = ".";
-my %tags = ();
-my %attrs = ();
+my %parsedTags = ();
+my %parsedAttrs = ();
+my %enabledTags = ();
+my %enabledAttrs = ();
+my %allTags = ();
+my %allAttrs = ();
my %parameters = ();
my $extraDefines = 0;
+
require Config;
+
my $gccLocation = "";
if ($ENV{CC}) {
$gccLocation = $ENV{CC};
@@ -71,8 +80,15 @@ GetOptions(
die "You must specify at least one of --tags <file> or --attrs <file>" unless (length($tagsFile) || length($attrsFile));
-readNames($tagsFile, "tags") if length($tagsFile);
-readNames($attrsFile, "attrs") if length($attrsFile);
+if (length($tagsFile)) {
+ %allTags = %{readTags($tagsFile, 0)};
+ %enabledTags = %{readTags($tagsFile, 1)};
+}
+
+if (length($attrsFile)) {
+ %allAttrs = %{readAttrs($attrsFile, 0)};
+ %enabledAttrs = %{readAttrs($attrsFile, 1)};
+}
die "You must specify a namespace (e.g. SVG) for <namespace>Names.h" unless $parameters{namespace};
die "You must specify a namespaceURI (e.g. http://www.w3.org/2000/svg)" unless $parameters{namespaceURI};
@@ -149,16 +165,16 @@ sub tagsHandler
$tag =~ s/-/_/g;
# Initialize default property values.
- $tags{$tag} = { defaultTagPropertyHash($tag) } if !defined($tags{$tag});
+ $parsedTags{$tag} = { defaultTagPropertyHash($tag) } if !defined($parsedTags{$tag});
if ($property) {
- die "Unknown property $property for tag $tag\n" if !defined($tags{$tag}{$property});
+ die "Unknown property $property for tag $tag\n" if !defined($parsedTags{$tag}{$property});
# The code relies on JSInterfaceName deriving from interfaceName to check for custom JSInterfaceName.
# So override JSInterfaceName if it was not already set.
- $tags{$tag}{JSInterfaceName} = $value if $property eq "interfaceName" && $tags{$tag}{JSInterfaceName} eq $tags{$tag}{interfaceName};
+ $parsedTags{$tag}{JSInterfaceName} = $value if $property eq "interfaceName" && $parsedTags{$tag}{JSInterfaceName} eq $parsedTags{$tag}{interfaceName};
- $tags{$tag}{$property} = $value;
+ $parsedTags{$tag}{$property} = $value;
}
}
@@ -169,11 +185,11 @@ sub attrsHandler
$attr =~ s/-/_/g;
# Initialize default properties' values.
- $attrs{$attr} = {} if !defined($attrs{$attr});
+ $parsedAttrs{$attr} = {} if !defined($parsedAttrs{$attr});
if ($property) {
- die "Unknown property $property for attribute $attr\n" if !defined($attrs{$attr}{$property});
- $attrs{$attr}{$property} = $value;
+ die "Unknown property $property for attribute $attr\n" if !defined($parsedAttrs{$attr}{$property});
+ $parsedAttrs{$attr}{$property} = $value;
}
}
@@ -190,39 +206,43 @@ sub parametersHandler
## Support routines
-sub readNames
+sub preprocessorCommand()
{
- my ($namesFile, $type) = @_;
+ return $preprocessor if $extraDefines eq 0;
+ return $preprocessor . " -D" . join(" -D", split(" ", $extraDefines));
+}
- my $names = new IO::File;
+sub readNames($$$$)
+{
+ my ($namesFile, $hashToFillRef, $handler, $usePreprocessor) = @_;
- if ($extraDefines eq 0) {
- open($names, $preprocessor . " " . $namesFile . "|") or die "Failed to open file: $namesFile";
+ my $names = new IO::File;
+ if ($usePreprocessor) {
+ open($names, preprocessorCommand() . " " . $namesFile . "|") or die "Failed to open file: $namesFile";
} else {
- open($names, $preprocessor . " -D" . join(" -D", split(" ", $extraDefines)) . " " . $namesFile . "|") or die "Failed to open file: $namesFile";
+ open($names, $namesFile) or die "Failed to open file: $namesFile";
}
- # Store hashes keys count to know if some insertion occured.
- my $tagsCount = keys %tags;
- my $attrsCount = keys %attrs;
-
my $InParser = InFilesParser->new();
-
- switch ($type) {
- case "tags" {
- $InParser->parse($names, \&parametersHandler, \&tagsHandler);
- }
- case "attrs" {
- $InParser->parse($names, \&parametersHandler, \&attrsHandler);
- }
- else {
- die "Do not know how to parse $type";
- }
- }
+ $InParser->parse($names, \&parametersHandler, $handler);
close($names);
+ die "Failed to read names from file: $namesFile" if (keys %{$hashToFillRef} == 0);
+ return $hashToFillRef;
+}
- die "Failed to read names from file: $namesFile" if ((keys %tags == $tagsCount) && (keys %attrs == $attrsCount));
+sub readAttrs($$)
+{
+ my ($namesFile, $usePreprocessor) = @_;
+ %parsedAttrs = ();
+ return readNames($namesFile, \%parsedAttrs, \&attrsHandler, $usePreprocessor);
+}
+
+sub readTags($$)
+{
+ my ($namesFile, $usePreprocessor) = @_;
+ %parsedTags = ();
+ return readNames($namesFile, \%parsedTags, \&tagsHandler, $usePreprocessor);
}
sub printMacros
@@ -246,13 +266,13 @@ sub usesDefaultWrapper
sub buildConstructorMap
{
my %tagConstructorMap = ();
- for my $tagName (keys %tags) {
- my $interfaceName = $tags{$tagName}{interfaceName};
+ for my $tagName (keys %enabledTags) {
+ my $interfaceName = $enabledTags{$tagName}{interfaceName};
next if (usesDefaultWrapper($interfaceName));
- if ($tags{$tagName}{mapToTagName}) {
- die "Cannot handle multiple mapToTagName for $tagName\n" if $tags{$tags{$tagName}{mapToTagName}}{mapToTagName};
- $interfaceName = $tags{ $tags{$tagName}{mapToTagName} }{interfaceName};
+ if ($enabledTags{$tagName}{mapToTagName}) {
+ die "Cannot handle multiple mapToTagName for $tagName\n" if $enabledTags{$enabledTags{$tagName}{mapToTagName}}{mapToTagName};
+ $interfaceName = $enabledTags{ $enabledTags{$tagName}{mapToTagName} }{interfaceName};
}
# Chop the string to keep the interesting part.
@@ -272,10 +292,10 @@ sub printConstructorSignature
print F "static PassRefPtr<$parameters{namespace}Element> ${constructorName}Constructor(const QualifiedName& $constructorTagName, Document* document";
if ($parameters{namespace} eq "HTML") {
print F ", HTMLFormElement*";
- print F " formElement" if $tags{$tagName}{constructorNeedsFormElement};
+ print F " formElement" if $enabledTags{$tagName}{constructorNeedsFormElement};
}
print F ", bool";
- print F " createdByParser" if $tags{$tagName}{constructorNeedsCreatedByParser};
+ print F " createdByParser" if $enabledTags{$tagName}{constructorNeedsCreatedByParser};
print F ")\n{\n";
}
@@ -287,7 +307,7 @@ sub printConstructorInterior
my ($F, $tagName, $interfaceName, $constructorTagName) = @_;
# Handle media elements.
- if ($tags{$tagName}{wrapperOnlyIfMediaIsAvailable}) {
+ if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) {
print F <<END
Settings* settings = document->settings();
if (!MediaPlayer::isAvailable() || (settings && !settings->isMediaEnabled()))
@@ -300,15 +320,15 @@ END
my $newPrefix = "";
my $createSuffix = "::create";
- if ($tags{$tagName}{createWithNew}) {
+ if ($enabledTags{$tagName}{createWithNew}) {
$newPrefix = "new ";
$createSuffix = "";
}
# Call the constructor with the right parameters.
print F " return $newPrefix$interfaceName${createSuffix}($constructorTagName, document";
- print F ", formElement" if $tags{$tagName}{constructorNeedsFormElement};
- print F ", createdByParser" if $tags{$tagName}{constructorNeedsCreatedByParser};
+ print F ", formElement" if $enabledTags{$tagName}{constructorNeedsFormElement};
+ print F ", createdByParser" if $enabledTags{$tagName}{constructorNeedsCreatedByParser};
print F ");\n}\n\n";
}
@@ -317,20 +337,18 @@ sub printConstructors
my ($F, $tagConstructorMapRef) = @_;
my %tagConstructorMap = %$tagConstructorMapRef;
- print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith};
-
# This is to avoid generating the same constructor several times.
my %uniqueTags = ();
for my $tagName (sort keys %tagConstructorMap) {
- my $interfaceName = $tags{$tagName}{interfaceName};
+ my $interfaceName = $enabledTags{$tagName}{interfaceName};
# Ignore the mapped tag
# FIXME: It could be moved inside this loop but was split for readibility.
- next if (defined($uniqueTags{$interfaceName}) || $tags{$tagName}{mapToTagName});
+ next if (defined($uniqueTags{$interfaceName}) || $enabledTags{$tagName}{mapToTagName});
$uniqueTags{$interfaceName} = '1';
- my $conditional = $tags{$tagName}{conditional};
+ my $conditional = $enabledTags{$tagName}{conditional};
if ($conditional) {
my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")";
print F "#if ${conditionalString}\n\n";
@@ -346,14 +364,12 @@ sub printConstructors
# Mapped tag name uses a special wrapper to keep their prefix and namespaceURI while using the mapped localname.
for my $tagName (sort keys %tagConstructorMap) {
- if ($tags{$tagName}{mapToTagName}) {
- my $mappedName = $tags{$tagName}{mapToTagName};
+ if ($enabledTags{$tagName}{mapToTagName}) {
+ my $mappedName = $enabledTags{$tagName}{mapToTagName};
printConstructorSignature($F, $mappedName, $mappedName . "To" . $tagName, "tagName");
- printConstructorInterior($F, $mappedName, $tags{$mappedName}{interfaceName}, "QualifiedName(tagName.prefix(), ${mappedName}Tag.localName(), tagName.namespaceURI())");
+ printConstructorInterior($F, $mappedName, $enabledTags{$mappedName}{interfaceName}, "QualifiedName(tagName.prefix(), ${mappedName}Tag.localName(), tagName.namespaceURI())");
}
}
-
- print F "#endif\n" if $parameters{guardFactoryWith};
}
sub printFunctionInits
@@ -363,14 +379,14 @@ sub printFunctionInits
for my $tagName (sort keys %tagConstructorMap) {
- my $conditional = $tags{$tagName}{conditional};
+ my $conditional = $enabledTags{$tagName}{conditional};
if ($conditional) {
my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")";
print F "#if ${conditionalString}\n";
}
- if ($tags{$tagName}{mapToTagName}) {
- print F " addTag(${tagName}Tag, $tags{$tagName}{mapToTagName}To${tagName}Constructor);\n";
+ if ($enabledTags{$tagName}{mapToTagName}) {
+ print F " addTag(${tagName}Tag, $enabledTags{$tagName}{mapToTagName}To${tagName}Constructor);\n";
} else {
print F " addTag(${tagName}Tag, $tagConstructorMap{$tagName}Constructor);\n";
}
@@ -456,22 +472,22 @@ sub printNamesHeaderFile
print F "// Namespace\n";
print F "extern const WebCore::AtomicString ${lowerNamespace}NamespaceURI;\n\n";
- if (keys %tags) {
+ if (keys %allTags) {
print F "// Tags\n";
- printMacros($F, "extern const WebCore::QualifiedName", "Tag", \%tags);
+ printMacros($F, "extern const WebCore::QualifiedName", "Tag", \%allTags);
}
- if (keys %attrs) {
+ if (keys %allAttrs) {
print F "// Attributes\n";
- printMacros($F, "extern const WebCore::QualifiedName", "Attr", \%attrs);
+ printMacros($F, "extern const WebCore::QualifiedName", "Attr", \%allAttrs);
}
print F "#endif\n\n";
- if (keys %tags) {
+ if (keys %allTags) {
print F "WebCore::QualifiedName** get$parameters{namespace}Tags(size_t* size);\n";
}
- if (keys %attrs) {
+ if (keys %allAttrs) {
print F "WebCore::QualifiedName** get$parameters{namespace}Attrs(size_t* size);\n";
}
@@ -511,35 +527,35 @@ using namespace WebCore;
DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI, \"$parameters{namespaceURI}\")
";
- if (keys %tags) {
+ if (keys %allTags) {
print F "// Tags\n";
- for my $name (sort keys %tags) {
+ for my $name (sort keys %allTags) {
print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Tag, nullAtom, \"$name\", ${lowerNamespace}NamespaceURI);\n";
}
print F "\n\nWebCore::QualifiedName** get$parameters{namespace}Tags(size_t* size)\n";
print F "{\n static WebCore::QualifiedName* $parameters{namespace}Tags[] = {\n";
- for my $name (sort keys %tags) {
+ for my $name (sort keys %allTags) {
print F " (WebCore::QualifiedName*)&${name}Tag,\n";
}
print F " };\n";
- print F " *size = ", scalar(keys %tags), ";\n";
+ print F " *size = ", scalar(keys %allTags), ";\n";
print F " return $parameters{namespace}Tags;\n";
print F "}\n";
}
- if (keys %attrs) {
+ if (keys %allAttrs) {
print F "\n// Attributes\n";
- for my $name (sort keys %attrs) {
+ for my $name (sort keys %allAttrs) {
print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Attr, nullAtom, \"$name\", ${lowerNamespace}NamespaceURI);\n";
}
print F "\n\nWebCore::QualifiedName** get$parameters{namespace}Attrs(size_t* size)\n";
print F "{\n static WebCore::QualifiedName* $parameters{namespace}Attr[] = {\n";
- for my $name (sort keys %attrs) {
+ for my $name (sort keys %allAttrs) {
print F " (WebCore::QualifiedName*)&${name}Attr,\n";
}
print F " };\n";
- print F " *size = ", scalar(keys %attrs), ";\n";
+ print F " *size = ", scalar(keys %allAttrs), ";\n";
print F " return $parameters{namespace}Attr;\n";
print F "}\n";
}
@@ -560,13 +576,13 @@ print F "\nvoid init()
print(F " // Namespace\n");
print(F " new ((void*)&${lowerNamespace}NamespaceURI) AtomicString(${lowerNamespace}NS);\n\n");
- if (keys %tags) {
+ if (keys %allTags) {
my $tagsNamespace = $parameters{tagsNullNamespace} ? "nullAtom" : "${lowerNamespace}NS";
- printDefinitions($F, \%tags, "tags", $tagsNamespace);
+ printDefinitions($F, \%allTags, "tags", $tagsNamespace);
}
- if (keys %attrs) {
+ if (keys %allAttrs) {
my $attrsNamespace = $parameters{attrsNullNamespace} ? "nullAtom" : "${lowerNamespace}NS";
- printDefinitions($F, \%attrs, "attributes", $attrsNamespace);
+ printDefinitions($F, \%allAttrs, "attributes", $attrsNamespace);
}
print F "}\n\n} }\n\n";
@@ -579,8 +595,8 @@ sub printJSElementIncludes
my $wrapperFactoryType = shift;
my %tagsSeen;
- for my $tagName (sort keys %tags) {
- my $JSInterfaceName = $tags{$tagName}{JSInterfaceName};
+ for my $tagName (sort keys %enabledTags) {
+ my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName};
next if defined($tagsSeen{$JSInterfaceName}) || usesDefaultJSWrapper($tagName);
$tagsSeen{$JSInterfaceName} = 1;
@@ -593,8 +609,8 @@ sub printElementIncludes
my $F = shift;
my %tagsSeen;
- for my $tagName (sort keys %tags) {
- my $interfaceName = $tags{$tagName}{interfaceName};
+ for my $tagName (sort keys %enabledTags) {
+ my $interfaceName = $enabledTags{$tagName}{interfaceName};
next if defined($tagsSeen{$interfaceName});
$tagsSeen{$interfaceName} = 1;
@@ -632,11 +648,12 @@ printLicenseHeader($F);
print F <<END
#include "config.h"
#include "$parameters{namespace}ElementFactory.h"
-
#include "$parameters{namespace}Names.h"
END
;
+print F "\n#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith};
+
printElementIncludes($F);
print F <<END
@@ -669,8 +686,6 @@ my %tagConstructorMap = buildConstructorMap();
printConstructors($F, \%tagConstructorMap);
-print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith};
-
print F <<END
static void addTag(const QualifiedName& tag, ConstructorFunction func)
{
@@ -691,14 +706,11 @@ END
printFunctionInits($F, \%tagConstructorMap);
print F "}\n";
-print F "#endif\n" if $parameters{guardFactoryWith};
print F "\nPassRefPtr<$parameters{namespace}Element> $parameters{namespace}ElementFactory::create$parameters{namespace}Element(const QualifiedName& qName, Document* document";
print F ", HTMLFormElement* formElement" if $parameters{namespace} eq "HTML";
print F ", bool createdByParser)\n{\n";
-print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith};
-
print F <<END
if (!document)
return 0;
@@ -733,17 +745,6 @@ if ($parameters{namespace} eq "HTML") {
print F " return $parameters{namespace}Element::create(qName, document);\n";
-if ($parameters{guardFactoryWith}) {
-
-print F <<END
-#else
- return 0;
-#endif
-END
-;
-
-}
-
print F <<END
}
@@ -752,6 +753,8 @@ print F <<END
END
;
+ print F "#endif\n" if $parameters{guardFactoryWith};
+
close F;
}
@@ -794,7 +797,7 @@ END
;
print F " static PassRefPtr<$parameters{namespace}Element> create$parameters{namespace}Element(const WebCore::QualifiedName&, WebCore::Document*";
print F ", HTMLFormElement* = 0" if $parameters{namespace} eq "HTML";
-print F ", bool /*createdByParser*/ = true);\n";
+print F ", bool createdByParser = true);\n";
printf F<<END
};
@@ -815,7 +818,7 @@ sub usesDefaultJSWrapper
my $name = shift;
# A tag reuses the default wrapper if its JSInterfaceName matches the default namespace Element.
- return $tags{$name}{JSInterfaceName} eq $parameters{namespace} . "Element" || $tags{$name}{JSInterfaceName} eq "HTMLNoScriptElement";
+ return $enabledTags{$name}{JSInterfaceName} eq $parameters{namespace} . "Element" || $enabledTags{$name}{JSInterfaceName} eq "HTMLNoScriptElement";
}
sub printWrapperFunctions
@@ -824,13 +827,13 @@ sub printWrapperFunctions
my $wrapperFactoryType = shift;
my %tagsSeen;
- for my $tagName (sort keys %tags) {
+ for my $tagName (sort keys %enabledTags) {
# Avoid defining the same wrapper method twice.
- my $JSInterfaceName = $tags{$tagName}{JSInterfaceName};
+ my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName};
next if defined($tagsSeen{$JSInterfaceName}) || usesDefaultJSWrapper($tagName);
$tagsSeen{$JSInterfaceName} = 1;
- my $conditional = $tags{$tagName}{conditional};
+ my $conditional = $enabledTags{$tagName}{conditional};
if ($conditional) {
my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")";
print F "#if ${conditionalString}\n\n";
@@ -839,7 +842,7 @@ sub printWrapperFunctions
if ($wrapperFactoryType eq "JS") {
# Hack for the media tags
# FIXME: This should have been done via a CustomWrapper attribute and a separate *Custom file.
- if ($tags{$tagName}{wrapperOnlyIfMediaIsAvailable}) {
+ if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) {
print F <<END
static JSNode* create${JSInterfaceName}Wrapper(ExecState* exec, JSDOMGlobalObject* globalObject, PassRefPtr<$parameters{namespace}Element> element)
{
@@ -862,7 +865,7 @@ END
;
}
} elsif ($wrapperFactoryType eq "V8") {
- if ($tags{$tagName}{wrapperOnlyIfMediaIsAvailable}) {
+ if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) {
print F <<END
static v8::Handle<v8::Value> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element)
{
@@ -903,12 +906,11 @@ sub printWrapperFactoryCppFile
printLicenseHeader($F);
- print F "#include \"config.h\"\n\n";
-
- print F "#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith};
-
+ print F "#include \"config.h\"\n";
print F "#include \"$wrapperFactoryType$parameters{namespace}ElementWrapperFactory.h\"\n";
+ print F "\n#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith};
+
printJSElementIncludes($F, $wrapperFactoryType);
print F "\n#include \"$parameters{namespace}Names.h\"\n\n";
@@ -984,17 +986,17 @@ END
;
}
- for my $tag (sort keys %tags) {
+ for my $tag (sort keys %enabledTags) {
# Do not add the name to the map if it does not have a JS wrapper constructor or uses the default wrapper.
- next if usesDefaultJSWrapper($tag, \%tags);
+ next if usesDefaultJSWrapper($tag, \%enabledTags);
- my $conditional = $tags{$tag}{conditional};
+ my $conditional = $enabledTags{$tag}{conditional};
if ($conditional) {
my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")";
print F "#if ${conditionalString}\n";
}
- my $ucTag = $tags{$tag}{JSInterfaceName};
+ my $ucTag = $enabledTags{$tag}{JSInterfaceName};
print F " map.set(${tag}Tag.localName().impl(), create${ucTag}Wrapper);\n";
if ($conditional) {
diff --git a/WebCore/editing/EditingBehavior.h b/WebCore/editing/EditingBehavior.h
index fe09e1b..d442ad6 100644
--- a/WebCore/editing/EditingBehavior.h
+++ b/WebCore/editing/EditingBehavior.h
@@ -49,6 +49,10 @@ public:
// content should be scrolled such that the selection gets certer aligned.
bool shouldCenterAlignWhenSelectionIsRevealed() const { return m_type == EditingMacBehavior; }
+ // On Mac, style is considered present when present at the beginning of selection. On other platforms,
+ // style has to be present throughout the selection.
+ bool shouldToggleStyleBasedOnStartOfSelection() const { return m_type == EditingMacBehavior; }
+
private:
EditingBehaviorType m_type;
};
diff --git a/WebCore/editing/EditorCommand.cpp b/WebCore/editing/EditorCommand.cpp
index 0fc0068..1a77642 100644
--- a/WebCore/editing/EditorCommand.cpp
+++ b/WebCore/editing/EditorCommand.cpp
@@ -165,9 +165,10 @@ static bool executeToggleStyle(Frame* frame, EditorCommandSource source, EditAct
// Style is considered present when
// mac: present at the beginning of selection
// other: present throughout the selection
- Settings* settings = frame->document()->settings();
+
+ // FIXME: Make stateStyle() to use this editing method too for the cases where it's used for queryCommandState.
bool styleIsPresent;
- if (settings && settings->editingBehaviorType() == EditingMacBehavior)
+ if (frame->editor()->behavior().shouldToggleStyleBasedOnStartOfSelection())
styleIsPresent = frame->editor()->selectionStartHasStyle(style.get());
else
styleIsPresent = frame->editor()->selectionHasStyle(style.get()) == TrueTriState;
diff --git a/WebCore/editing/IndentOutdentCommand.cpp b/WebCore/editing/IndentOutdentCommand.cpp
index 4158521..f041aa7 100644
--- a/WebCore/editing/IndentOutdentCommand.cpp
+++ b/WebCore/editing/IndentOutdentCommand.cpp
@@ -34,6 +34,7 @@
#include "InsertListCommand.h"
#include "Range.h"
#include "SplitElementCommand.h"
+#include "Text.h"
#include "TextIterator.h"
#include "htmlediting.h"
#include "visible_units.h"
@@ -62,6 +63,22 @@ static bool isListOrIndentBlockquote(const Node* node)
return node && (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(blockquoteTag));
}
+// This function can return -1 if we are unable to count the paragraphs between |start| and |end|.
+static int countParagraphs(const VisiblePosition& endOfFirstParagraph, const VisiblePosition& endOfLastParagraph)
+{
+ int count = 0;
+ VisiblePosition cur = endOfFirstParagraph;
+ while (cur != endOfLastParagraph) {
+ ++count;
+ cur = endOfParagraph(cur.next());
+ // If start is before a table and end is inside a table, we will never hit end because the
+ // whole table is considered a single paragraph.
+ if (cur.isNull())
+ return -1;
+ }
+ return count;
+}
+
IndentOutdentCommand::IndentOutdentCommand(Document* document, EIndentType typeOfAction, int marginInPixels)
: CompositeEditCommand(document), m_typeOfAction(typeOfAction), m_marginInPixels(marginInPixels)
{
@@ -147,6 +164,24 @@ void IndentOutdentCommand::indentRegion(const VisiblePosition& startOfSelection,
RefPtr<Element> blockquoteForNextIndent;
VisiblePosition endOfCurrentParagraph = endOfParagraph(startOfSelection);
VisiblePosition endAfterSelection = endOfParagraph(endOfParagraph(endOfSelection).next());
+ int endOfCurrentParagraphIndex = indexForVisiblePosition(endOfCurrentParagraph);
+ int endAfterSelectionIndex = indexForVisiblePosition(endAfterSelection);
+
+ // When indenting within a <pre> tag, we need to split each paragraph into a separate node for moveParagraphWithClones to work.
+ // However, splitting text nodes can cause endOfCurrentParagraph and endAfterSelection to point to an invalid position if we
+ // changed the text node it was pointing at. So we have to reset these positions.
+ int numParagraphs = countParagraphs(endOfCurrentParagraph, endAfterSelection);
+ if (splitTextNodes(startOfParagraph(startOfSelection), numParagraphs + 1)) {
+ RefPtr<Range> endOfCurrentParagraphRange = TextIterator::rangeFromLocationAndLength(document()->documentElement(), endOfCurrentParagraphIndex, 0, true);
+ RefPtr<Range> endAfterSelectionRange = TextIterator::rangeFromLocationAndLength(document()->documentElement(), endAfterSelectionIndex, 0, true);
+ if (!endOfCurrentParagraphRange.get() || !endAfterSelectionRange.get()) {
+ ASSERT_NOT_REACHED();
+ return;
+ }
+ endOfCurrentParagraph = VisiblePosition(endOfCurrentParagraphRange->startPosition(), DOWNSTREAM);
+ endAfterSelection = VisiblePosition(endAfterSelectionRange->startPosition(), DOWNSTREAM);
+ }
+
while (endOfCurrentParagraph != endAfterSelection) {
// Iterate across the selected paragraphs...
VisiblePosition endOfNextParagraph = endOfParagraph(endOfCurrentParagraph.next());
@@ -170,6 +205,29 @@ void IndentOutdentCommand::indentRegion(const VisiblePosition& startOfSelection,
}
}
+// Returns true if at least one text node was split.
+bool IndentOutdentCommand::splitTextNodes(const VisiblePosition& start, int numParagraphs)
+{
+ VisiblePosition currentParagraphStart = start;
+ bool hasSplit = false;
+ int paragraphCount;
+ for (paragraphCount = 0; paragraphCount < numParagraphs; ++paragraphCount) {
+ // If there are multiple paragraphs in a single text node, we split the text node into a separate node for each paragraph.
+ if (currentParagraphStart.deepEquivalent().node()->isTextNode() && currentParagraphStart.deepEquivalent().node() == startOfParagraph(currentParagraphStart.previous()).deepEquivalent().node()) {
+ Text* textNode = static_cast<Text *>(currentParagraphStart.deepEquivalent().node());
+ int offset = currentParagraphStart.deepEquivalent().offsetInContainerNode();
+ splitTextNode(textNode, offset);
+ currentParagraphStart = VisiblePosition(textNode, 0, VP_DEFAULT_AFFINITY);
+ hasSplit = true;
+ }
+ VisiblePosition nextParagraph = startOfParagraph(endOfParagraph(currentParagraphStart).next());
+ if (nextParagraph.isNull())
+ break;
+ currentParagraphStart = nextParagraph;
+ }
+ return hasSplit;
+}
+
void IndentOutdentCommand::outdentParagraph()
{
VisiblePosition visibleStartOfParagraph = startOfParagraph(endingSelection().visibleStart());
diff --git a/WebCore/editing/IndentOutdentCommand.h b/WebCore/editing/IndentOutdentCommand.h
index 8705bf1..8644cc5 100644
--- a/WebCore/editing/IndentOutdentCommand.h
+++ b/WebCore/editing/IndentOutdentCommand.h
@@ -51,6 +51,7 @@ private:
void outdentParagraph();
bool tryIndentingAsListItem(const VisiblePosition&);
void indentIntoBlockquote(const VisiblePosition&, const VisiblePosition&, RefPtr<Element>&);
+ bool splitTextNodes(const VisiblePosition& start, int numParagraphs);
EIndentType m_typeOfAction;
int m_marginInPixels;
diff --git a/WebCore/editing/InsertLineBreakCommand.cpp b/WebCore/editing/InsertLineBreakCommand.cpp
index caaae0a..d805acf 100644
--- a/WebCore/editing/InsertLineBreakCommand.cpp
+++ b/WebCore/editing/InsertLineBreakCommand.cpp
@@ -94,6 +94,11 @@ void InsertLineBreakCommand::doApply()
return;
VisiblePosition caret(selection.visibleStart());
+ // FIXME: If the node is hidden, we should still be able to insert text.
+ // For now, we return to avoid a crash. https://bugs.webkit.org/show_bug.cgi?id=40342
+ if (caret.isNull())
+ return;
+
Position pos(caret.deepEquivalent());
pos = positionAvoidingSpecialElementBoundary(pos);
diff --git a/WebCore/editing/InsertParagraphSeparatorCommand.cpp b/WebCore/editing/InsertParagraphSeparatorCommand.cpp
index f5825b7..d8aa98f 100644
--- a/WebCore/editing/InsertParagraphSeparatorCommand.cpp
+++ b/WebCore/editing/InsertParagraphSeparatorCommand.cpp
@@ -172,8 +172,9 @@ void InsertParagraphSeparatorCommand::doApply()
|| !startBlock->parentNode()
|| isTableCell(startBlock)
|| startBlock->hasTagName(formTag)
- || (canonicalPos.node()->renderer() && canonicalPos.node()->renderer()->isTable())
- || canonicalPos.node()->hasTagName(hrTag)) {
+ // FIXME: If the node is hidden, we don't have a canonical position so we will do the wrong thing for tables and <hr>. https://bugs.webkit.org/show_bug.cgi?id=40342
+ || (!canonicalPos.isNull() && canonicalPos.node()->renderer() && canonicalPos.node()->renderer()->isTable())
+ || (!canonicalPos.isNull() && canonicalPos.node()->hasTagName(hrTag))) {
applyCommandToComposite(InsertLineBreakCommand::create(document()));
return;
}
diff --git a/WebCore/editing/SelectionController.cpp b/WebCore/editing/SelectionController.cpp
index b17ab10..9ca375b 100644
--- a/WebCore/editing/SelectionController.cpp
+++ b/WebCore/editing/SelectionController.cpp
@@ -38,6 +38,7 @@
#include "FrameTree.h"
#include "FrameView.h"
#include "GraphicsContext.h"
+#include "HTMLFrameOwnerElement.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "HitTestRequest.h"
@@ -106,11 +107,11 @@ void SelectionController::moveTo(const Position &base, const Position &extent, E
setSelection(VisibleSelection(base, extent, affinity), true, true, userTriggered);
}
-void SelectionController::setSelection(const VisibleSelection& s, bool closeTyping, bool clearTypingStyle, bool userTriggered, CursorAlignOnScroll align, TextGranularity granularity)
+void SelectionController::setSelection(const VisibleSelection& s, bool closeTyping, bool clearTypingStyle, bool userTriggered, CursorAlignOnScroll align, TextGranularity granularity, DirectionalityPolicy directionalityPolicy)
{
m_granularity = granularity;
- setIsDirectional(false);
+ setIsDirectional(directionalityPolicy == MakeDirectionalSelection);
if (m_isDragCaretController) {
invalidateCaretRect();
@@ -1432,6 +1433,9 @@ void SelectionController::updateAppearance()
}
#endif
+ // We need to update style in case the node containing the selection is made display:none.
+ m_frame->document()->updateStyleIfNeeded();
+
RenderView* view = m_frame->contentRenderer();
if (!view)
return;
diff --git a/WebCore/editing/SelectionController.h b/WebCore/editing/SelectionController.h
index e4c2964..5d2ee9f 100644
--- a/WebCore/editing/SelectionController.h
+++ b/WebCore/editing/SelectionController.h
@@ -41,6 +41,8 @@ class RenderView;
class Settings;
class VisiblePosition;
+enum DirectionalityPolicy { MakeNonDirectionalSelection, MakeDirectionalSelection };
+
class SelectionController : public Noncopyable {
public:
enum EAlteration { AlterationMove, AlterationExtend };
@@ -62,8 +64,8 @@ public:
void moveTo(const Position&, const Position&, EAffinity, bool userTriggered = false);
const VisibleSelection& selection() const { return m_selection; }
- void setSelection(const VisibleSelection&, bool closeTyping = true, bool clearTypingStyle = true, bool userTriggered = false, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded, TextGranularity = CharacterGranularity);
- void setSelection(const VisibleSelection& selection, TextGranularity granularity) { setSelection(selection, true, true, false, AlignCursorOnScrollIfNeeded, granularity); }
+ void setSelection(const VisibleSelection&, bool closeTyping = true, bool clearTypingStyle = true, bool userTriggered = false, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded, TextGranularity = CharacterGranularity, DirectionalityPolicy = MakeDirectionalSelection);
+ void setSelection(const VisibleSelection& selection, TextGranularity granularity, DirectionalityPolicy directionality = MakeDirectionalSelection) { setSelection(selection, true, true, false, AlignCursorOnScrollIfNeeded, granularity, directionality); }
bool setSelectedRange(Range*, EAffinity, bool closeTyping);
void selectAll();
void clear();
diff --git a/WebCore/history/BackForwardController.cpp b/WebCore/history/BackForwardController.cpp
new file mode 100644
index 0000000..9f557ac
--- /dev/null
+++ b/WebCore/history/BackForwardController.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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 "config.h"
+#include "BackForwardController.h"
+
+#include "BackForwardControllerClient.h"
+#include "BackForwardList.h"
+#include "BackForwardListImpl.h"
+
+namespace WebCore {
+
+BackForwardController::BackForwardController(Page* page, BackForwardControllerClient* client)
+ : m_page(page)
+ , m_client(client)
+{
+ if (!m_client)
+ m_list = BackForwardListImpl::create(page);
+ else
+ m_list = m_client->createBackForwardList(page);
+}
+
+BackForwardController::~BackForwardController()
+{
+ if (m_client)
+ m_client->backForwardControllerDestroyed();
+}
+
+} // namespace WebCore
diff --git a/WebCore/history/BackForwardController.h b/WebCore/history/BackForwardController.h
new file mode 100644
index 0000000..02c13a1
--- /dev/null
+++ b/WebCore/history/BackForwardController.h
@@ -0,0 +1,54 @@
+/*
+ * 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 BackForwardController_h
+#define BackForwardController_h
+
+#include "BackForwardList.h"
+#include <wtf/Noncopyable.h>
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+
+class Page;
+class BackForwardControllerClient;
+
+class BackForwardController : public Noncopyable {
+public:
+ BackForwardController(Page*, BackForwardControllerClient*);
+ ~BackForwardController();
+
+ BackForwardControllerClient* client() const { return m_client; }
+ BackForwardList* list() const { return m_list.get(); }
+
+private:
+ Page* m_page;
+ BackForwardControllerClient* m_client;
+ RefPtr<BackForwardList> m_list;
+};
+
+} // namespace WebCore
+
+#endif // BackForwardController_h
diff --git a/WebCore/history/BackForwardControllerClient.h b/WebCore/history/BackForwardControllerClient.h
new file mode 100644
index 0000000..289ad12
--- /dev/null
+++ b/WebCore/history/BackForwardControllerClient.h
@@ -0,0 +1,48 @@
+/*
+ * 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 BackForwardControllerClient_h
+#define BackForwardControllerClient_h
+
+#include "BackForwardList.h"
+#include <wtf/PassRefPtr.h>
+
+namespace WebCore {
+
+class Page;
+
+class BackForwardControllerClient {
+public:
+ virtual void backForwardControllerDestroyed() = 0;
+
+ virtual PassRefPtr<BackForwardList> createBackForwardList(Page*) = 0;
+
+protected:
+ virtual ~BackForwardControllerClient() { }
+};
+
+} // namespace WebCore
+
+#endif // BackForwardControllerClient_h
diff --git a/WebCore/history/BackForwardList.h b/WebCore/history/BackForwardList.h
index eb4921a..0813054 100644
--- a/WebCore/history/BackForwardList.h
+++ b/WebCore/history/BackForwardList.h
@@ -30,19 +30,13 @@
#include <wtf/RefCounted.h>
#include <wtf/PassRefPtr.h>
-#include <wtf/HashSet.h>
#include <wtf/Vector.h>
namespace WebCore {
-class Document;
class HistoryItem;
-class Page;
-class SerializedScriptValue;
-class String;
typedef Vector<RefPtr<HistoryItem> > HistoryItemVector;
-typedef HashSet<RefPtr<HistoryItem> > HistoryItemHashSet;
#if PLATFORM(CHROMIUM)
// In the Chromium port, the back/forward list is managed externally.
@@ -62,65 +56,56 @@ public:
class BackForwardList : public RefCounted<BackForwardList> {
public:
- static PassRefPtr<BackForwardList> create(Page* page) { return adoptRef(new BackForwardList(page)); }
- ~BackForwardList();
+ virtual ~BackForwardList()
+ {
+ }
+
+ virtual bool isBackForwardListImpl() const { return false; }
#if PLATFORM(CHROMIUM)
// Must be called before any other methods.
- void setClient(BackForwardListClient* client) { m_client = client; }
+ virtual void setClient(BackForwardListClient*) = 0;
#endif
-
- Page* page() { return m_page; }
-
- void addItem(PassRefPtr<HistoryItem>);
- void goBack();
- void goForward();
- void goToItem(HistoryItem*);
+
+ virtual void addItem(PassRefPtr<HistoryItem>) = 0;
+ virtual void goBack() = 0;
+ virtual void goForward() = 0;
+ virtual void goToItem(HistoryItem*) = 0;
- HistoryItem* backItem();
- HistoryItem* currentItem();
- HistoryItem* forwardItem();
- HistoryItem* itemAtIndex(int);
-
- void backListWithLimit(int, HistoryItemVector&);
- void forwardListWithLimit(int, HistoryItemVector&);
-
- int capacity();
- void setCapacity(int);
- bool enabled();
- void setEnabled(bool);
- int backListCount();
- int forwardListCount();
- bool containsItem(HistoryItem*);
-
- void close();
- bool closed();
+ virtual HistoryItem* backItem() = 0;
+ virtual HistoryItem* currentItem() = 0;
+ virtual HistoryItem* forwardItem() = 0;
+ virtual HistoryItem* itemAtIndex(int) = 0;
+
+ virtual void backListWithLimit(int, HistoryItemVector&) = 0;
+ virtual void forwardListWithLimit(int, HistoryItemVector&) = 0;
+
+ virtual int capacity() = 0;
+ virtual void setCapacity(int) = 0;
+ virtual bool enabled() = 0;
+ virtual void setEnabled(bool) = 0;
+ virtual int backListCount() = 0;
+ virtual int forwardListCount() = 0;
+ virtual bool containsItem(HistoryItem*) = 0;
+
+ virtual void close() = 0;
+ virtual bool closed() = 0;
- void removeItem(HistoryItem*);
- HistoryItemVector& entries();
+ virtual void removeItem(HistoryItem*) = 0;
+ virtual HistoryItemVector& entries() = 0;
- void pushStateItem(PassRefPtr<HistoryItem>);
+ virtual void pushStateItem(PassRefPtr<HistoryItem>) = 0;
#if ENABLE(WML)
- void clearWMLPageHistory();
+ virtual void clearWMLPageHistory() = 0;
#endif
-private:
- BackForwardList(Page*);
-
- Page* m_page;
-#if PLATFORM(CHROMIUM)
- BackForwardListClient* m_client;
-#else
- HistoryItemVector m_entries;
- HistoryItemHashSet m_entryHash;
- unsigned m_current;
-#endif
- unsigned m_capacity;
- bool m_closed;
- bool m_enabled;
+protected:
+ BackForwardList()
+ {
+ }
};
-} //namespace WebCore
+} // namespace WebCore
-#endif
+#endif // BackForwardList_h
diff --git a/WebCore/history/BackForwardListChromium.cpp b/WebCore/history/BackForwardListChromium.cpp
index a780b7d..ec0f117 100644
--- a/WebCore/history/BackForwardListChromium.cpp
+++ b/WebCore/history/BackForwardListChromium.cpp
@@ -26,7 +26,7 @@
*/
#include "config.h"
-#include "BackForwardList.h"
+#include "BackForwardListImpl.h"
#include "HistoryItem.h"
#include "Logging.h"
@@ -36,7 +36,7 @@ namespace WebCore {
static const unsigned DefaultCapacity = 100;
static const unsigned NoCurrentItemIndex = UINT_MAX;
-BackForwardList::BackForwardList(Page* page)
+BackForwardListImpl::BackForwardListImpl(Page* page)
: m_page(page)
, m_client(0)
, m_capacity(DefaultCapacity)
@@ -45,12 +45,12 @@ BackForwardList::BackForwardList(Page* page)
{
}
-BackForwardList::~BackForwardList()
+BackForwardListImpl::~BackForwardListImpl()
{
ASSERT(m_closed);
}
-void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem)
+void BackForwardListImpl::addItem(PassRefPtr<HistoryItem> prpItem)
{
ASSERT(prpItem);
if (m_capacity == 0 || !m_enabled)
@@ -59,44 +59,44 @@ void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem)
m_client->addItem(prpItem);
}
-void BackForwardList::goToItem(HistoryItem* item)
+void BackForwardListImpl::goToItem(HistoryItem* item)
{
m_client->goToItem(item);
}
-HistoryItem* BackForwardList::backItem()
+HistoryItem* BackForwardListImpl::backItem()
{
ASSERT_NOT_REACHED();
return 0;
}
-HistoryItem* BackForwardList::forwardItem()
+HistoryItem* BackForwardListImpl::forwardItem()
{
ASSERT_NOT_REACHED();
return 0;
}
-HistoryItem* BackForwardList::currentItem()
+HistoryItem* BackForwardListImpl::currentItem()
{
return m_client->currentItem();
}
-int BackForwardList::capacity()
+int BackForwardListImpl::capacity()
{
return m_capacity;
}
-void BackForwardList::setCapacity(int size)
+void BackForwardListImpl::setCapacity(int size)
{
m_capacity = size;
}
-bool BackForwardList::enabled()
+bool BackForwardListImpl::enabled()
{
return m_enabled;
}
-void BackForwardList::setEnabled(bool enabled)
+void BackForwardListImpl::setEnabled(bool enabled)
{
m_enabled = enabled;
if (!enabled) {
@@ -106,22 +106,22 @@ void BackForwardList::setEnabled(bool enabled)
}
}
-int BackForwardList::backListCount()
+int BackForwardListImpl::backListCount()
{
return m_client->backListCount();
}
-int BackForwardList::forwardListCount()
+int BackForwardListImpl::forwardListCount()
{
return m_client->forwardListCount();
}
-HistoryItem* BackForwardList::itemAtIndex(int index)
+HistoryItem* BackForwardListImpl::itemAtIndex(int index)
{
return m_client->itemAtIndex(index);
}
-void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem)
+void BackForwardListImpl::pushStateItem(PassRefPtr<HistoryItem> newItem)
{
RefPtr<HistoryItem> current = m_client->currentItem();
@@ -131,13 +131,13 @@ void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem)
current->setStateObject(SerializedScriptValue::create());
}
-HistoryItemVector& BackForwardList::entries()
+HistoryItemVector& BackForwardListImpl::entries()
{
static HistoryItemVector noEntries;
return noEntries;
}
-void BackForwardList::close()
+void BackForwardListImpl::close()
{
if (m_client)
m_client->close();
@@ -145,9 +145,40 @@ void BackForwardList::close()
m_closed = true;
}
-bool BackForwardList::closed()
+bool BackForwardListImpl::closed()
{
return m_closed;
}
+void BackForwardListImpl::goBack()
+{
+ ASSERT_NOT_REACHED();
+}
+
+void BackForwardListImpl::goForward()
+{
+ ASSERT_NOT_REACHED();
+}
+
+void BackForwardListImpl::backListWithLimit(int, HistoryItemVector&)
+{
+ ASSERT_NOT_REACHED();
+}
+
+void BackForwardListImpl::forwardListWithLimit(int, HistoryItemVector&)
+{
+ ASSERT_NOT_REACHED();
+}
+
+bool BackForwardListImpl::containsItem(HistoryItem*)
+{
+ ASSERT_NOT_REACHED();
+ return false;
+}
+
+void BackForwardListImpl::removeItem(HistoryItem*)
+{
+ ASSERT_NOT_REACHED();
+}
+
} // namespace WebCore
diff --git a/WebCore/history/BackForwardList.cpp b/WebCore/history/BackForwardListImpl.cpp
index 656cce2..9da3cad 100644
--- a/WebCore/history/BackForwardList.cpp
+++ b/WebCore/history/BackForwardListImpl.cpp
@@ -25,7 +25,7 @@
*/
#include "config.h"
-#include "BackForwardList.h"
+#include "BackForwardListImpl.h"
#include "Frame.h"
#include "FrameLoader.h"
@@ -43,7 +43,7 @@ namespace WebCore {
static const unsigned DefaultCapacity = 100;
static const unsigned NoCurrentItemIndex = UINT_MAX;
-BackForwardList::BackForwardList(Page* page)
+BackForwardListImpl::BackForwardListImpl(Page* page)
: m_page(page)
, m_current(NoCurrentItemIndex)
, m_capacity(DefaultCapacity)
@@ -52,12 +52,12 @@ BackForwardList::BackForwardList(Page* page)
{
}
-BackForwardList::~BackForwardList()
+BackForwardListImpl::~BackForwardListImpl()
{
ASSERT(m_closed);
}
-void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem)
+void BackForwardListImpl::addItem(PassRefPtr<HistoryItem> prpItem)
{
ASSERT(prpItem);
if (m_capacity == 0 || !m_enabled)
@@ -93,7 +93,7 @@ void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem)
m_page->mainFrame()->loader()->client()->dispatchDidAddBackForwardItem(currentItem());
}
-void BackForwardList::goBack()
+void BackForwardListImpl::goBack()
{
ASSERT(m_current > 0);
if (m_current > 0) {
@@ -103,7 +103,7 @@ void BackForwardList::goBack()
}
}
-void BackForwardList::goForward()
+void BackForwardListImpl::goForward()
{
ASSERT(m_current < m_entries.size() - 1);
if (m_current < m_entries.size() - 1) {
@@ -113,7 +113,7 @@ void BackForwardList::goForward()
}
}
-void BackForwardList::goToItem(HistoryItem* item)
+void BackForwardListImpl::goToItem(HistoryItem* item)
{
if (!m_entries.size() || !item)
return;
@@ -129,28 +129,28 @@ void BackForwardList::goToItem(HistoryItem* item)
}
}
-HistoryItem* BackForwardList::backItem()
+HistoryItem* BackForwardListImpl::backItem()
{
if (m_current && m_current != NoCurrentItemIndex)
return m_entries[m_current - 1].get();
return 0;
}
-HistoryItem* BackForwardList::currentItem()
+HistoryItem* BackForwardListImpl::currentItem()
{
if (m_current != NoCurrentItemIndex)
return m_entries[m_current].get();
return 0;
}
-HistoryItem* BackForwardList::forwardItem()
+HistoryItem* BackForwardListImpl::forwardItem()
{
if (m_entries.size() && m_current < m_entries.size() - 1)
return m_entries[m_current + 1].get();
return 0;
}
-void BackForwardList::backListWithLimit(int limit, HistoryItemVector& list)
+void BackForwardListImpl::backListWithLimit(int limit, HistoryItemVector& list)
{
list.clear();
if (m_current != NoCurrentItemIndex) {
@@ -160,7 +160,7 @@ void BackForwardList::backListWithLimit(int limit, HistoryItemVector& list)
}
}
-void BackForwardList::forwardListWithLimit(int limit, HistoryItemVector& list)
+void BackForwardListImpl::forwardListWithLimit(int limit, HistoryItemVector& list)
{
ASSERT(limit > -1);
list.clear();
@@ -176,12 +176,12 @@ void BackForwardList::forwardListWithLimit(int limit, HistoryItemVector& list)
}
}
-int BackForwardList::capacity()
+int BackForwardListImpl::capacity()
{
return m_capacity;
}
-void BackForwardList::setCapacity(int size)
+void BackForwardListImpl::setCapacity(int size)
{
while (size < (int)m_entries.size()) {
RefPtr<HistoryItem> item = m_entries.last();
@@ -200,12 +200,12 @@ void BackForwardList::setCapacity(int size)
m_capacity = size;
}
-bool BackForwardList::enabled()
+bool BackForwardListImpl::enabled()
{
return m_enabled;
}
-void BackForwardList::setEnabled(bool enabled)
+void BackForwardListImpl::setEnabled(bool enabled)
{
m_enabled = enabled;
if (!enabled) {
@@ -215,17 +215,17 @@ void BackForwardList::setEnabled(bool enabled)
}
}
-int BackForwardList::backListCount()
+int BackForwardListImpl::backListCount()
{
return m_current == NoCurrentItemIndex ? 0 : m_current;
}
-int BackForwardList::forwardListCount()
+int BackForwardListImpl::forwardListCount()
{
return m_current == NoCurrentItemIndex ? 0 : (int)m_entries.size() - (m_current + 1);
}
-HistoryItem* BackForwardList::itemAtIndex(int index)
+HistoryItem* BackForwardListImpl::itemAtIndex(int index)
{
// Do range checks without doing math on index to avoid overflow.
if (index < -(int)m_current)
@@ -237,12 +237,12 @@ HistoryItem* BackForwardList::itemAtIndex(int index)
return m_entries[index + m_current].get();
}
-HistoryItemVector& BackForwardList::entries()
+HistoryItemVector& BackForwardListImpl::entries()
{
return m_entries;
}
-void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem)
+void BackForwardListImpl::pushStateItem(PassRefPtr<HistoryItem> newItem)
{
ASSERT(newItem);
ASSERT(newItem->stateObject());
@@ -256,7 +256,7 @@ void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem)
current->setStateObject(SerializedScriptValue::create());
}
-void BackForwardList::close()
+void BackForwardListImpl::close()
{
int size = m_entries.size();
for (int i = 0; i < size; ++i)
@@ -267,12 +267,12 @@ void BackForwardList::close()
m_closed = true;
}
-bool BackForwardList::closed()
+bool BackForwardListImpl::closed()
{
return m_closed;
}
-void BackForwardList::removeItem(HistoryItem* item)
+void BackForwardListImpl::removeItem(HistoryItem* item)
{
if (!item)
return;
@@ -294,13 +294,13 @@ void BackForwardList::removeItem(HistoryItem* item)
}
}
-bool BackForwardList::containsItem(HistoryItem* entry)
+bool BackForwardListImpl::containsItem(HistoryItem* entry)
{
return m_entryHash.contains(entry);
}
#if ENABLE(WML)
-void BackForwardList::clearWMLPageHistory()
+void BackForwardListImpl::clearWMLPageHistory()
{
RefPtr<HistoryItem> currentItem = this->currentItem();
diff --git a/WebCore/history/BackForwardListImpl.h b/WebCore/history/BackForwardListImpl.h
new file mode 100644
index 0000000..86e1227
--- /dev/null
+++ b/WebCore/history/BackForwardListImpl.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ * 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:
+ * 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 BackForwardListImpl_h
+#define BackForwardListImpl_h
+
+#include "BackForwardList.h"
+#include <wtf/HashSet.h>
+
+namespace WebCore {
+
+class HistoryItem;
+class Page;
+
+typedef Vector<RefPtr<HistoryItem> > HistoryItemVector;
+typedef HashSet<RefPtr<HistoryItem> > HistoryItemHashSet;
+
+class BackForwardListImpl : public BackForwardList {
+public:
+ static PassRefPtr<BackForwardListImpl> create(Page* page) { return adoptRef(new BackForwardListImpl(page)); }
+ ~BackForwardListImpl();
+
+ bool isBackForwardListImpl() const { return true; }
+
+#if PLATFORM(CHROMIUM)
+ // Must be called before any other methods.
+ void setClient(BackForwardListClient* client) { m_client = client; }
+#endif
+
+ Page* page() { return m_page; }
+
+ void addItem(PassRefPtr<HistoryItem>);
+ void goBack();
+ void goForward();
+ void goToItem(HistoryItem*);
+
+ HistoryItem* backItem();
+ HistoryItem* currentItem();
+ HistoryItem* forwardItem();
+ HistoryItem* itemAtIndex(int);
+
+ void backListWithLimit(int, HistoryItemVector&);
+ void forwardListWithLimit(int, HistoryItemVector&);
+
+ int capacity();
+ void setCapacity(int);
+ bool enabled();
+ void setEnabled(bool);
+ int backListCount();
+ int forwardListCount();
+ bool containsItem(HistoryItem*);
+
+ void close();
+ bool closed();
+
+ void removeItem(HistoryItem*);
+ HistoryItemVector& entries();
+
+ void pushStateItem(PassRefPtr<HistoryItem>);
+
+#if ENABLE(WML)
+ void clearWMLPageHistory();
+#endif
+
+private:
+ BackForwardListImpl(Page*);
+
+ Page* m_page;
+#if PLATFORM(CHROMIUM)
+ BackForwardListClient* m_client;
+#else
+ HistoryItemVector m_entries;
+ HistoryItemHashSet m_entryHash;
+ unsigned m_current;
+#endif
+ unsigned m_capacity;
+ bool m_closed;
+ bool m_enabled;
+};
+
+} // namespace WebCore
+
+#endif // BackForwardListImpl_h
diff --git a/WebCore/history/CachedFrame.cpp b/WebCore/history/CachedFrame.cpp
index 0be6710..1f4895f 100644
--- a/WebCore/history/CachedFrame.cpp
+++ b/WebCore/history/CachedFrame.cpp
@@ -124,7 +124,7 @@ CachedFrame::CachedFrame(Frame* frame)
// Active DOM objects must be suspended before we cached the frame script data
m_document->suspendActiveDOMObjects();
- m_cachedFrameScriptData.set(new ScriptCachedFrameData(frame));
+ m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame));
// Custom scrollbar renderers will get reattached when the document comes out of the page cache
m_view->detachCustomScrollbars();
@@ -232,9 +232,9 @@ void CachedFrame::destroy()
clear();
}
-void CachedFrame::setCachedFramePlatformData(CachedFramePlatformData* data)
+void CachedFrame::setCachedFramePlatformData(PassOwnPtr<CachedFramePlatformData> data)
{
- m_cachedFramePlatformData.set(data);
+ m_cachedFramePlatformData = data;
}
CachedFramePlatformData* CachedFrame::cachedFramePlatformData()
diff --git a/WebCore/history/CachedFrame.h b/WebCore/history/CachedFrame.h
index ca772a4..884a601 100644
--- a/WebCore/history/CachedFrame.h
+++ b/WebCore/history/CachedFrame.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 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
@@ -28,6 +28,7 @@
#include "KURL.h"
#include "ScriptCachedFrameData.h"
+#include <wtf/PassOwnPtr.h>
#include <wtf/RefPtr.h>
namespace WebCore {
@@ -75,7 +76,7 @@ public:
void clear();
void destroy();
- void setCachedFramePlatformData(CachedFramePlatformData* data);
+ void setCachedFramePlatformData(PassOwnPtr<CachedFramePlatformData>);
CachedFramePlatformData* cachedFramePlatformData();
using CachedFrameBase::document;
diff --git a/WebCore/html/FileReader.cpp b/WebCore/html/FileReader.cpp
index 2e020c1..b44ec9d 100644
--- a/WebCore/html/FileReader.cpp
+++ b/WebCore/html/FileReader.cpp
@@ -85,6 +85,9 @@ void FileReader::stop()
void FileReader::readAsBinaryString(Blob* fileBlob)
{
+ if (!fileBlob)
+ return;
+
// FIXME: needs to handle non-file blobs.
LOG(FileAPI, "FileReader: reading as binary: %s\n", fileBlob->path().utf8().data());
@@ -93,6 +96,9 @@ void FileReader::readAsBinaryString(Blob* fileBlob)
void FileReader::readAsText(Blob* fileBlob, const String& encoding)
{
+ if (!fileBlob)
+ return;
+
// FIXME: needs to handle non-file blobs.
LOG(FileAPI, "FileReader: reading as text: %s\n", fileBlob->path().utf8().data());
@@ -103,6 +109,9 @@ void FileReader::readAsText(Blob* fileBlob, const String& encoding)
void FileReader::readAsDataURL(File* file)
{
+ if (!file)
+ return;
+
LOG(FileAPI, "FileReader: reading as data URL: %s\n", file->path().utf8().data());
m_fileType = file->type();
diff --git a/WebCore/html/FileStreamClient.h b/WebCore/html/FileStreamClient.h
index e1aec53..05c7df5 100644
--- a/WebCore/html/FileStreamClient.h
+++ b/WebCore/html/FileStreamClient.h
@@ -34,7 +34,6 @@
#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
#include "ExceptionCode.h"
-#include <wtf/PassRefPtr.h>
namespace WebCore {
diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp
index eb99cf3..e2516df 100644
--- a/WebCore/html/FileStreamProxy.cpp
+++ b/WebCore/html/FileStreamProxy.cpp
@@ -44,15 +44,24 @@
namespace WebCore {
-FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client)
+inline FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client)
: m_context(context)
, m_client(client)
, m_stream(FileStream::create(this))
{
- // Holds an extra ref so that the instance will not get deleted while there can be any tasks on the file thread.
- ref();
+}
+
+PassRefPtr<FileStreamProxy> FileStreamProxy::create(ScriptExecutionContext* context, FileStreamClient* client)
+{
+ RefPtr<FileStreamProxy> proxy = adoptRef(new FileStreamProxy(context, client));
+
+ // Hold an ref so that the instance will not get deleted while there are tasks on the file thread.
+ // This is balanced by the deref in derefProxyOnContext below.
+ proxy->ref();
+
+ proxy->fileThread()->postTask(createFileThreadTask(proxy->m_stream.get(), &FileStream::start));
- fileThread()->postTask(createFileThreadTask(m_stream.get(), &FileStream::start));
+ return proxy.release();
}
FileStreamProxy::~FileStreamProxy()
diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h
index 308da15..66d8cb3 100644
--- a/WebCore/html/FileStreamProxy.h
+++ b/WebCore/html/FileStreamProxy.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
+ * 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
@@ -33,7 +34,6 @@
#if ENABLE(FILE_READER) || ENABLE(FILE_WRITER)
-#include "ExceptionCode.h"
#include "FileStreamClient.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
@@ -50,10 +50,7 @@ class String;
// A proxy module that calls corresponding FileStream methods on the file thread. Note: you must call stop() first and then release the reference to destruct the FileStreamProxy instance.
class FileStreamProxy : public RefCounted<FileStreamProxy>, public FileStreamClient {
public:
- static PassRefPtr<FileStreamProxy> create(ScriptExecutionContext* context, FileStreamClient* client)
- {
- return adoptRef(new FileStreamProxy(context, client));
- }
+ static PassRefPtr<FileStreamProxy> create(ScriptExecutionContext*, FileStreamClient*);
virtual ~FileStreamProxy();
void openForRead(Blob* blob);
diff --git a/WebCore/html/HTMLAnchorElement.idl b/WebCore/html/HTMLAnchorElement.idl
index 846162f..d57fcb6 100644
--- a/WebCore/html/HTMLAnchorElement.idl
+++ b/WebCore/html/HTMLAnchorElement.idl
@@ -24,7 +24,7 @@ module html {
attribute [Reflect] DOMString accessKey;
attribute [Reflect] DOMString charset;
attribute [Reflect] DOMString coords;
- attribute [ReflectURL] DOMString href;
+ attribute [Reflect,URL] DOMString href;
attribute [Reflect] DOMString hreflang;
attribute [Reflect] DOMString name;
attribute [Reflect] DOMString rel;
diff --git a/WebCore/html/HTMLAreaElement.idl b/WebCore/html/HTMLAreaElement.idl
index 0f6fd72..64c6468 100644
--- a/WebCore/html/HTMLAreaElement.idl
+++ b/WebCore/html/HTMLAreaElement.idl
@@ -24,7 +24,7 @@ module html {
attribute [Reflect] DOMString accessKey;
attribute [Reflect] DOMString alt;
attribute [Reflect] DOMString coords;
- attribute [ReflectURL] DOMString href;
+ attribute [Reflect,URL] DOMString href;
attribute [Reflect] boolean noHref;
attribute [Reflect] DOMString shape;
attribute [Reflect] DOMString target;
diff --git a/WebCore/html/HTMLCanvasElement.cpp b/WebCore/html/HTMLCanvasElement.cpp
index f8baf20..a14cbef 100644
--- a/WebCore/html/HTMLCanvasElement.cpp
+++ b/WebCore/html/HTMLCanvasElement.cpp
@@ -36,10 +36,12 @@
#include "CanvasStyle.h"
#include "Chrome.h"
#include "Document.h"
+#include "ExceptionCode.h"
#include "Frame.h"
#include "GraphicsContext.h"
#include "HTMLNames.h"
#include "ImageBuffer.h"
+#include "MIMETypeRegistry.h"
#include "Page.h"
#include "RenderHTMLCanvas.h"
#include "Settings.h"
@@ -55,11 +57,23 @@ namespace WebCore {
using namespace HTMLNames;
+// These values come from the WhatWG spec.
+static const int DefaultWidth = 300;
+static const int DefaultHeight = 150;
+
+// Firefox limits width/height to 32767 pixels, but slows down dramatically before it
+// reaches that limit. We limit by area instead, giving us larger maximum dimensions,
+// in exchange for a smaller maximum canvas size.
+static const float MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels
+
HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document* document)
: HTMLElement(tagName, document)
- , CanvasSurface(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1)
, m_observer(0)
+ , m_size(DefaultWidth, DefaultHeight)
, m_ignoreReset(false)
+ , m_pageScaleFactor(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1)
+ , m_originClean(true)
+ , m_hasCreatedImageBuffer(false)
{
ASSERT(hasTagName(canvasTag));
}
@@ -186,7 +200,8 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas
void HTMLCanvasElement::willDraw(const FloatRect& rect)
{
- CanvasSurface::willDraw(rect);
+ if (m_imageBuffer)
+ m_imageBuffer->clearImage();
if (RenderBox* ro = renderBox()) {
FloatRect destRect = ro->contentBoxRect();
@@ -290,4 +305,108 @@ void HTMLCanvasElement::recalcStyle(StyleChange change)
}
}
+void HTMLCanvasElement::setSurfaceSize(const IntSize& size)
+{
+ m_size = size;
+ m_hasCreatedImageBuffer = false;
+ m_imageBuffer.clear();
+}
+
+String HTMLCanvasElement::toDataURL(const String& mimeType, const double* quality, ExceptionCode& ec)
+{
+ if (!m_originClean) {
+ ec = SECURITY_ERR;
+ return String();
+ }
+
+ if (m_size.isEmpty() || !buffer())
+ return String("data:,");
+
+ String lowercaseMimeType = mimeType.lower();
+
+ // FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this method to be used on a worker thread).
+ if (mimeType.isNull() || !MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(lowercaseMimeType))
+ return buffer()->toDataURL("image/png");
+
+ return buffer()->toDataURL(lowercaseMimeType, quality);
+}
+
+IntRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect) const
+{
+ return IntRect(convertLogicalToDevice(logicalRect.location()), convertLogicalToDevice(logicalRect.size()));
+}
+
+IntSize HTMLCanvasElement::convertLogicalToDevice(const FloatSize& logicalSize) const
+{
+ float wf = ceilf(logicalSize.width() * m_pageScaleFactor);
+ float hf = ceilf(logicalSize.height() * m_pageScaleFactor);
+
+ if (!(wf >= 1 && hf >= 1 && wf * hf <= MaxCanvasArea))
+ return IntSize();
+
+ return IntSize(static_cast<unsigned>(wf), static_cast<unsigned>(hf));
+}
+
+IntPoint HTMLCanvasElement::convertLogicalToDevice(const FloatPoint& logicalPos) const
+{
+ float xf = logicalPos.x() * m_pageScaleFactor;
+ float yf = logicalPos.y() * m_pageScaleFactor;
+
+ return IntPoint(static_cast<unsigned>(xf), static_cast<unsigned>(yf));
+}
+
+const SecurityOrigin& HTMLCanvasElement::securityOrigin() const
+{
+ return *document()->securityOrigin();
+}
+
+CSSStyleSelector* HTMLCanvasElement::styleSelector()
+{
+ return document()->styleSelector();
+}
+
+void HTMLCanvasElement::createImageBuffer() const
+{
+ ASSERT(!m_imageBuffer);
+
+ m_hasCreatedImageBuffer = true;
+
+ FloatSize unscaledSize(width(), height());
+ IntSize size = convertLogicalToDevice(unscaledSize);
+ if (!size.width() || !size.height())
+ return;
+
+ m_imageBuffer = ImageBuffer::create(size);
+ // The convertLogicalToDevice MaxCanvasArea check should prevent common cases
+ // where ImageBuffer::create() returns 0, however we could still be low on memory.
+ if (!m_imageBuffer)
+ return;
+ m_imageBuffer->context()->scale(FloatSize(size.width() / unscaledSize.width(), size.height() / unscaledSize.height()));
+ m_imageBuffer->context()->setShadowsIgnoreTransforms(true);
+}
+
+GraphicsContext* HTMLCanvasElement::drawingContext() const
+{
+ return buffer() ? m_imageBuffer->context() : 0;
+}
+
+ImageBuffer* HTMLCanvasElement::buffer() const
+{
+ if (!m_hasCreatedImageBuffer)
+ createImageBuffer();
+ return m_imageBuffer.get();
+}
+
+AffineTransform HTMLCanvasElement::baseTransform() const
+{
+ ASSERT(m_hasCreatedImageBuffer);
+ FloatSize unscaledSize(width(), height());
+ IntSize size = convertLogicalToDevice(unscaledSize);
+ AffineTransform transform;
+ if (size.width() && size.height())
+ transform.scaleNonUniform(size.width() / unscaledSize.width(), size.height() / unscaledSize.height());
+ transform.multiply(m_imageBuffer->baseTransform());
+ return transform;
+}
+
}
diff --git a/WebCore/html/HTMLCanvasElement.h b/WebCore/html/HTMLCanvasElement.h
index 1337b87..d399d5f 100644
--- a/WebCore/html/HTMLCanvasElement.h
+++ b/WebCore/html/HTMLCanvasElement.h
@@ -28,7 +28,6 @@
#ifndef HTMLCanvasElement_h
#define HTMLCanvasElement_h
-#include "CanvasSurface.h"
#include "FloatRect.h"
#include "HTMLElement.h"
#include "IntSize.h"
@@ -43,6 +42,7 @@ class CanvasContextAttributes;
class CanvasRenderingContext;
class GraphicsContext;
class HTMLCanvasElement;
+class ImageBuffer;
class IntSize;
class CanvasObserver {
@@ -54,17 +54,23 @@ public:
virtual void canvasDestroyed(HTMLCanvasElement*) = 0;
};
-class HTMLCanvasElement : public HTMLElement, public CanvasSurface {
+class HTMLCanvasElement : public HTMLElement {
public:
static PassRefPtr<HTMLCanvasElement> create(Document*);
static PassRefPtr<HTMLCanvasElement> create(const QualifiedName&, Document*);
virtual ~HTMLCanvasElement();
+ void setObserver(CanvasObserver* observer) { m_observer = observer; }
+
+ // Attributes and functions exposed to script
+ int width() const { return size().width(); }
+ int height() const { return size().height(); }
+
+ const IntSize& size() const { return m_size; }
+
void setWidth(int);
void setHeight(int);
- CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0);
-
void setSize(const IntSize& newSize)
{
if (newSize == size())
@@ -76,16 +82,33 @@ public:
reset();
}
- virtual void willDraw(const FloatRect&);
+ CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0);
+
+ String toDataURL(const String& mimeType, const double* quality, ExceptionCode&);
+ String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, 0, ec); }
+
+ // Used for rendering
+ void willDraw(const FloatRect&);
void paint(GraphicsContext*, const IntRect&);
- void setObserver(CanvasObserver* observer) { m_observer = observer; }
+ GraphicsContext* drawingContext() const;
CanvasRenderingContext* renderingContext() const { return m_context.get(); }
- RenderBox* renderBox() const { return HTMLElement::renderBox(); }
- RenderStyle* computedStyle() { return HTMLElement::computedStyle(); }
+ ImageBuffer* buffer() const;
+
+ IntRect convertLogicalToDevice(const FloatRect&) const;
+ IntSize convertLogicalToDevice(const FloatSize&) const;
+ IntPoint convertLogicalToDevice(const FloatPoint&) const;
+
+ const SecurityOrigin& securityOrigin() const;
+ void setOriginTainted() { m_originClean = false; }
+ bool originClean() const { return m_originClean; }
+
+ CSSStyleSelector* styleSelector();
+
+ AffineTransform baseTransform() const;
#if ENABLE(3D_CANVAS)
bool is3D() const;
@@ -122,13 +145,28 @@ private:
void reset();
- bool m_rendererIsCanvas;
+ void createImageBuffer() const;
+
+ void setSurfaceSize(const IntSize&);
+ bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; }
- OwnPtr<CanvasRenderingContext> m_context;
CanvasObserver* m_observer;
+ IntSize m_size;
+
+ OwnPtr<CanvasRenderingContext> m_context;
+
+ bool m_rendererIsCanvas;
+
bool m_ignoreReset;
FloatRect m_dirtyRect;
+
+ float m_pageScaleFactor;
+ bool m_originClean;
+
+ // m_createdImageBuffer means we tried to malloc the buffer. We didn't necessarily get it.
+ mutable bool m_hasCreatedImageBuffer;
+ mutable OwnPtr<ImageBuffer> m_imageBuffer;
};
} //namespace
diff --git a/WebCore/html/HTMLConstructionSite.cpp b/WebCore/html/HTMLConstructionSite.cpp
new file mode 100644
index 0000000..5745625
--- /dev/null
+++ b/WebCore/html/HTMLConstructionSite.cpp
@@ -0,0 +1,367 @@
+/*
+ * 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 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 GOOGLE 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 "HTMLTreeBuilder.h"
+
+#include "Comment.h"
+#include "DocumentFragment.h"
+#include "DocumentType.h"
+#include "Element.h"
+#include "Frame.h"
+#include "HTMLDocument.h"
+#include "HTMLHtmlElement.h"
+#include "HTMLNames.h"
+#include "HTMLScriptElement.h"
+#include "HTMLToken.h"
+#include "HTMLTokenizer.h"
+#include "LegacyHTMLDocumentParser.h"
+#include "LegacyHTMLTreeBuilder.h"
+#include "LocalizedStrings.h"
+#if ENABLE(MATHML)
+#include "MathMLNames.h"
+#endif
+#include "NotImplemented.h"
+#if ENABLE(SVG)
+#include "SVGNames.h"
+#endif
+#include "ScriptController.h"
+#include "Settings.h"
+#include "Text.h"
+#include <wtf/UnusedParam.h>
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+namespace {
+
+bool hasImpliedEndTag(Element* element)
+{
+ return element->hasTagName(ddTag)
+ || element->hasTagName(dtTag)
+ || element->hasTagName(liTag)
+ || element->hasTagName(optionTag)
+ || element->hasTagName(optgroupTag)
+ || element->hasTagName(pTag)
+ || element->hasTagName(rpTag)
+ || element->hasTagName(rtTag);
+}
+
+} // namespace
+
+template<typename ChildType>
+PassRefPtr<ChildType> HTMLConstructionSite::attach(Node* parent, PassRefPtr<ChildType> prpChild)
+{
+ RefPtr<ChildType> child = prpChild;
+
+ // FIXME: It's confusing that HTMLConstructionSite::attach does the magic
+ // redirection to the foster parent but HTMLConstructionSite::attachAtSite
+ // doesn't. It feels like we're missing a concept somehow.
+ if (m_redirectAttachToFosterParent) {
+ fosterParent(child.get());
+ ASSERT(child->attached());
+ return child.release();
+ }
+
+ parent->parserAddChild(child);
+ // It's slightly unfortunate that we need to hold a reference to child
+ // here to call attach(). We should investigate whether we can rely on
+ // |parent| to hold a ref at this point. In the common case (at least
+ // for elements), however, we'll get to use this ref in the stack of
+ // open elements.
+ ASSERT(parent->attached());
+ ASSERT(!child->attached());
+ child->attach();
+ return child.release();
+}
+
+void HTMLConstructionSite::attachAtSite(const AttachmentSite& site, PassRefPtr<Node> prpChild)
+{
+ RefPtr<Node> child = prpChild;
+
+ if (site.nextChild) {
+ // FIXME: We need an insertElement which does not send mutation events.
+ ExceptionCode ec = 0;
+ site.parent->insertBefore(child, site.nextChild, ec);
+ ASSERT(!ec);
+ ASSERT(site.parent->attached());
+ if (!child->attached())
+ child->attach();
+ return;
+ }
+ site.parent->parserAddChild(child);
+ // It's slightly unfortunate that we need to hold a reference to child
+ // here to call attach(). We should investigate whether we can rely on
+ // |site.parent| to hold a ref at this point.
+ ASSERT(site.parent->attached());
+ if (!child->attached())
+ child->attach();
+}
+
+HTMLConstructionSite::HTMLConstructionSite(Document* document, FragmentScriptingPermission scriptingPermission)
+ : m_document(document)
+ , m_fragmentScriptingPermission(scriptingPermission)
+ , m_redirectAttachToFosterParent(false)
+{
+}
+
+HTMLConstructionSite::~HTMLConstructionSite()
+{
+}
+
+void HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken& token)
+{
+ RefPtr<Element> element = HTMLHtmlElement::create(m_document);
+ element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission);
+ m_openElements.pushHTMLHtmlElement(attach(m_document, element.release()));
+}
+
+void HTMLConstructionSite::mergeAttributesFromTokenIntoElement(AtomicHTMLToken& token, Element* element)
+{
+ if (!token.attributes())
+ return;
+
+ NamedNodeMap* attributes = element->attributes(false);
+ for (unsigned i = 0; i < token.attributes()->length(); ++i) {
+ Attribute* attribute = token.attributes()->attributeItem(i);
+ if (!attributes->getAttributeItem(attribute->name()))
+ element->setAttribute(attribute->name(), attribute->value());
+ }
+}
+
+void HTMLConstructionSite::insertHTMLHtmlStartTagInBody(AtomicHTMLToken& token)
+{
+ // FIXME: parse error
+ mergeAttributesFromTokenIntoElement(token, m_openElements.htmlElement());
+}
+
+void HTMLConstructionSite::insertHTMLBodyStartTagInBody(AtomicHTMLToken& token)
+{
+ // FIXME: parse error
+ notImplemented(); // fragment case
+ mergeAttributesFromTokenIntoElement(token, m_openElements.bodyElement());
+}
+
+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())));
+ // FIXME: Move quirks mode detection from DocumentType element to here.
+ notImplemented();
+ if (token.forceQuirks())
+ m_document->setParseMode(Document::Compat);
+}
+
+void HTMLConstructionSite::insertComment(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::Comment);
+ attach(currentElement(), Comment::create(m_document, token.comment()));
+}
+
+void HTMLConstructionSite::insertCommentOnDocument(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::Comment);
+ attach(m_document, Comment::create(m_document, token.comment()));
+}
+
+void HTMLConstructionSite::insertCommentOnHTMLHtmlElement(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::Comment);
+ attach(m_openElements.htmlElement(), Comment::create(m_document, token.comment()));
+}
+
+PassRefPtr<Element> HTMLConstructionSite::createHTMLElementAndAttachToCurrent(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ return attach(currentElement(), createHTMLElement(token));
+}
+
+void HTMLConstructionSite::insertHTMLHtmlElement(AtomicHTMLToken& token)
+{
+ ASSERT(!m_redirectAttachToFosterParent);
+ m_openElements.pushHTMLHtmlElement(createHTMLElementAndAttachToCurrent(token));
+}
+
+void HTMLConstructionSite::insertHTMLHeadElement(AtomicHTMLToken& token)
+{
+ ASSERT(!m_redirectAttachToFosterParent);
+ m_head = createHTMLElementAndAttachToCurrent(token);
+ m_openElements.pushHTMLHeadElement(m_head);
+}
+
+void HTMLConstructionSite::insertHTMLBodyElement(AtomicHTMLToken& token)
+{
+ ASSERT(!m_redirectAttachToFosterParent);
+ m_openElements.pushHTMLBodyElement(createHTMLElementAndAttachToCurrent(token));
+}
+
+void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken& token)
+{
+ m_openElements.push(createHTMLElementAndAttachToCurrent(token));
+}
+
+void HTMLConstructionSite::insertSelfClosingHTMLElement(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ createHTMLElementAndAttachToCurrent(token);
+ // FIXME: Do we want to acknowledge the token's self-closing flag?
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#acknowledge-self-closing-flag
+}
+
+void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken& token)
+{
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#the-stack-of-open-elements
+ // Possible active formatting elements include:
+ // a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u.
+ insertHTMLElement(token);
+ m_activeFormattingElements.append(currentElement());
+}
+
+void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken& token)
+{
+ RefPtr<HTMLScriptElement> element = HTMLScriptElement::create(scriptTag, m_document, true);
+ element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission);
+ m_openElements.push(attach(currentElement(), element.release()));
+}
+
+void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken& token, const AtomicString& namespaceURI)
+{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ notImplemented(); // parseError when xmlns or xmlns:xlink are wrong.
+
+ RefPtr<Element> element = attach(currentElement(), createElement(token, namespaceURI));
+ if (!token.selfClosing())
+ m_openElements.push(element);
+}
+
+void HTMLConstructionSite::insertTextNode(const String& characters)
+{
+ AttachmentSite site;
+ site.parent = currentElement();
+ site.nextChild = 0;
+ if (m_redirectAttachToFosterParent)
+ findFosterSite(site);
+
+ Node* previousChild = site.nextChild ? site.nextChild->previousSibling() : site.parent->lastChild();
+ if (previousChild && previousChild->isTextNode()) {
+ // FIXME: We're only supposed to append to this text node if it
+ // was the last text node inserted by the parser.
+ CharacterData* textNode = static_cast<CharacterData*>(previousChild);
+ textNode->parserAppendData(characters);
+ return;
+ }
+
+ attachAtSite(site, Text::create(m_document, characters));
+}
+
+PassRefPtr<Element> HTMLConstructionSite::createElement(AtomicHTMLToken& token, const AtomicString& namespaceURI)
+{
+ QualifiedName tagName(nullAtom, token.name(), namespaceURI);
+ RefPtr<Element> element = m_document->createElement(tagName, true);
+ element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission);
+ return element.release();
+}
+
+PassRefPtr<Element> HTMLConstructionSite::createHTMLElement(AtomicHTMLToken& token)
+{
+ RefPtr<Element> element = createElement(token, xhtmlNamespaceURI);
+ ASSERT(element->isHTMLElement());
+ return element.release();
+}
+
+bool HTMLConstructionSite::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const
+{
+ if (m_activeFormattingElements.isEmpty())
+ return false;
+ unsigned index = m_activeFormattingElements.size();
+ do {
+ --index;
+ const HTMLFormattingElementList::Entry& entry = m_activeFormattingElements.at(index);
+ if (entry.isMarker() || m_openElements.contains(entry.element())) {
+ firstUnopenElementIndex = index + 1;
+ return firstUnopenElementIndex < m_activeFormattingElements.size();
+ }
+ } while (index);
+ firstUnopenElementIndex = index;
+ return true;
+}
+
+void HTMLConstructionSite::reconstructTheActiveFormattingElements()
+{
+ unsigned firstUnopenElementIndex;
+ if (!indexOfFirstUnopenFormattingElement(firstUnopenElementIndex))
+ return;
+
+ unsigned unopenEntryIndex = firstUnopenElementIndex;
+ ASSERT(unopenEntryIndex < m_activeFormattingElements.size());
+ for (; unopenEntryIndex < m_activeFormattingElements.size(); ++unopenEntryIndex) {
+ HTMLFormattingElementList::Entry& unopenedEntry = m_activeFormattingElements.at(unopenEntryIndex);
+ // FIXME: We're supposed to save the original token in the entry.
+ AtomicHTMLToken fakeToken(HTMLToken::StartTag, unopenedEntry.element()->localName());
+ insertHTMLElement(fakeToken);
+ unopenedEntry.replaceElement(currentElement());
+ }
+}
+
+void HTMLConstructionSite::generateImpliedEndTagsWithExclusion(const AtomicString& tagName)
+{
+ while (hasImpliedEndTag(currentElement()) && !currentElement()->hasLocalName(tagName))
+ m_openElements.pop();
+}
+
+void HTMLConstructionSite::generateImpliedEndTags()
+{
+ while (hasImpliedEndTag(currentElement()))
+ m_openElements.pop();
+}
+
+void HTMLConstructionSite::findFosterSite(AttachmentSite& site)
+{
+ HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName());
+ if (lastTableElementRecord) {
+ Element* lastTableElement = lastTableElementRecord->element();
+ if (Node* parent = lastTableElement->parent()) {
+ site.parent = parent;
+ site.nextChild = lastTableElement;
+ return;
+ }
+ site.parent = lastTableElementRecord->next()->element();
+ site.nextChild = 0;
+ return;
+ }
+ // Fragment case
+ site.parent = m_openElements.bottom(); // <html> element
+ site.nextChild = 0;
+}
+
+void HTMLConstructionSite::fosterParent(Node* node)
+{
+ AttachmentSite site;
+ findFosterSite(site);
+ attachAtSite(site, node);
+}
+
+}
diff --git a/WebCore/html/HTMLConstructionSite.h b/WebCore/html/HTMLConstructionSite.h
new file mode 100644
index 0000000..c0af9b3
--- /dev/null
+++ b/WebCore/html/HTMLConstructionSite.h
@@ -0,0 +1,141 @@
+/*
+ * 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 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 GOOGLE 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 HTMLConstructionSite_h
+#define HTMLConstructionSite_h
+
+#include "FragmentScriptingPermission.h"
+#include "HTMLElementStack.h"
+#include "HTMLFormattingElementList.h"
+#include "NotImplemented.h"
+#include <wtf/Noncopyable.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+
+class AtomicHTMLToken;
+class Document;
+class Element;
+
+class HTMLConstructionSite : public Noncopyable {
+public:
+ HTMLConstructionSite(Document*, FragmentScriptingPermission);
+ ~HTMLConstructionSite();
+
+ void insertDoctype(AtomicHTMLToken&);
+ void insertComment(AtomicHTMLToken&);
+ void insertCommentOnDocument(AtomicHTMLToken&);
+ void insertCommentOnHTMLHtmlElement(AtomicHTMLToken&);
+ void insertHTMLElement(AtomicHTMLToken&);
+ void insertSelfClosingHTMLElement(AtomicHTMLToken&);
+ void insertFormattingElement(AtomicHTMLToken&);
+ void insertHTMLHtmlElement(AtomicHTMLToken&);
+ void insertHTMLHeadElement(AtomicHTMLToken&);
+ void insertHTMLBodyElement(AtomicHTMLToken&);
+ void insertScriptElement(AtomicHTMLToken&);
+ void insertTextNode(const String&);
+ void insertForeignElement(AtomicHTMLToken&, const AtomicString& namespaceURI);
+
+ void insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken&);
+ void insertHTMLHtmlStartTagInBody(AtomicHTMLToken&);
+ void insertHTMLBodyStartTagInBody(AtomicHTMLToken&);
+
+ PassRefPtr<Element> createHTMLElement(AtomicHTMLToken&);
+
+ void fosterParent(Node*);
+
+ bool indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const;
+ void reconstructTheActiveFormattingElements();
+
+ void generateImpliedEndTags();
+ void generateImpliedEndTagsWithExclusion(const AtomicString& tagName);
+
+ Element* currentElement() const { return m_openElements.top(); }
+ Element* oneBelowTop() const { return m_openElements.oneBelowTop(); }
+
+ HTMLElementStack* openElements() const { return &m_openElements; }
+ HTMLFormattingElementList* activeFormattingElements() const { return &m_activeFormattingElements; }
+
+ Element* head() const { return m_head.get(); }
+
+ Element* form() const { return m_form.get(); }
+ PassRefPtr<Element> takeForm() { return m_form.release(); }
+
+ void setForm(PassRefPtr<Element> form) { m_form = form; }
+
+ class RedirectToFosterParentGuard : public Noncopyable {
+ public:
+ RedirectToFosterParentGuard(HTMLConstructionSite& tree, bool shouldRedirect)
+ : m_tree(tree)
+ , m_wasRedirectingBefore(tree.m_redirectAttachToFosterParent)
+ {
+ m_tree.m_redirectAttachToFosterParent = shouldRedirect;
+ }
+
+ ~RedirectToFosterParentGuard()
+ {
+ m_tree.m_redirectAttachToFosterParent = m_wasRedirectingBefore;
+ }
+
+ private:
+ HTMLConstructionSite& m_tree;
+ bool m_wasRedirectingBefore;
+ };
+
+private:
+ struct AttachmentSite {
+ Node* parent;
+ Node* nextChild;
+ };
+
+ template<typename ChildType>
+ PassRefPtr<ChildType> attach(Node* parent, PassRefPtr<ChildType> child);
+
+ void attachAtSite(const AttachmentSite&, PassRefPtr<Node> child);
+ void findFosterSite(AttachmentSite&);
+
+ PassRefPtr<Element> createElement(AtomicHTMLToken&, const AtomicString& namespaceURI);
+
+ PassRefPtr<Element> createHTMLElementAndAttachToCurrent(AtomicHTMLToken&);
+ void mergeAttributesFromTokenIntoElement(AtomicHTMLToken&, Element*);
+
+ Document* m_document;
+ RefPtr<Element> m_head;
+ RefPtr<Element> m_form;
+ mutable HTMLElementStack m_openElements;
+ mutable HTMLFormattingElementList m_activeFormattingElements;
+ FragmentScriptingPermission m_fragmentScriptingPermission;
+
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#parsing-main-intable
+ // In the "in table" insertion mode, we sometimes get into a state where
+ // "whenever a node would be inserted into the current node, it must instead
+ // be foster parented." This flag tracks whether we're in that state.
+ bool m_redirectAttachToFosterParent;
+};
+
+}
+
+#endif
diff --git a/WebCore/html/HTMLDocumentParser.cpp b/WebCore/html/HTMLDocumentParser.cpp
index 59b839d..129f6e9 100644
--- a/WebCore/html/HTMLDocumentParser.cpp
+++ b/WebCore/html/HTMLDocumentParser.cpp
@@ -222,9 +222,23 @@ void HTMLDocumentParser::insert(const SegmentedString& source)
if (m_parserStopped)
return;
+<<<<<<< HEAD
#ifdef ANDROID_INSTRUMENT
android::TimeCounter::start(android::TimeCounter::ParsingTimeCounter);
#endif
+=======
+ if (m_scriptRunner && !m_scriptRunner->inScriptExecution() && m_input.haveSeenEndOfFile()) {
+ // document.write was called without a current insertion point.
+ // According to the spec, we're supposed to implicitly open the
+ // document. Unfortunately, that behavior isn't sufficiently compatible
+ // with the web. The working group is mulling over what exactly to
+ // do. In the meantime, we're going to try one of the potential
+ // solutions, which is to ignore the write.
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767
+ return;
+ }
+
+>>>>>>> webkit.org at r63173
{
NestingLevelIncrementer nestingLevelIncrementer(m_writeNestingLevel);
@@ -354,6 +368,7 @@ void HTMLDocumentParser::resumeParsingAfterScriptExecution()
ASSERT(!inScriptExecution());
ASSERT(!m_treeBuilder->isPaused());
+ m_preloadScanner.clear();
pumpTokenizerIfPossible(AllowYield);
endIfDelayed();
}
diff --git a/WebCore/html/HTMLElementStack.cpp b/WebCore/html/HTMLElementStack.cpp
index 2f1b792..d1a1752 100644
--- a/WebCore/html/HTMLElementStack.cpp
+++ b/WebCore/html/HTMLElementStack.cpp
@@ -62,6 +62,7 @@ inline bool isListItemScopeMarker(Element* element)
|| element->hasTagName(olTag)
|| element->hasTagName(ulTag);
}
+
inline bool isTableScopeMarker(Element* element)
{
return element->hasTagName(tableTag)
@@ -76,6 +77,12 @@ inline bool isTableBodyScopeMarker(Element* element)
|| element->hasTagName(htmlTag);
}
+inline bool isTableRowScopeMarker(Element* element)
+{
+ return element->hasTagName(trTag)
+ || element->hasTagName(htmlTag);
+}
+
}
HTMLElementStack::ElementRecord::ElementRecord(PassRefPtr<Element> element, PassOwnPtr<ElementRecord> next)
@@ -136,6 +143,12 @@ void HTMLElementStack::pop()
popCommon();
}
+void HTMLElementStack::popUntilElementWithNamespace(const AtomicString& namespaceURI)
+{
+ while (top()->namespaceURI() != namespaceURI)
+ pop();
+}
+
void HTMLElementStack::popUntil(const AtomicString& tagName)
{
while (!top()->hasLocalName(tagName)) {
@@ -145,12 +158,24 @@ void HTMLElementStack::popUntil(const AtomicString& tagName)
}
}
+void HTMLElementStack::popUntilPopped(const AtomicString& tagName)
+{
+ popUntil(tagName);
+ pop();
+}
+
void HTMLElementStack::popUntil(Element* element)
{
while (top() != element)
pop();
}
+void HTMLElementStack::popUntilPopped(Element* element)
+{
+ popUntil(element);
+ pop();
+}
+
void HTMLElementStack::popUntilTableScopeMarker()
{
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#clear-the-stack-back-to-a-table-context
@@ -165,6 +190,13 @@ void HTMLElementStack::popUntilTableBodyScopeMarker()
pop();
}
+void HTMLElementStack::popUntilTableRowScopeMarker()
+{
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#clear-the-stack-back-to-a-table-row-context
+ while (!isTableRowScopeMarker(top()))
+ pop();
+}
+
void HTMLElementStack::pushHTMLHtmlElement(PassRefPtr<Element> element)
{
ASSERT(!m_top); // <html> should always be the bottom of the stack.
@@ -226,14 +258,24 @@ void HTMLElementStack::insertAbove(PassRefPtr<Element> element, ElementRecord* r
HTMLElementStack::ElementRecord* HTMLElementStack::topRecord() const
{
+ ASSERT(m_top);
return m_top.get();
}
Element* HTMLElementStack::top() const
{
+ ASSERT(m_top->element());
return m_top->element();
}
+Element* HTMLElementStack::oneBelowTop() const
+{
+ // We should never be calling this if it could be 0.
+ ASSERT(m_top);
+ ASSERT(m_top->next());
+ return m_top->next()->element();
+}
+
Element* HTMLElementStack::bottom() const
{
return htmlElement();
@@ -297,6 +339,19 @@ bool inScopeCommon(HTMLElementStack::ElementRecord* top, const AtomicString& tar
return false;
}
+bool HTMLElementStack::hasOnlyHTMLElementsInScope() const
+{
+ for (ElementRecord* record = m_top.get(); record; record = record->next()) {
+ Element* element = record->element();
+ if (element->namespaceURI() != xhtmlNamespaceURI)
+ return false;
+ if (isScopeMarker(element))
+ return true;
+ }
+ ASSERT_NOT_REACHED(); // <html> is always on the stack and is a scope marker.
+ return true;
+}
+
bool HTMLElementStack::inScope(Element* targetElement) const
{
for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) {
@@ -315,16 +370,34 @@ bool HTMLElementStack::inScope(const AtomicString& targetTag) const
return inScopeCommon<isScopeMarker>(m_top.get(), targetTag);
}
+bool HTMLElementStack::inScope(const QualifiedName& tagName) const
+{
+ // FIXME: Is localName() right for non-html elements?
+ return inScope(tagName.localName());
+}
+
bool HTMLElementStack::inListItemScope(const AtomicString& targetTag) const
{
return inScopeCommon<isListItemScopeMarker>(m_top.get(), targetTag);
}
+bool HTMLElementStack::inListItemScope(const QualifiedName& tagName) const
+{
+ // FIXME: Is localName() right for non-html elements?
+ return inListItemScope(tagName.localName());
+}
+
bool HTMLElementStack::inTableScope(const AtomicString& targetTag) const
{
return inScopeCommon<isTableScopeMarker>(m_top.get(), targetTag);
}
+bool HTMLElementStack::inTableScope(const QualifiedName& tagName) const
+{
+ // FIXME: Is localName() right for non-html elements?
+ return inTableScope(tagName.localName());
+}
+
Element* HTMLElementStack::htmlElement() const
{
ASSERT(m_htmlElement);
@@ -376,4 +449,14 @@ void HTMLElementStack::removeNonTopCommon(Element* element)
ASSERT_NOT_REACHED();
}
+#ifndef NDEBUG
+
+void HTMLElementStack::show()
+{
+ for (ElementRecord* record = m_top.get(); record; record = record->next())
+ record->element()->showNode();
+}
+
+#endif
+
}
diff --git a/WebCore/html/HTMLElementStack.h b/WebCore/html/HTMLElementStack.h
index efc3fd8..8be4422 100644
--- a/WebCore/html/HTMLElementStack.h
+++ b/WebCore/html/HTMLElementStack.h
@@ -35,6 +35,7 @@ namespace WebCore {
class AtomicString;
class Element;
+class QualifiedName;
// NOTE: The HTML5 spec uses a backwards (grows downward) stack. We're using
// more standard (grows upwards) stack terminology here.
@@ -67,6 +68,7 @@ public:
};
Element* top() const;
+ Element* oneBelowTop() const;
ElementRecord* topRecord() const;
Element* bottom() const;
ElementRecord* find(Element*) const;
@@ -81,9 +83,13 @@ public:
void pop();
void popUntil(const AtomicString& tagName);
+ void popUntilElementWithNamespace(const AtomicString& namespaceURI);
void popUntil(Element*);
+ void popUntilPopped(const AtomicString& tagName);
+ void popUntilPopped(Element*);
void popUntilTableScopeMarker(); // "clear the stack back to a table context" in the spec.
void popUntilTableBodyScopeMarker(); // "clear the stack back to a table body context" in the spec.
+ void popUntilTableRowScopeMarker(); // "clear the stack back to a table row context" in the spec.
void popHTMLHeadElement();
void popHTMLBodyElement();
@@ -94,13 +100,22 @@ public:
bool inScope(Element*) const;
bool inScope(const AtomicString& tagName) const;
+ bool inScope(const QualifiedName&) const;
bool inListItemScope(const AtomicString& tagName) const;
+ bool inListItemScope(const QualifiedName&) const;
bool inTableScope(const AtomicString& tagName) const;
+ bool inTableScope(const QualifiedName&) const;
+
+ bool hasOnlyHTMLElementsInScope() const;
Element* htmlElement() const;
Element* headElement() const;
Element* bodyElement() const;
+#ifndef NDEBUG
+ void show();
+#endif
+
private:
void pushCommon(PassRefPtr<Element>);
void popCommon();
diff --git a/WebCore/html/HTMLEntityNames.json b/WebCore/html/HTMLEntityNames.json
new file mode 100644
index 0000000..7be8c5b
--- /dev/null
+++ b/WebCore/html/HTMLEntityNames.json
@@ -0,0 +1,8554 @@
+[
+ {
+ entity: "AElig;",
+ value: "U+000C6"
+ },
+ {
+ entity: "AElig",
+ value: "U+000C6"
+ },
+ {
+ entity: "AMP;",
+ value: "U+00026"
+ },
+ {
+ entity: "AMP",
+ value: "U+00026"
+ },
+ {
+ entity: "Aacute;",
+ value: "U+000C1"
+ },
+ {
+ entity: "Aacute",
+ value: "U+000C1"
+ },
+ {
+ entity: "Abreve;",
+ value: "U+00102"
+ },
+ {
+ entity: "Acirc;",
+ value: "U+000C2"
+ },
+ {
+ entity: "Acirc",
+ value: "U+000C2"
+ },
+ {
+ entity: "Acy;",
+ value: "U+00410"
+ },
+ {
+ entity: "Afr;",
+ value: "U+1D504"
+ },
+ {
+ entity: "Agrave;",
+ value: "U+000C0"
+ },
+ {
+ entity: "Agrave",
+ value: "U+000C0"
+ },
+ {
+ entity: "Alpha;",
+ value: "U+00391"
+ },
+ {
+ entity: "Amacr;",
+ value: "U+00100"
+ },
+ {
+ entity: "And;",
+ value: "U+02A53"
+ },
+ {
+ entity: "Aogon;",
+ value: "U+00104"
+ },
+ {
+ entity: "Aopf;",
+ value: "U+1D538"
+ },
+ {
+ entity: "ApplyFunction;",
+ value: "U+02061"
+ },
+ {
+ entity: "Aring;",
+ value: "U+000C5"
+ },
+ {
+ entity: "Aring",
+ value: "U+000C5"
+ },
+ {
+ entity: "Ascr;",
+ value: "U+1D49C"
+ },
+ {
+ entity: "Assign;",
+ value: "U+02254"
+ },
+ {
+ entity: "Atilde;",
+ value: "U+000C3"
+ },
+ {
+ entity: "Atilde",
+ value: "U+000C3"
+ },
+ {
+ entity: "Auml;",
+ value: "U+000C4"
+ },
+ {
+ entity: "Auml",
+ value: "U+000C4"
+ },
+ {
+ entity: "Backslash;",
+ value: "U+02216"
+ },
+ {
+ entity: "Barv;",
+ value: "U+02AE7"
+ },
+ {
+ entity: "Barwed;",
+ value: "U+02306"
+ },
+ {
+ entity: "Bcy;",
+ value: "U+00411"
+ },
+ {
+ entity: "Because;",
+ value: "U+02235"
+ },
+ {
+ entity: "Bernoullis;",
+ value: "U+0212C"
+ },
+ {
+ entity: "Beta;",
+ value: "U+00392"
+ },
+ {
+ entity: "Bfr;",
+ value: "U+1D505"
+ },
+ {
+ entity: "Bopf;",
+ value: "U+1D539"
+ },
+ {
+ entity: "Breve;",
+ value: "U+002D8"
+ },
+ {
+ entity: "Bscr;",
+ value: "U+0212C"
+ },
+ {
+ entity: "Bumpeq;",
+ value: "U+0224E"
+ },
+ {
+ entity: "CHcy;",
+ value: "U+00427"
+ },
+ {
+ entity: "COPY;",
+ value: "U+000A9"
+ },
+ {
+ entity: "COPY",
+ value: "U+000A9"
+ },
+ {
+ entity: "Cacute;",
+ value: "U+00106"
+ },
+ {
+ entity: "Cap;",
+ value: "U+022D2"
+ },
+ {
+ entity: "CapitalDifferentialD;",
+ value: "U+02145"
+ },
+ {
+ entity: "Cayleys;",
+ value: "U+0212D"
+ },
+ {
+ entity: "Ccaron;",
+ value: "U+0010C"
+ },
+ {
+ entity: "Ccedil;",
+ value: "U+000C7"
+ },
+ {
+ entity: "Ccedil",
+ value: "U+000C7"
+ },
+ {
+ entity: "Ccirc;",
+ value: "U+00108"
+ },
+ {
+ entity: "Cconint;",
+ value: "U+02230"
+ },
+ {
+ entity: "Cdot;",
+ value: "U+0010A"
+ },
+ {
+ entity: "Cedilla;",
+ value: "U+000B8"
+ },
+ {
+ entity: "CenterDot;",
+ value: "U+000B7"
+ },
+ {
+ entity: "Cfr;",
+ value: "U+0212D"
+ },
+ {
+ entity: "Chi;",
+ value: "U+003A7"
+ },
+ {
+ entity: "CircleDot;",
+ value: "U+02299"
+ },
+ {
+ entity: "CircleMinus;",
+ value: "U+02296"
+ },
+ {
+ entity: "CirclePlus;",
+ value: "U+02295"
+ },
+ {
+ entity: "CircleTimes;",
+ value: "U+02297"
+ },
+ {
+ entity: "ClockwiseContourIntegral;",
+ value: "U+02232"
+ },
+ {
+ entity: "CloseCurlyDoubleQuote;",
+ value: "U+0201D"
+ },
+ {
+ entity: "CloseCurlyQuote;",
+ value: "U+02019"
+ },
+ {
+ entity: "Colon;",
+ value: "U+02237"
+ },
+ {
+ entity: "Colone;",
+ value: "U+02A74"
+ },
+ {
+ entity: "Congruent;",
+ value: "U+02261"
+ },
+ {
+ entity: "Conint;",
+ value: "U+0222F"
+ },
+ {
+ entity: "ContourIntegral;",
+ value: "U+0222E"
+ },
+ {
+ entity: "Copf;",
+ value: "U+02102"
+ },
+ {
+ entity: "Coproduct;",
+ value: "U+02210"
+ },
+ {
+ entity: "CounterClockwiseContourIntegral;",
+ value: "U+02233"
+ },
+ {
+ entity: "Cross;",
+ value: "U+02A2F"
+ },
+ {
+ entity: "Cscr;",
+ value: "U+1D49E"
+ },
+ {
+ entity: "Cup;",
+ value: "U+022D3"
+ },
+ {
+ entity: "CupCap;",
+ value: "U+0224D"
+ },
+ {
+ entity: "DD;",
+ value: "U+02145"
+ },
+ {
+ entity: "DDotrahd;",
+ value: "U+02911"
+ },
+ {
+ entity: "DJcy;",
+ value: "U+00402"
+ },
+ {
+ entity: "DScy;",
+ value: "U+00405"
+ },
+ {
+ entity: "DZcy;",
+ value: "U+0040F"
+ },
+ {
+ entity: "Dagger;",
+ value: "U+02021"
+ },
+ {
+ entity: "Darr;",
+ value: "U+021A1"
+ },
+ {
+ entity: "Dashv;",
+ value: "U+02AE4"
+ },
+ {
+ entity: "Dcaron;",
+ value: "U+0010E"
+ },
+ {
+ entity: "Dcy;",
+ value: "U+00414"
+ },
+ {
+ entity: "Del;",
+ value: "U+02207"
+ },
+ {
+ entity: "Delta;",
+ value: "U+00394"
+ },
+ {
+ entity: "Dfr;",
+ value: "U+1D507"
+ },
+ {
+ entity: "DiacriticalAcute;",
+ value: "U+000B4"
+ },
+ {
+ entity: "DiacriticalDot;",
+ value: "U+002D9"
+ },
+ {
+ entity: "DiacriticalDoubleAcute;",
+ value: "U+002DD"
+ },
+ {
+ entity: "DiacriticalGrave;",
+ value: "U+00060"
+ },
+ {
+ entity: "DiacriticalTilde;",
+ value: "U+002DC"
+ },
+ {
+ entity: "Diamond;",
+ value: "U+022C4"
+ },
+ {
+ entity: "DifferentialD;",
+ value: "U+02146"
+ },
+ {
+ entity: "Dopf;",
+ value: "U+1D53B"
+ },
+ {
+ entity: "Dot;",
+ value: "U+000A8"
+ },
+ {
+ entity: "DotDot;",
+ value: "U+020DC"
+ },
+ {
+ entity: "DotEqual;",
+ value: "U+02250"
+ },
+ {
+ entity: "DoubleContourIntegral;",
+ value: "U+0222F"
+ },
+ {
+ entity: "DoubleDot;",
+ value: "U+000A8"
+ },
+ {
+ entity: "DoubleDownArrow;",
+ value: "U+021D3"
+ },
+ {
+ entity: "DoubleLeftArrow;",
+ value: "U+021D0"
+ },
+ {
+ entity: "DoubleLeftRightArrow;",
+ value: "U+021D4"
+ },
+ {
+ entity: "DoubleLeftTee;",
+ value: "U+02AE4"
+ },
+ {
+ entity: "DoubleLongLeftArrow;",
+ value: "U+027F8"
+ },
+ {
+ entity: "DoubleLongLeftRightArrow;",
+ value: "U+027FA"
+ },
+ {
+ entity: "DoubleLongRightArrow;",
+ value: "U+027F9"
+ },
+ {
+ entity: "DoubleRightArrow;",
+ value: "U+021D2"
+ },
+ {
+ entity: "DoubleRightTee;",
+ value: "U+022A8"
+ },
+ {
+ entity: "DoubleUpArrow;",
+ value: "U+021D1"
+ },
+ {
+ entity: "DoubleUpDownArrow;",
+ value: "U+021D5"
+ },
+ {
+ entity: "DoubleVerticalBar;",
+ value: "U+02225"
+ },
+ {
+ entity: "DownArrow;",
+ value: "U+02193"
+ },
+ {
+ entity: "DownArrowBar;",
+ value: "U+02913"
+ },
+ {
+ entity: "DownArrowUpArrow;",
+ value: "U+021F5"
+ },
+ {
+ entity: "DownBreve;",
+ value: "U+00311"
+ },
+ {
+ entity: "DownLeftRightVector;",
+ value: "U+02950"
+ },
+ {
+ entity: "DownLeftTeeVector;",
+ value: "U+0295E"
+ },
+ {
+ entity: "DownLeftVector;",
+ value: "U+021BD"
+ },
+ {
+ entity: "DownLeftVectorBar;",
+ value: "U+02956"
+ },
+ {
+ entity: "DownRightTeeVector;",
+ value: "U+0295F"
+ },
+ {
+ entity: "DownRightVector;",
+ value: "U+021C1"
+ },
+ {
+ entity: "DownRightVectorBar;",
+ value: "U+02957"
+ },
+ {
+ entity: "DownTee;",
+ value: "U+022A4"
+ },
+ {
+ entity: "DownTeeArrow;",
+ value: "U+021A7"
+ },
+ {
+ entity: "Downarrow;",
+ value: "U+021D3"
+ },
+ {
+ entity: "Dscr;",
+ value: "U+1D49F"
+ },
+ {
+ entity: "Dstrok;",
+ value: "U+00110"
+ },
+ {
+ entity: "ENG;",
+ value: "U+0014A"
+ },
+ {
+ entity: "ETH;",
+ value: "U+000D0"
+ },
+ {
+ entity: "ETH",
+ value: "U+000D0"
+ },
+ {
+ entity: "Eacute;",
+ value: "U+000C9"
+ },
+ {
+ entity: "Eacute",
+ value: "U+000C9"
+ },
+ {
+ entity: "Ecaron;",
+ value: "U+0011A"
+ },
+ {
+ entity: "Ecirc;",
+ value: "U+000CA"
+ },
+ {
+ entity: "Ecirc",
+ value: "U+000CA"
+ },
+ {
+ entity: "Ecy;",
+ value: "U+0042D"
+ },
+ {
+ entity: "Edot;",
+ value: "U+00116"
+ },
+ {
+ entity: "Efr;",
+ value: "U+1D508"
+ },
+ {
+ entity: "Egrave;",
+ value: "U+000C8"
+ },
+ {
+ entity: "Egrave",
+ value: "U+000C8"
+ },
+ {
+ entity: "Element;",
+ value: "U+02208"
+ },
+ {
+ entity: "Emacr;",
+ value: "U+00112"
+ },
+ {
+ entity: "EmptySmallSquare;",
+ value: "U+025FB"
+ },
+ {
+ entity: "EmptyVerySmallSquare;",
+ value: "U+025AB"
+ },
+ {
+ entity: "Eogon;",
+ value: "U+00118"
+ },
+ {
+ entity: "Eopf;",
+ value: "U+1D53C"
+ },
+ {
+ entity: "Epsilon;",
+ value: "U+00395"
+ },
+ {
+ entity: "Equal;",
+ value: "U+02A75"
+ },
+ {
+ entity: "EqualTilde;",
+ value: "U+02242"
+ },
+ {
+ entity: "Equilibrium;",
+ value: "U+021CC"
+ },
+ {
+ entity: "Escr;",
+ value: "U+02130"
+ },
+ {
+ entity: "Esim;",
+ value: "U+02A73"
+ },
+ {
+ entity: "Eta;",
+ value: "U+00397"
+ },
+ {
+ entity: "Euml;",
+ value: "U+000CB"
+ },
+ {
+ entity: "Euml",
+ value: "U+000CB"
+ },
+ {
+ entity: "Exists;",
+ value: "U+02203"
+ },
+ {
+ entity: "ExponentialE;",
+ value: "U+02147"
+ },
+ {
+ entity: "Fcy;",
+ value: "U+00424"
+ },
+ {
+ entity: "Ffr;",
+ value: "U+1D509"
+ },
+ {
+ entity: "FilledSmallSquare;",
+ value: "U+025FC"
+ },
+ {
+ entity: "FilledVerySmallSquare;",
+ value: "U+025AA"
+ },
+ {
+ entity: "Fopf;",
+ value: "U+1D53D"
+ },
+ {
+ entity: "ForAll;",
+ value: "U+02200"
+ },
+ {
+ entity: "Fouriertrf;",
+ value: "U+02131"
+ },
+ {
+ entity: "Fscr;",
+ value: "U+02131"
+ },
+ {
+ entity: "GJcy;",
+ value: "U+00403"
+ },
+ {
+ entity: "GT;",
+ value: "U+0003E"
+ },
+ {
+ entity: "GT",
+ value: "U+0003E"
+ },
+ {
+ entity: "Gamma;",
+ value: "U+00393"
+ },
+ {
+ entity: "Gammad;",
+ value: "U+003DC"
+ },
+ {
+ entity: "Gbreve;",
+ value: "U+0011E"
+ },
+ {
+ entity: "Gcedil;",
+ value: "U+00122"
+ },
+ {
+ entity: "Gcirc;",
+ value: "U+0011C"
+ },
+ {
+ entity: "Gcy;",
+ value: "U+00413"
+ },
+ {
+ entity: "Gdot;",
+ value: "U+00120"
+ },
+ {
+ entity: "Gfr;",
+ value: "U+1D50A"
+ },
+ {
+ entity: "Gg;",
+ value: "U+022D9"
+ },
+ {
+ entity: "Gopf;",
+ value: "U+1D53E"
+ },
+ {
+ entity: "GreaterEqual;",
+ value: "U+02265"
+ },
+ {
+ entity: "GreaterEqualLess;",
+ value: "U+022DB"
+ },
+ {
+ entity: "GreaterFullEqual;",
+ value: "U+02267"
+ },
+ {
+ entity: "GreaterGreater;",
+ value: "U+02AA2"
+ },
+ {
+ entity: "GreaterLess;",
+ value: "U+02277"
+ },
+ {
+ entity: "GreaterSlantEqual;",
+ value: "U+02A7E"
+ },
+ {
+ entity: "GreaterTilde;",
+ value: "U+02273"
+ },
+ {
+ entity: "Gscr;",
+ value: "U+1D4A2"
+ },
+ {
+ entity: "Gt;",
+ value: "U+0226B"
+ },
+ {
+ entity: "HARDcy;",
+ value: "U+0042A"
+ },
+ {
+ entity: "Hacek;",
+ value: "U+002C7"
+ },
+ {
+ entity: "Hat;",
+ value: "U+0005E"
+ },
+ {
+ entity: "Hcirc;",
+ value: "U+00124"
+ },
+ {
+ entity: "Hfr;",
+ value: "U+0210C"
+ },
+ {
+ entity: "HilbertSpace;",
+ value: "U+0210B"
+ },
+ {
+ entity: "Hopf;",
+ value: "U+0210D"
+ },
+ {
+ entity: "HorizontalLine;",
+ value: "U+02500"
+ },
+ {
+ entity: "Hscr;",
+ value: "U+0210B"
+ },
+ {
+ entity: "Hstrok;",
+ value: "U+00126"
+ },
+ {
+ entity: "HumpDownHump;",
+ value: "U+0224E"
+ },
+ {
+ entity: "HumpEqual;",
+ value: "U+0224F"
+ },
+ {
+ entity: "IEcy;",
+ value: "U+00415"
+ },
+ {
+ entity: "IJlig;",
+ value: "U+00132"
+ },
+ {
+ entity: "IOcy;",
+ value: "U+00401"
+ },
+ {
+ entity: "Iacute;",
+ value: "U+000CD"
+ },
+ {
+ entity: "Iacute",
+ value: "U+000CD"
+ },
+ {
+ entity: "Icirc;",
+ value: "U+000CE"
+ },
+ {
+ entity: "Icirc",
+ value: "U+000CE"
+ },
+ {
+ entity: "Icy;",
+ value: "U+00418"
+ },
+ {
+ entity: "Idot;",
+ value: "U+00130"
+ },
+ {
+ entity: "Ifr;",
+ value: "U+02111"
+ },
+ {
+ entity: "Igrave;",
+ value: "U+000CC"
+ },
+ {
+ entity: "Igrave",
+ value: "U+000CC"
+ },
+ {
+ entity: "Im;",
+ value: "U+02111"
+ },
+ {
+ entity: "Imacr;",
+ value: "U+0012A"
+ },
+ {
+ entity: "ImaginaryI;",
+ value: "U+02148"
+ },
+ {
+ entity: "Implies;",
+ value: "U+021D2"
+ },
+ {
+ entity: "Int;",
+ value: "U+0222C"
+ },
+ {
+ entity: "Integral;",
+ value: "U+0222B"
+ },
+ {
+ entity: "Intersection;",
+ value: "U+022C2"
+ },
+ {
+ entity: "InvisibleComma;",
+ value: "U+02063"
+ },
+ {
+ entity: "InvisibleTimes;",
+ value: "U+02062"
+ },
+ {
+ entity: "Iogon;",
+ value: "U+0012E"
+ },
+ {
+ entity: "Iopf;",
+ value: "U+1D540"
+ },
+ {
+ entity: "Iota;",
+ value: "U+00399"
+ },
+ {
+ entity: "Iscr;",
+ value: "U+02110"
+ },
+ {
+ entity: "Itilde;",
+ value: "U+00128"
+ },
+ {
+ entity: "Iukcy;",
+ value: "U+00406"
+ },
+ {
+ entity: "Iuml;",
+ value: "U+000CF"
+ },
+ {
+ entity: "Iuml",
+ value: "U+000CF"
+ },
+ {
+ entity: "Jcirc;",
+ value: "U+00134"
+ },
+ {
+ entity: "Jcy;",
+ value: "U+00419"
+ },
+ {
+ entity: "Jfr;",
+ value: "U+1D50D"
+ },
+ {
+ entity: "Jopf;",
+ value: "U+1D541"
+ },
+ {
+ entity: "Jscr;",
+ value: "U+1D4A5"
+ },
+ {
+ entity: "Jsercy;",
+ value: "U+00408"
+ },
+ {
+ entity: "Jukcy;",
+ value: "U+00404"
+ },
+ {
+ entity: "KHcy;",
+ value: "U+00425"
+ },
+ {
+ entity: "KJcy;",
+ value: "U+0040C"
+ },
+ {
+ entity: "Kappa;",
+ value: "U+0039A"
+ },
+ {
+ entity: "Kcedil;",
+ value: "U+00136"
+ },
+ {
+ entity: "Kcy;",
+ value: "U+0041A"
+ },
+ {
+ entity: "Kfr;",
+ value: "U+1D50E"
+ },
+ {
+ entity: "Kopf;",
+ value: "U+1D542"
+ },
+ {
+ entity: "Kscr;",
+ value: "U+1D4A6"
+ },
+ {
+ entity: "LJcy;",
+ value: "U+00409"
+ },
+ {
+ entity: "LT;",
+ value: "U+0003C"
+ },
+ {
+ entity: "LT",
+ value: "U+0003C"
+ },
+ {
+ entity: "Lacute;",
+ value: "U+00139"
+ },
+ {
+ entity: "Lambda;",
+ value: "U+0039B"
+ },
+ {
+ entity: "Lang;",
+ value: "U+027EA"
+ },
+ {
+ entity: "Laplacetrf;",
+ value: "U+02112"
+ },
+ {
+ entity: "Larr;",
+ value: "U+0219E"
+ },
+ {
+ entity: "Lcaron;",
+ value: "U+0013D"
+ },
+ {
+ entity: "Lcedil;",
+ value: "U+0013B"
+ },
+ {
+ entity: "Lcy;",
+ value: "U+0041B"
+ },
+ {
+ entity: "LeftAngleBracket;",
+ value: "U+027E8"
+ },
+ {
+ entity: "LeftArrow;",
+ value: "U+02190"
+ },
+ {
+ entity: "LeftArrowBar;",
+ value: "U+021E4"
+ },
+ {
+ entity: "LeftArrowRightArrow;",
+ value: "U+021C6"
+ },
+ {
+ entity: "LeftCeiling;",
+ value: "U+02308"
+ },
+ {
+ entity: "LeftDoubleBracket;",
+ value: "U+027E6"
+ },
+ {
+ entity: "LeftDownTeeVector;",
+ value: "U+02961"
+ },
+ {
+ entity: "LeftDownVector;",
+ value: "U+021C3"
+ },
+ {
+ entity: "LeftDownVectorBar;",
+ value: "U+02959"
+ },
+ {
+ entity: "LeftFloor;",
+ value: "U+0230A"
+ },
+ {
+ entity: "LeftRightArrow;",
+ value: "U+02194"
+ },
+ {
+ entity: "LeftRightVector;",
+ value: "U+0294E"
+ },
+ {
+ entity: "LeftTee;",
+ value: "U+022A3"
+ },
+ {
+ entity: "LeftTeeArrow;",
+ value: "U+021A4"
+ },
+ {
+ entity: "LeftTeeVector;",
+ value: "U+0295A"
+ },
+ {
+ entity: "LeftTriangle;",
+ value: "U+022B2"
+ },
+ {
+ entity: "LeftTriangleBar;",
+ value: "U+029CF"
+ },
+ {
+ entity: "LeftTriangleEqual;",
+ value: "U+022B4"
+ },
+ {
+ entity: "LeftUpDownVector;",
+ value: "U+02951"
+ },
+ {
+ entity: "LeftUpTeeVector;",
+ value: "U+02960"
+ },
+ {
+ entity: "LeftUpVector;",
+ value: "U+021BF"
+ },
+ {
+ entity: "LeftUpVectorBar;",
+ value: "U+02958"
+ },
+ {
+ entity: "LeftVector;",
+ value: "U+021BC"
+ },
+ {
+ entity: "LeftVectorBar;",
+ value: "U+02952"
+ },
+ {
+ entity: "Leftarrow;",
+ value: "U+021D0"
+ },
+ {
+ entity: "Leftrightarrow;",
+ value: "U+021D4"
+ },
+ {
+ entity: "LessEqualGreater;",
+ value: "U+022DA"
+ },
+ {
+ entity: "LessFullEqual;",
+ value: "U+02266"
+ },
+ {
+ entity: "LessGreater;",
+ value: "U+02276"
+ },
+ {
+ entity: "LessLess;",
+ value: "U+02AA1"
+ },
+ {
+ entity: "LessSlantEqual;",
+ value: "U+02A7D"
+ },
+ {
+ entity: "LessTilde;",
+ value: "U+02272"
+ },
+ {
+ entity: "Lfr;",
+ value: "U+1D50F"
+ },
+ {
+ entity: "Ll;",
+ value: "U+022D8"
+ },
+ {
+ entity: "Lleftarrow;",
+ value: "U+021DA"
+ },
+ {
+ entity: "Lmidot;",
+ value: "U+0013F"
+ },
+ {
+ entity: "LongLeftArrow;",
+ value: "U+027F5"
+ },
+ {
+ entity: "LongLeftRightArrow;",
+ value: "U+027F7"
+ },
+ {
+ entity: "LongRightArrow;",
+ value: "U+027F6"
+ },
+ {
+ entity: "Longleftarrow;",
+ value: "U+027F8"
+ },
+ {
+ entity: "Longleftrightarrow;",
+ value: "U+027FA"
+ },
+ {
+ entity: "Longrightarrow;",
+ value: "U+027F9"
+ },
+ {
+ entity: "Lopf;",
+ value: "U+1D543"
+ },
+ {
+ entity: "LowerLeftArrow;",
+ value: "U+02199"
+ },
+ {
+ entity: "LowerRightArrow;",
+ value: "U+02198"
+ },
+ {
+ entity: "Lscr;",
+ value: "U+02112"
+ },
+ {
+ entity: "Lsh;",
+ value: "U+021B0"
+ },
+ {
+ entity: "Lstrok;",
+ value: "U+00141"
+ },
+ {
+ entity: "Lt;",
+ value: "U+0226A"
+ },
+ {
+ entity: "Map;",
+ value: "U+02905"
+ },
+ {
+ entity: "Mcy;",
+ value: "U+0041C"
+ },
+ {
+ entity: "MediumSpace;",
+ value: "U+0205F"
+ },
+ {
+ entity: "Mellintrf;",
+ value: "U+02133"
+ },
+ {
+ entity: "Mfr;",
+ value: "U+1D510"
+ },
+ {
+ entity: "MinusPlus;",
+ value: "U+02213"
+ },
+ {
+ entity: "Mopf;",
+ value: "U+1D544"
+ },
+ {
+ entity: "Mscr;",
+ value: "U+02133"
+ },
+ {
+ entity: "Mu;",
+ value: "U+0039C"
+ },
+ {
+ entity: "NJcy;",
+ value: "U+0040A"
+ },
+ {
+ entity: "Nacute;",
+ value: "U+00143"
+ },
+ {
+ entity: "Ncaron;",
+ value: "U+00147"
+ },
+ {
+ entity: "Ncedil;",
+ value: "U+00145"
+ },
+ {
+ entity: "Ncy;",
+ value: "U+0041D"
+ },
+ {
+ entity: "NegativeMediumSpace;",
+ value: "U+0200B"
+ },
+ {
+ entity: "NegativeThickSpace;",
+ value: "U+0200B"
+ },
+ {
+ entity: "NegativeThinSpace;",
+ value: "U+0200B"
+ },
+ {
+ entity: "NegativeVeryThinSpace;",
+ value: "U+0200B"
+ },
+ {
+ entity: "NestedGreaterGreater;",
+ value: "U+0226B"
+ },
+ {
+ entity: "NestedLessLess;",
+ value: "U+0226A"
+ },
+ {
+ entity: "NewLine;",
+ value: "U+0000A"
+ },
+ {
+ entity: "Nfr;",
+ value: "U+1D511"
+ },
+ {
+ entity: "NoBreak;",
+ value: "U+02060"
+ },
+ {
+ entity: "NonBreakingSpace;",
+ value: "U+000A0"
+ },
+ {
+ entity: "Nopf;",
+ value: "U+02115"
+ },
+ {
+ entity: "Not;",
+ value: "U+02AEC"
+ },
+ {
+ entity: "NotCongruent;",
+ value: "U+02262"
+ },
+ {
+ entity: "NotCupCap;",
+ value: "U+0226D"
+ },
+ {
+ entity: "NotDoubleVerticalBar;",
+ value: "U+02226"
+ },
+ {
+ entity: "NotElement;",
+ value: "U+02209"
+ },
+ {
+ entity: "NotEqual;",
+ value: "U+02260"
+ },
+ {
+ entity: "NotExists;",
+ value: "U+02204"
+ },
+ {
+ entity: "NotGreater;",
+ value: "U+0226F"
+ },
+ {
+ entity: "NotGreaterEqual;",
+ value: "U+02271"
+ },
+ {
+ entity: "NotGreaterLess;",
+ value: "U+02279"
+ },
+ {
+ entity: "NotGreaterTilde;",
+ value: "U+02275"
+ },
+ {
+ entity: "NotLeftTriangle;",
+ value: "U+022EA"
+ },
+ {
+ entity: "NotLeftTriangleEqual;",
+ value: "U+022EC"
+ },
+ {
+ entity: "NotLess;",
+ value: "U+0226E"
+ },
+ {
+ entity: "NotLessEqual;",
+ value: "U+02270"
+ },
+ {
+ entity: "NotLessGreater;",
+ value: "U+02278"
+ },
+ {
+ entity: "NotLessTilde;",
+ value: "U+02274"
+ },
+ {
+ entity: "NotPrecedes;",
+ value: "U+02280"
+ },
+ {
+ entity: "NotPrecedesSlantEqual;",
+ value: "U+022E0"
+ },
+ {
+ entity: "NotReverseElement;",
+ value: "U+0220C"
+ },
+ {
+ entity: "NotRightTriangle;",
+ value: "U+022EB"
+ },
+ {
+ entity: "NotRightTriangleEqual;",
+ value: "U+022ED"
+ },
+ {
+ entity: "NotSquareSubsetEqual;",
+ value: "U+022E2"
+ },
+ {
+ entity: "NotSquareSupersetEqual;",
+ value: "U+022E3"
+ },
+ {
+ entity: "NotSubsetEqual;",
+ value: "U+02288"
+ },
+ {
+ entity: "NotSucceeds;",
+ value: "U+02281"
+ },
+ {
+ entity: "NotSucceedsSlantEqual;",
+ value: "U+022E1"
+ },
+ {
+ entity: "NotSupersetEqual;",
+ value: "U+02289"
+ },
+ {
+ entity: "NotTilde;",
+ value: "U+02241"
+ },
+ {
+ entity: "NotTildeEqual;",
+ value: "U+02244"
+ },
+ {
+ entity: "NotTildeFullEqual;",
+ value: "U+02247"
+ },
+ {
+ entity: "NotTildeTilde;",
+ value: "U+02249"
+ },
+ {
+ entity: "NotVerticalBar;",
+ value: "U+02224"
+ },
+ {
+ entity: "Nscr;",
+ value: "U+1D4A9"
+ },
+ {
+ entity: "Ntilde;",
+ value: "U+000D1"
+ },
+ {
+ entity: "Ntilde",
+ value: "U+000D1"
+ },
+ {
+ entity: "Nu;",
+ value: "U+0039D"
+ },
+ {
+ entity: "OElig;",
+ value: "U+00152"
+ },
+ {
+ entity: "Oacute;",
+ value: "U+000D3"
+ },
+ {
+ entity: "Oacute",
+ value: "U+000D3"
+ },
+ {
+ entity: "Ocirc;",
+ value: "U+000D4"
+ },
+ {
+ entity: "Ocirc",
+ value: "U+000D4"
+ },
+ {
+ entity: "Ocy;",
+ value: "U+0041E"
+ },
+ {
+ entity: "Odblac;",
+ value: "U+00150"
+ },
+ {
+ entity: "Ofr;",
+ value: "U+1D512"
+ },
+ {
+ entity: "Ograve;",
+ value: "U+000D2"
+ },
+ {
+ entity: "Ograve",
+ value: "U+000D2"
+ },
+ {
+ entity: "Omacr;",
+ value: "U+0014C"
+ },
+ {
+ entity: "Omega;",
+ value: "U+003A9"
+ },
+ {
+ entity: "Omicron;",
+ value: "U+0039F"
+ },
+ {
+ entity: "Oopf;",
+ value: "U+1D546"
+ },
+ {
+ entity: "OpenCurlyDoubleQuote;",
+ value: "U+0201C"
+ },
+ {
+ entity: "OpenCurlyQuote;",
+ value: "U+02018"
+ },
+ {
+ entity: "Or;",
+ value: "U+02A54"
+ },
+ {
+ entity: "Oscr;",
+ value: "U+1D4AA"
+ },
+ {
+ entity: "Oslash;",
+ value: "U+000D8"
+ },
+ {
+ entity: "Oslash",
+ value: "U+000D8"
+ },
+ {
+ entity: "Otilde;",
+ value: "U+000D5"
+ },
+ {
+ entity: "Otilde",
+ value: "U+000D5"
+ },
+ {
+ entity: "Otimes;",
+ value: "U+02A37"
+ },
+ {
+ entity: "Ouml;",
+ value: "U+000D6"
+ },
+ {
+ entity: "Ouml",
+ value: "U+000D6"
+ },
+ {
+ entity: "OverBar;",
+ value: "U+0203E"
+ },
+ {
+ entity: "OverBrace;",
+ value: "U+023DE"
+ },
+ {
+ entity: "OverBracket;",
+ value: "U+023B4"
+ },
+ {
+ entity: "OverParenthesis;",
+ value: "U+023DC"
+ },
+ {
+ entity: "PartialD;",
+ value: "U+02202"
+ },
+ {
+ entity: "Pcy;",
+ value: "U+0041F"
+ },
+ {
+ entity: "Pfr;",
+ value: "U+1D513"
+ },
+ {
+ entity: "Phi;",
+ value: "U+003A6"
+ },
+ {
+ entity: "Pi;",
+ value: "U+003A0"
+ },
+ {
+ entity: "PlusMinus;",
+ value: "U+000B1"
+ },
+ {
+ entity: "Poincareplane;",
+ value: "U+0210C"
+ },
+ {
+ entity: "Popf;",
+ value: "U+02119"
+ },
+ {
+ entity: "Pr;",
+ value: "U+02ABB"
+ },
+ {
+ entity: "Precedes;",
+ value: "U+0227A"
+ },
+ {
+ entity: "PrecedesEqual;",
+ value: "U+02AAF"
+ },
+ {
+ entity: "PrecedesSlantEqual;",
+ value: "U+0227C"
+ },
+ {
+ entity: "PrecedesTilde;",
+ value: "U+0227E"
+ },
+ {
+ entity: "Prime;",
+ value: "U+02033"
+ },
+ {
+ entity: "Product;",
+ value: "U+0220F"
+ },
+ {
+ entity: "Proportion;",
+ value: "U+02237"
+ },
+ {
+ entity: "Proportional;",
+ value: "U+0221D"
+ },
+ {
+ entity: "Pscr;",
+ value: "U+1D4AB"
+ },
+ {
+ entity: "Psi;",
+ value: "U+003A8"
+ },
+ {
+ entity: "QUOT;",
+ value: "U+00022"
+ },
+ {
+ entity: "QUOT",
+ value: "U+00022"
+ },
+ {
+ entity: "Qfr;",
+ value: "U+1D514"
+ },
+ {
+ entity: "Qopf;",
+ value: "U+0211A"
+ },
+ {
+ entity: "Qscr;",
+ value: "U+1D4AC"
+ },
+ {
+ entity: "RBarr;",
+ value: "U+02910"
+ },
+ {
+ entity: "REG;",
+ value: "U+000AE"
+ },
+ {
+ entity: "REG",
+ value: "U+000AE"
+ },
+ {
+ entity: "Racute;",
+ value: "U+00154"
+ },
+ {
+ entity: "Rang;",
+ value: "U+027EB"
+ },
+ {
+ entity: "Rarr;",
+ value: "U+021A0"
+ },
+ {
+ entity: "Rarrtl;",
+ value: "U+02916"
+ },
+ {
+ entity: "Rcaron;",
+ value: "U+00158"
+ },
+ {
+ entity: "Rcedil;",
+ value: "U+00156"
+ },
+ {
+ entity: "Rcy;",
+ value: "U+00420"
+ },
+ {
+ entity: "Re;",
+ value: "U+0211C"
+ },
+ {
+ entity: "ReverseElement;",
+ value: "U+0220B"
+ },
+ {
+ entity: "ReverseEquilibrium;",
+ value: "U+021CB"
+ },
+ {
+ entity: "ReverseUpEquilibrium;",
+ value: "U+0296F"
+ },
+ {
+ entity: "Rfr;",
+ value: "U+0211C"
+ },
+ {
+ entity: "Rho;",
+ value: "U+003A1"
+ },
+ {
+ entity: "RightAngleBracket;",
+ value: "U+027E9"
+ },
+ {
+ entity: "RightArrow;",
+ value: "U+02192"
+ },
+ {
+ entity: "RightArrowBar;",
+ value: "U+021E5"
+ },
+ {
+ entity: "RightArrowLeftArrow;",
+ value: "U+021C4"
+ },
+ {
+ entity: "RightCeiling;",
+ value: "U+02309"
+ },
+ {
+ entity: "RightDoubleBracket;",
+ value: "U+027E7"
+ },
+ {
+ entity: "RightDownTeeVector;",
+ value: "U+0295D"
+ },
+ {
+ entity: "RightDownVector;",
+ value: "U+021C2"
+ },
+ {
+ entity: "RightDownVectorBar;",
+ value: "U+02955"
+ },
+ {
+ entity: "RightFloor;",
+ value: "U+0230B"
+ },
+ {
+ entity: "RightTee;",
+ value: "U+022A2"
+ },
+ {
+ entity: "RightTeeArrow;",
+ value: "U+021A6"
+ },
+ {
+ entity: "RightTeeVector;",
+ value: "U+0295B"
+ },
+ {
+ entity: "RightTriangle;",
+ value: "U+022B3"
+ },
+ {
+ entity: "RightTriangleBar;",
+ value: "U+029D0"
+ },
+ {
+ entity: "RightTriangleEqual;",
+ value: "U+022B5"
+ },
+ {
+ entity: "RightUpDownVector;",
+ value: "U+0294F"
+ },
+ {
+ entity: "RightUpTeeVector;",
+ value: "U+0295C"
+ },
+ {
+ entity: "RightUpVector;",
+ value: "U+021BE"
+ },
+ {
+ entity: "RightUpVectorBar;",
+ value: "U+02954"
+ },
+ {
+ entity: "RightVector;",
+ value: "U+021C0"
+ },
+ {
+ entity: "RightVectorBar;",
+ value: "U+02953"
+ },
+ {
+ entity: "Rightarrow;",
+ value: "U+021D2"
+ },
+ {
+ entity: "Ropf;",
+ value: "U+0211D"
+ },
+ {
+ entity: "RoundImplies;",
+ value: "U+02970"
+ },
+ {
+ entity: "Rrightarrow;",
+ value: "U+021DB"
+ },
+ {
+ entity: "Rscr;",
+ value: "U+0211B"
+ },
+ {
+ entity: "Rsh;",
+ value: "U+021B1"
+ },
+ {
+ entity: "RuleDelayed;",
+ value: "U+029F4"
+ },
+ {
+ entity: "SHCHcy;",
+ value: "U+00429"
+ },
+ {
+ entity: "SHcy;",
+ value: "U+00428"
+ },
+ {
+ entity: "SOFTcy;",
+ value: "U+0042C"
+ },
+ {
+ entity: "Sacute;",
+ value: "U+0015A"
+ },
+ {
+ entity: "Sc;",
+ value: "U+02ABC"
+ },
+ {
+ entity: "Scaron;",
+ value: "U+00160"
+ },
+ {
+ entity: "Scedil;",
+ value: "U+0015E"
+ },
+ {
+ entity: "Scirc;",
+ value: "U+0015C"
+ },
+ {
+ entity: "Scy;",
+ value: "U+00421"
+ },
+ {
+ entity: "Sfr;",
+ value: "U+1D516"
+ },
+ {
+ entity: "ShortDownArrow;",
+ value: "U+02193"
+ },
+ {
+ entity: "ShortLeftArrow;",
+ value: "U+02190"
+ },
+ {
+ entity: "ShortRightArrow;",
+ value: "U+02192"
+ },
+ {
+ entity: "ShortUpArrow;",
+ value: "U+02191"
+ },
+ {
+ entity: "Sigma;",
+ value: "U+003A3"
+ },
+ {
+ entity: "SmallCircle;",
+ value: "U+02218"
+ },
+ {
+ entity: "Sopf;",
+ value: "U+1D54A"
+ },
+ {
+ entity: "Sqrt;",
+ value: "U+0221A"
+ },
+ {
+ entity: "Square;",
+ value: "U+025A1"
+ },
+ {
+ entity: "SquareIntersection;",
+ value: "U+02293"
+ },
+ {
+ entity: "SquareSubset;",
+ value: "U+0228F"
+ },
+ {
+ entity: "SquareSubsetEqual;",
+ value: "U+02291"
+ },
+ {
+ entity: "SquareSuperset;",
+ value: "U+02290"
+ },
+ {
+ entity: "SquareSupersetEqual;",
+ value: "U+02292"
+ },
+ {
+ entity: "SquareUnion;",
+ value: "U+02294"
+ },
+ {
+ entity: "Sscr;",
+ value: "U+1D4AE"
+ },
+ {
+ entity: "Star;",
+ value: "U+022C6"
+ },
+ {
+ entity: "Sub;",
+ value: "U+022D0"
+ },
+ {
+ entity: "Subset;",
+ value: "U+022D0"
+ },
+ {
+ entity: "SubsetEqual;",
+ value: "U+02286"
+ },
+ {
+ entity: "Succeeds;",
+ value: "U+0227B"
+ },
+ {
+ entity: "SucceedsEqual;",
+ value: "U+02AB0"
+ },
+ {
+ entity: "SucceedsSlantEqual;",
+ value: "U+0227D"
+ },
+ {
+ entity: "SucceedsTilde;",
+ value: "U+0227F"
+ },
+ {
+ entity: "SuchThat;",
+ value: "U+0220B"
+ },
+ {
+ entity: "Sum;",
+ value: "U+02211"
+ },
+ {
+ entity: "Sup;",
+ value: "U+022D1"
+ },
+ {
+ entity: "Superset;",
+ value: "U+02283"
+ },
+ {
+ entity: "SupersetEqual;",
+ value: "U+02287"
+ },
+ {
+ entity: "Supset;",
+ value: "U+022D1"
+ },
+ {
+ entity: "THORN;",
+ value: "U+000DE"
+ },
+ {
+ entity: "THORN",
+ value: "U+000DE"
+ },
+ {
+ entity: "TRADE;",
+ value: "U+02122"
+ },
+ {
+ entity: "TSHcy;",
+ value: "U+0040B"
+ },
+ {
+ entity: "TScy;",
+ value: "U+00426"
+ },
+ {
+ entity: "Tab;",
+ value: "U+00009"
+ },
+ {
+ entity: "Tau;",
+ value: "U+003A4"
+ },
+ {
+ entity: "Tcaron;",
+ value: "U+00164"
+ },
+ {
+ entity: "Tcedil;",
+ value: "U+00162"
+ },
+ {
+ entity: "Tcy;",
+ value: "U+00422"
+ },
+ {
+ entity: "Tfr;",
+ value: "U+1D517"
+ },
+ {
+ entity: "Therefore;",
+ value: "U+02234"
+ },
+ {
+ entity: "Theta;",
+ value: "U+00398"
+ },
+ {
+ entity: "ThinSpace;",
+ value: "U+02009"
+ },
+ {
+ entity: "Tilde;",
+ value: "U+0223C"
+ },
+ {
+ entity: "TildeEqual;",
+ value: "U+02243"
+ },
+ {
+ entity: "TildeFullEqual;",
+ value: "U+02245"
+ },
+ {
+ entity: "TildeTilde;",
+ value: "U+02248"
+ },
+ {
+ entity: "Topf;",
+ value: "U+1D54B"
+ },
+ {
+ entity: "TripleDot;",
+ value: "U+020DB"
+ },
+ {
+ entity: "Tscr;",
+ value: "U+1D4AF"
+ },
+ {
+ entity: "Tstrok;",
+ value: "U+00166"
+ },
+ {
+ entity: "Uacute;",
+ value: "U+000DA"
+ },
+ {
+ entity: "Uacute",
+ value: "U+000DA"
+ },
+ {
+ entity: "Uarr;",
+ value: "U+0219F"
+ },
+ {
+ entity: "Uarrocir;",
+ value: "U+02949"
+ },
+ {
+ entity: "Ubrcy;",
+ value: "U+0040E"
+ },
+ {
+ entity: "Ubreve;",
+ value: "U+0016C"
+ },
+ {
+ entity: "Ucirc;",
+ value: "U+000DB"
+ },
+ {
+ entity: "Ucirc",
+ value: "U+000DB"
+ },
+ {
+ entity: "Ucy;",
+ value: "U+00423"
+ },
+ {
+ entity: "Udblac;",
+ value: "U+00170"
+ },
+ {
+ entity: "Ufr;",
+ value: "U+1D518"
+ },
+ {
+ entity: "Ugrave;",
+ value: "U+000D9"
+ },
+ {
+ entity: "Ugrave",
+ value: "U+000D9"
+ },
+ {
+ entity: "Umacr;",
+ value: "U+0016A"
+ },
+ {
+ entity: "UnderBar;",
+ value: "U+0005F"
+ },
+ {
+ entity: "UnderBrace;",
+ value: "U+023DF"
+ },
+ {
+ entity: "UnderBracket;",
+ value: "U+023B5"
+ },
+ {
+ entity: "UnderParenthesis;",
+ value: "U+023DD"
+ },
+ {
+ entity: "Union;",
+ value: "U+022C3"
+ },
+ {
+ entity: "UnionPlus;",
+ value: "U+0228E"
+ },
+ {
+ entity: "Uogon;",
+ value: "U+00172"
+ },
+ {
+ entity: "Uopf;",
+ value: "U+1D54C"
+ },
+ {
+ entity: "UpArrow;",
+ value: "U+02191"
+ },
+ {
+ entity: "UpArrowBar;",
+ value: "U+02912"
+ },
+ {
+ entity: "UpArrowDownArrow;",
+ value: "U+021C5"
+ },
+ {
+ entity: "UpDownArrow;",
+ value: "U+02195"
+ },
+ {
+ entity: "UpEquilibrium;",
+ value: "U+0296E"
+ },
+ {
+ entity: "UpTee;",
+ value: "U+022A5"
+ },
+ {
+ entity: "UpTeeArrow;",
+ value: "U+021A5"
+ },
+ {
+ entity: "Uparrow;",
+ value: "U+021D1"
+ },
+ {
+ entity: "Updownarrow;",
+ value: "U+021D5"
+ },
+ {
+ entity: "UpperLeftArrow;",
+ value: "U+02196"
+ },
+ {
+ entity: "UpperRightArrow;",
+ value: "U+02197"
+ },
+ {
+ entity: "Upsi;",
+ value: "U+003D2"
+ },
+ {
+ entity: "Upsilon;",
+ value: "U+003A5"
+ },
+ {
+ entity: "Uring;",
+ value: "U+0016E"
+ },
+ {
+ entity: "Uscr;",
+ value: "U+1D4B0"
+ },
+ {
+ entity: "Utilde;",
+ value: "U+00168"
+ },
+ {
+ entity: "Uuml;",
+ value: "U+000DC"
+ },
+ {
+ entity: "Uuml",
+ value: "U+000DC"
+ },
+ {
+ entity: "VDash;",
+ value: "U+022AB"
+ },
+ {
+ entity: "Vbar;",
+ value: "U+02AEB"
+ },
+ {
+ entity: "Vcy;",
+ value: "U+00412"
+ },
+ {
+ entity: "Vdash;",
+ value: "U+022A9"
+ },
+ {
+ entity: "Vdashl;",
+ value: "U+02AE6"
+ },
+ {
+ entity: "Vee;",
+ value: "U+022C1"
+ },
+ {
+ entity: "Verbar;",
+ value: "U+02016"
+ },
+ {
+ entity: "Vert;",
+ value: "U+02016"
+ },
+ {
+ entity: "VerticalBar;",
+ value: "U+02223"
+ },
+ {
+ entity: "VerticalLine;",
+ value: "U+0007C"
+ },
+ {
+ entity: "VerticalSeparator;",
+ value: "U+02758"
+ },
+ {
+ entity: "VerticalTilde;",
+ value: "U+02240"
+ },
+ {
+ entity: "VeryThinSpace;",
+ value: "U+0200A"
+ },
+ {
+ entity: "Vfr;",
+ value: "U+1D519"
+ },
+ {
+ entity: "Vopf;",
+ value: "U+1D54D"
+ },
+ {
+ entity: "Vscr;",
+ value: "U+1D4B1"
+ },
+ {
+ entity: "Vvdash;",
+ value: "U+022AA"
+ },
+ {
+ entity: "Wcirc;",
+ value: "U+00174"
+ },
+ {
+ entity: "Wedge;",
+ value: "U+022C0"
+ },
+ {
+ entity: "Wfr;",
+ value: "U+1D51A"
+ },
+ {
+ entity: "Wopf;",
+ value: "U+1D54E"
+ },
+ {
+ entity: "Wscr;",
+ value: "U+1D4B2"
+ },
+ {
+ entity: "Xfr;",
+ value: "U+1D51B"
+ },
+ {
+ entity: "Xi;",
+ value: "U+0039E"
+ },
+ {
+ entity: "Xopf;",
+ value: "U+1D54F"
+ },
+ {
+ entity: "Xscr;",
+ value: "U+1D4B3"
+ },
+ {
+ entity: "YAcy;",
+ value: "U+0042F"
+ },
+ {
+ entity: "YIcy;",
+ value: "U+00407"
+ },
+ {
+ entity: "YUcy;",
+ value: "U+0042E"
+ },
+ {
+ entity: "Yacute;",
+ value: "U+000DD"
+ },
+ {
+ entity: "Yacute",
+ value: "U+000DD"
+ },
+ {
+ entity: "Ycirc;",
+ value: "U+00176"
+ },
+ {
+ entity: "Ycy;",
+ value: "U+0042B"
+ },
+ {
+ entity: "Yfr;",
+ value: "U+1D51C"
+ },
+ {
+ entity: "Yopf;",
+ value: "U+1D550"
+ },
+ {
+ entity: "Yscr;",
+ value: "U+1D4B4"
+ },
+ {
+ entity: "Yuml;",
+ value: "U+00178"
+ },
+ {
+ entity: "ZHcy;",
+ value: "U+00416"
+ },
+ {
+ entity: "Zacute;",
+ value: "U+00179"
+ },
+ {
+ entity: "Zcaron;",
+ value: "U+0017D"
+ },
+ {
+ entity: "Zcy;",
+ value: "U+00417"
+ },
+ {
+ entity: "Zdot;",
+ value: "U+0017B"
+ },
+ {
+ entity: "ZeroWidthSpace;",
+ value: "U+0200B"
+ },
+ {
+ entity: "Zeta;",
+ value: "U+00396"
+ },
+ {
+ entity: "Zfr;",
+ value: "U+02128"
+ },
+ {
+ entity: "Zopf;",
+ value: "U+02124"
+ },
+ {
+ entity: "Zscr;",
+ value: "U+1D4B5"
+ },
+ {
+ entity: "aacute;",
+ value: "U+000E1"
+ },
+ {
+ entity: "aacute",
+ value: "U+000E1"
+ },
+ {
+ entity: "abreve;",
+ value: "U+00103"
+ },
+ {
+ entity: "ac;",
+ value: "U+0223E"
+ },
+ {
+ entity: "acd;",
+ value: "U+0223F"
+ },
+ {
+ entity: "acirc;",
+ value: "U+000E2"
+ },
+ {
+ entity: "acirc",
+ value: "U+000E2"
+ },
+ {
+ entity: "acute;",
+ value: "U+000B4"
+ },
+ {
+ entity: "acute",
+ value: "U+000B4"
+ },
+ {
+ entity: "acy;",
+ value: "U+00430"
+ },
+ {
+ entity: "aelig;",
+ value: "U+000E6"
+ },
+ {
+ entity: "aelig",
+ value: "U+000E6"
+ },
+ {
+ entity: "af;",
+ value: "U+02061"
+ },
+ {
+ entity: "afr;",
+ value: "U+1D51E"
+ },
+ {
+ entity: "agrave;",
+ value: "U+000E0"
+ },
+ {
+ entity: "agrave",
+ value: "U+000E0"
+ },
+ {
+ entity: "alefsym;",
+ value: "U+02135"
+ },
+ {
+ entity: "aleph;",
+ value: "U+02135"
+ },
+ {
+ entity: "alpha;",
+ value: "U+003B1"
+ },
+ {
+ entity: "amacr;",
+ value: "U+00101"
+ },
+ {
+ entity: "amalg;",
+ value: "U+02A3F"
+ },
+ {
+ entity: "amp;",
+ value: "U+00026"
+ },
+ {
+ entity: "amp",
+ value: "U+00026"
+ },
+ {
+ entity: "and;",
+ value: "U+02227"
+ },
+ {
+ entity: "andand;",
+ value: "U+02A55"
+ },
+ {
+ entity: "andd;",
+ value: "U+02A5C"
+ },
+ {
+ entity: "andslope;",
+ value: "U+02A58"
+ },
+ {
+ entity: "andv;",
+ value: "U+02A5A"
+ },
+ {
+ entity: "ang;",
+ value: "U+02220"
+ },
+ {
+ entity: "ange;",
+ value: "U+029A4"
+ },
+ {
+ entity: "angle;",
+ value: "U+02220"
+ },
+ {
+ entity: "angmsd;",
+ value: "U+02221"
+ },
+ {
+ entity: "angmsdaa;",
+ value: "U+029A8"
+ },
+ {
+ entity: "angmsdab;",
+ value: "U+029A9"
+ },
+ {
+ entity: "angmsdac;",
+ value: "U+029AA"
+ },
+ {
+ entity: "angmsdad;",
+ value: "U+029AB"
+ },
+ {
+ entity: "angmsdae;",
+ value: "U+029AC"
+ },
+ {
+ entity: "angmsdaf;",
+ value: "U+029AD"
+ },
+ {
+ entity: "angmsdag;",
+ value: "U+029AE"
+ },
+ {
+ entity: "angmsdah;",
+ value: "U+029AF"
+ },
+ {
+ entity: "angrt;",
+ value: "U+0221F"
+ },
+ {
+ entity: "angrtvb;",
+ value: "U+022BE"
+ },
+ {
+ entity: "angrtvbd;",
+ value: "U+0299D"
+ },
+ {
+ entity: "angsph;",
+ value: "U+02222"
+ },
+ {
+ entity: "angst;",
+ value: "U+000C5"
+ },
+ {
+ entity: "angzarr;",
+ value: "U+0237C"
+ },
+ {
+ entity: "aogon;",
+ value: "U+00105"
+ },
+ {
+ entity: "aopf;",
+ value: "U+1D552"
+ },
+ {
+ entity: "ap;",
+ value: "U+02248"
+ },
+ {
+ entity: "apE;",
+ value: "U+02A70"
+ },
+ {
+ entity: "apacir;",
+ value: "U+02A6F"
+ },
+ {
+ entity: "ape;",
+ value: "U+0224A"
+ },
+ {
+ entity: "apid;",
+ value: "U+0224B"
+ },
+ {
+ entity: "apos;",
+ value: "U+00027"
+ },
+ {
+ entity: "approx;",
+ value: "U+02248"
+ },
+ {
+ entity: "approxeq;",
+ value: "U+0224A"
+ },
+ {
+ entity: "aring;",
+ value: "U+000E5"
+ },
+ {
+ entity: "aring",
+ value: "U+000E5"
+ },
+ {
+ entity: "ascr;",
+ value: "U+1D4B6"
+ },
+ {
+ entity: "ast;",
+ value: "U+0002A"
+ },
+ {
+ entity: "asymp;",
+ value: "U+02248"
+ },
+ {
+ entity: "asympeq;",
+ value: "U+0224D"
+ },
+ {
+ entity: "atilde;",
+ value: "U+000E3"
+ },
+ {
+ entity: "atilde",
+ value: "U+000E3"
+ },
+ {
+ entity: "auml;",
+ value: "U+000E4"
+ },
+ {
+ entity: "auml",
+ value: "U+000E4"
+ },
+ {
+ entity: "awconint;",
+ value: "U+02233"
+ },
+ {
+ entity: "awint;",
+ value: "U+02A11"
+ },
+ {
+ entity: "bNot;",
+ value: "U+02AED"
+ },
+ {
+ entity: "backcong;",
+ value: "U+0224C"
+ },
+ {
+ entity: "backepsilon;",
+ value: "U+003F6"
+ },
+ {
+ entity: "backprime;",
+ value: "U+02035"
+ },
+ {
+ entity: "backsim;",
+ value: "U+0223D"
+ },
+ {
+ entity: "backsimeq;",
+ value: "U+022CD"
+ },
+ {
+ entity: "barvee;",
+ value: "U+022BD"
+ },
+ {
+ entity: "barwed;",
+ value: "U+02305"
+ },
+ {
+ entity: "barwedge;",
+ value: "U+02305"
+ },
+ {
+ entity: "bbrk;",
+ value: "U+023B5"
+ },
+ {
+ entity: "bbrktbrk;",
+ value: "U+023B6"
+ },
+ {
+ entity: "bcong;",
+ value: "U+0224C"
+ },
+ {
+ entity: "bcy;",
+ value: "U+00431"
+ },
+ {
+ entity: "bdquo;",
+ value: "U+0201E"
+ },
+ {
+ entity: "becaus;",
+ value: "U+02235"
+ },
+ {
+ entity: "because;",
+ value: "U+02235"
+ },
+ {
+ entity: "bemptyv;",
+ value: "U+029B0"
+ },
+ {
+ entity: "bepsi;",
+ value: "U+003F6"
+ },
+ {
+ entity: "bernou;",
+ value: "U+0212C"
+ },
+ {
+ entity: "beta;",
+ value: "U+003B2"
+ },
+ {
+ entity: "beth;",
+ value: "U+02136"
+ },
+ {
+ entity: "between;",
+ value: "U+0226C"
+ },
+ {
+ entity: "bfr;",
+ value: "U+1D51F"
+ },
+ {
+ entity: "bigcap;",
+ value: "U+022C2"
+ },
+ {
+ entity: "bigcirc;",
+ value: "U+025EF"
+ },
+ {
+ entity: "bigcup;",
+ value: "U+022C3"
+ },
+ {
+ entity: "bigodot;",
+ value: "U+02A00"
+ },
+ {
+ entity: "bigoplus;",
+ value: "U+02A01"
+ },
+ {
+ entity: "bigotimes;",
+ value: "U+02A02"
+ },
+ {
+ entity: "bigsqcup;",
+ value: "U+02A06"
+ },
+ {
+ entity: "bigstar;",
+ value: "U+02605"
+ },
+ {
+ entity: "bigtriangledown;",
+ value: "U+025BD"
+ },
+ {
+ entity: "bigtriangleup;",
+ value: "U+025B3"
+ },
+ {
+ entity: "biguplus;",
+ value: "U+02A04"
+ },
+ {
+ entity: "bigvee;",
+ value: "U+022C1"
+ },
+ {
+ entity: "bigwedge;",
+ value: "U+022C0"
+ },
+ {
+ entity: "bkarow;",
+ value: "U+0290D"
+ },
+ {
+ entity: "blacklozenge;",
+ value: "U+029EB"
+ },
+ {
+ entity: "blacksquare;",
+ value: "U+025AA"
+ },
+ {
+ entity: "blacktriangle;",
+ value: "U+025B4"
+ },
+ {
+ entity: "blacktriangledown;",
+ value: "U+025BE"
+ },
+ {
+ entity: "blacktriangleleft;",
+ value: "U+025C2"
+ },
+ {
+ entity: "blacktriangleright;",
+ value: "U+025B8"
+ },
+ {
+ entity: "blank;",
+ value: "U+02423"
+ },
+ {
+ entity: "blk12;",
+ value: "U+02592"
+ },
+ {
+ entity: "blk14;",
+ value: "U+02591"
+ },
+ {
+ entity: "blk34;",
+ value: "U+02593"
+ },
+ {
+ entity: "block;",
+ value: "U+02588"
+ },
+ {
+ entity: "bnot;",
+ value: "U+02310"
+ },
+ {
+ entity: "bopf;",
+ value: "U+1D553"
+ },
+ {
+ entity: "bot;",
+ value: "U+022A5"
+ },
+ {
+ entity: "bottom;",
+ value: "U+022A5"
+ },
+ {
+ entity: "bowtie;",
+ value: "U+022C8"
+ },
+ {
+ entity: "boxDL;",
+ value: "U+02557"
+ },
+ {
+ entity: "boxDR;",
+ value: "U+02554"
+ },
+ {
+ entity: "boxDl;",
+ value: "U+02556"
+ },
+ {
+ entity: "boxDr;",
+ value: "U+02553"
+ },
+ {
+ entity: "boxH;",
+ value: "U+02550"
+ },
+ {
+ entity: "boxHD;",
+ value: "U+02566"
+ },
+ {
+ entity: "boxHU;",
+ value: "U+02569"
+ },
+ {
+ entity: "boxHd;",
+ value: "U+02564"
+ },
+ {
+ entity: "boxHu;",
+ value: "U+02567"
+ },
+ {
+ entity: "boxUL;",
+ value: "U+0255D"
+ },
+ {
+ entity: "boxUR;",
+ value: "U+0255A"
+ },
+ {
+ entity: "boxUl;",
+ value: "U+0255C"
+ },
+ {
+ entity: "boxUr;",
+ value: "U+02559"
+ },
+ {
+ entity: "boxV;",
+ value: "U+02551"
+ },
+ {
+ entity: "boxVH;",
+ value: "U+0256C"
+ },
+ {
+ entity: "boxVL;",
+ value: "U+02563"
+ },
+ {
+ entity: "boxVR;",
+ value: "U+02560"
+ },
+ {
+ entity: "boxVh;",
+ value: "U+0256B"
+ },
+ {
+ entity: "boxVl;",
+ value: "U+02562"
+ },
+ {
+ entity: "boxVr;",
+ value: "U+0255F"
+ },
+ {
+ entity: "boxbox;",
+ value: "U+029C9"
+ },
+ {
+ entity: "boxdL;",
+ value: "U+02555"
+ },
+ {
+ entity: "boxdR;",
+ value: "U+02552"
+ },
+ {
+ entity: "boxdl;",
+ value: "U+02510"
+ },
+ {
+ entity: "boxdr;",
+ value: "U+0250C"
+ },
+ {
+ entity: "boxh;",
+ value: "U+02500"
+ },
+ {
+ entity: "boxhD;",
+ value: "U+02565"
+ },
+ {
+ entity: "boxhU;",
+ value: "U+02568"
+ },
+ {
+ entity: "boxhd;",
+ value: "U+0252C"
+ },
+ {
+ entity: "boxhu;",
+ value: "U+02534"
+ },
+ {
+ entity: "boxminus;",
+ value: "U+0229F"
+ },
+ {
+ entity: "boxplus;",
+ value: "U+0229E"
+ },
+ {
+ entity: "boxtimes;",
+ value: "U+022A0"
+ },
+ {
+ entity: "boxuL;",
+ value: "U+0255B"
+ },
+ {
+ entity: "boxuR;",
+ value: "U+02558"
+ },
+ {
+ entity: "boxul;",
+ value: "U+02518"
+ },
+ {
+ entity: "boxur;",
+ value: "U+02514"
+ },
+ {
+ entity: "boxv;",
+ value: "U+02502"
+ },
+ {
+ entity: "boxvH;",
+ value: "U+0256A"
+ },
+ {
+ entity: "boxvL;",
+ value: "U+02561"
+ },
+ {
+ entity: "boxvR;",
+ value: "U+0255E"
+ },
+ {
+ entity: "boxvh;",
+ value: "U+0253C"
+ },
+ {
+ entity: "boxvl;",
+ value: "U+02524"
+ },
+ {
+ entity: "boxvr;",
+ value: "U+0251C"
+ },
+ {
+ entity: "bprime;",
+ value: "U+02035"
+ },
+ {
+ entity: "breve;",
+ value: "U+002D8"
+ },
+ {
+ entity: "brvbar;",
+ value: "U+000A6"
+ },
+ {
+ entity: "brvbar",
+ value: "U+000A6"
+ },
+ {
+ entity: "bscr;",
+ value: "U+1D4B7"
+ },
+ {
+ entity: "bsemi;",
+ value: "U+0204F"
+ },
+ {
+ entity: "bsim;",
+ value: "U+0223D"
+ },
+ {
+ entity: "bsime;",
+ value: "U+022CD"
+ },
+ {
+ entity: "bsol;",
+ value: "U+0005C"
+ },
+ {
+ entity: "bsolb;",
+ value: "U+029C5"
+ },
+ {
+ entity: "bsolhsub;",
+ value: "U+027C8"
+ },
+ {
+ entity: "bull;",
+ value: "U+02022"
+ },
+ {
+ entity: "bullet;",
+ value: "U+02022"
+ },
+ {
+ entity: "bump;",
+ value: "U+0224E"
+ },
+ {
+ entity: "bumpE;",
+ value: "U+02AAE"
+ },
+ {
+ entity: "bumpe;",
+ value: "U+0224F"
+ },
+ {
+ entity: "bumpeq;",
+ value: "U+0224F"
+ },
+ {
+ entity: "cacute;",
+ value: "U+00107"
+ },
+ {
+ entity: "cap;",
+ value: "U+02229"
+ },
+ {
+ entity: "capand;",
+ value: "U+02A44"
+ },
+ {
+ entity: "capbrcup;",
+ value: "U+02A49"
+ },
+ {
+ entity: "capcap;",
+ value: "U+02A4B"
+ },
+ {
+ entity: "capcup;",
+ value: "U+02A47"
+ },
+ {
+ entity: "capdot;",
+ value: "U+02A40"
+ },
+ {
+ entity: "caret;",
+ value: "U+02041"
+ },
+ {
+ entity: "caron;",
+ value: "U+002C7"
+ },
+ {
+ entity: "ccaps;",
+ value: "U+02A4D"
+ },
+ {
+ entity: "ccaron;",
+ value: "U+0010D"
+ },
+ {
+ entity: "ccedil;",
+ value: "U+000E7"
+ },
+ {
+ entity: "ccedil",
+ value: "U+000E7"
+ },
+ {
+ entity: "ccirc;",
+ value: "U+00109"
+ },
+ {
+ entity: "ccups;",
+ value: "U+02A4C"
+ },
+ {
+ entity: "ccupssm;",
+ value: "U+02A50"
+ },
+ {
+ entity: "cdot;",
+ value: "U+0010B"
+ },
+ {
+ entity: "cedil;",
+ value: "U+000B8"
+ },
+ {
+ entity: "cedil",
+ value: "U+000B8"
+ },
+ {
+ entity: "cemptyv;",
+ value: "U+029B2"
+ },
+ {
+ entity: "cent;",
+ value: "U+000A2"
+ },
+ {
+ entity: "cent",
+ value: "U+000A2"
+ },
+ {
+ entity: "centerdot;",
+ value: "U+000B7"
+ },
+ {
+ entity: "cfr;",
+ value: "U+1D520"
+ },
+ {
+ entity: "chcy;",
+ value: "U+00447"
+ },
+ {
+ entity: "check;",
+ value: "U+02713"
+ },
+ {
+ entity: "checkmark;",
+ value: "U+02713"
+ },
+ {
+ entity: "chi;",
+ value: "U+003C7"
+ },
+ {
+ entity: "cir;",
+ value: "U+025CB"
+ },
+ {
+ entity: "cirE;",
+ value: "U+029C3"
+ },
+ {
+ entity: "circ;",
+ value: "U+002C6"
+ },
+ {
+ entity: "circeq;",
+ value: "U+02257"
+ },
+ {
+ entity: "circlearrowleft;",
+ value: "U+021BA"
+ },
+ {
+ entity: "circlearrowright;",
+ value: "U+021BB"
+ },
+ {
+ entity: "circledR;",
+ value: "U+000AE"
+ },
+ {
+ entity: "circledS;",
+ value: "U+024C8"
+ },
+ {
+ entity: "circledast;",
+ value: "U+0229B"
+ },
+ {
+ entity: "circledcirc;",
+ value: "U+0229A"
+ },
+ {
+ entity: "circleddash;",
+ value: "U+0229D"
+ },
+ {
+ entity: "cire;",
+ value: "U+02257"
+ },
+ {
+ entity: "cirfnint;",
+ value: "U+02A10"
+ },
+ {
+ entity: "cirmid;",
+ value: "U+02AEF"
+ },
+ {
+ entity: "cirscir;",
+ value: "U+029C2"
+ },
+ {
+ entity: "clubs;",
+ value: "U+02663"
+ },
+ {
+ entity: "clubsuit;",
+ value: "U+02663"
+ },
+ {
+ entity: "colon;",
+ value: "U+0003A"
+ },
+ {
+ entity: "colone;",
+ value: "U+02254"
+ },
+ {
+ entity: "coloneq;",
+ value: "U+02254"
+ },
+ {
+ entity: "comma;",
+ value: "U+0002C"
+ },
+ {
+ entity: "commat;",
+ value: "U+00040"
+ },
+ {
+ entity: "comp;",
+ value: "U+02201"
+ },
+ {
+ entity: "compfn;",
+ value: "U+02218"
+ },
+ {
+ entity: "complement;",
+ value: "U+02201"
+ },
+ {
+ entity: "complexes;",
+ value: "U+02102"
+ },
+ {
+ entity: "cong;",
+ value: "U+02245"
+ },
+ {
+ entity: "congdot;",
+ value: "U+02A6D"
+ },
+ {
+ entity: "conint;",
+ value: "U+0222E"
+ },
+ {
+ entity: "copf;",
+ value: "U+1D554"
+ },
+ {
+ entity: "coprod;",
+ value: "U+02210"
+ },
+ {
+ entity: "copy;",
+ value: "U+000A9"
+ },
+ {
+ entity: "copy",
+ value: "U+000A9"
+ },
+ {
+ entity: "copysr;",
+ value: "U+02117"
+ },
+ {
+ entity: "crarr;",
+ value: "U+021B5"
+ },
+ {
+ entity: "cross;",
+ value: "U+02717"
+ },
+ {
+ entity: "cscr;",
+ value: "U+1D4B8"
+ },
+ {
+ entity: "csub;",
+ value: "U+02ACF"
+ },
+ {
+ entity: "csube;",
+ value: "U+02AD1"
+ },
+ {
+ entity: "csup;",
+ value: "U+02AD0"
+ },
+ {
+ entity: "csupe;",
+ value: "U+02AD2"
+ },
+ {
+ entity: "ctdot;",
+ value: "U+022EF"
+ },
+ {
+ entity: "cudarrl;",
+ value: "U+02938"
+ },
+ {
+ entity: "cudarrr;",
+ value: "U+02935"
+ },
+ {
+ entity: "cuepr;",
+ value: "U+022DE"
+ },
+ {
+ entity: "cuesc;",
+ value: "U+022DF"
+ },
+ {
+ entity: "cularr;",
+ value: "U+021B6"
+ },
+ {
+ entity: "cularrp;",
+ value: "U+0293D"
+ },
+ {
+ entity: "cup;",
+ value: "U+0222A"
+ },
+ {
+ entity: "cupbrcap;",
+ value: "U+02A48"
+ },
+ {
+ entity: "cupcap;",
+ value: "U+02A46"
+ },
+ {
+ entity: "cupcup;",
+ value: "U+02A4A"
+ },
+ {
+ entity: "cupdot;",
+ value: "U+0228D"
+ },
+ {
+ entity: "cupor;",
+ value: "U+02A45"
+ },
+ {
+ entity: "curarr;",
+ value: "U+021B7"
+ },
+ {
+ entity: "curarrm;",
+ value: "U+0293C"
+ },
+ {
+ entity: "curlyeqprec;",
+ value: "U+022DE"
+ },
+ {
+ entity: "curlyeqsucc;",
+ value: "U+022DF"
+ },
+ {
+ entity: "curlyvee;",
+ value: "U+022CE"
+ },
+ {
+ entity: "curlywedge;",
+ value: "U+022CF"
+ },
+ {
+ entity: "curren;",
+ value: "U+000A4"
+ },
+ {
+ entity: "curren",
+ value: "U+000A4"
+ },
+ {
+ entity: "curvearrowleft;",
+ value: "U+021B6"
+ },
+ {
+ entity: "curvearrowright;",
+ value: "U+021B7"
+ },
+ {
+ entity: "cuvee;",
+ value: "U+022CE"
+ },
+ {
+ entity: "cuwed;",
+ value: "U+022CF"
+ },
+ {
+ entity: "cwconint;",
+ value: "U+02232"
+ },
+ {
+ entity: "cwint;",
+ value: "U+02231"
+ },
+ {
+ entity: "cylcty;",
+ value: "U+0232D"
+ },
+ {
+ entity: "dArr;",
+ value: "U+021D3"
+ },
+ {
+ entity: "dHar;",
+ value: "U+02965"
+ },
+ {
+ entity: "dagger;",
+ value: "U+02020"
+ },
+ {
+ entity: "daleth;",
+ value: "U+02138"
+ },
+ {
+ entity: "darr;",
+ value: "U+02193"
+ },
+ {
+ entity: "dash;",
+ value: "U+02010"
+ },
+ {
+ entity: "dashv;",
+ value: "U+022A3"
+ },
+ {
+ entity: "dbkarow;",
+ value: "U+0290F"
+ },
+ {
+ entity: "dblac;",
+ value: "U+002DD"
+ },
+ {
+ entity: "dcaron;",
+ value: "U+0010F"
+ },
+ {
+ entity: "dcy;",
+ value: "U+00434"
+ },
+ {
+ entity: "dd;",
+ value: "U+02146"
+ },
+ {
+ entity: "ddagger;",
+ value: "U+02021"
+ },
+ {
+ entity: "ddarr;",
+ value: "U+021CA"
+ },
+ {
+ entity: "ddotseq;",
+ value: "U+02A77"
+ },
+ {
+ entity: "deg;",
+ value: "U+000B0"
+ },
+ {
+ entity: "deg",
+ value: "U+000B0"
+ },
+ {
+ entity: "delta;",
+ value: "U+003B4"
+ },
+ {
+ entity: "demptyv;",
+ value: "U+029B1"
+ },
+ {
+ entity: "dfisht;",
+ value: "U+0297F"
+ },
+ {
+ entity: "dfr;",
+ value: "U+1D521"
+ },
+ {
+ entity: "dharl;",
+ value: "U+021C3"
+ },
+ {
+ entity: "dharr;",
+ value: "U+021C2"
+ },
+ {
+ entity: "diam;",
+ value: "U+022C4"
+ },
+ {
+ entity: "diamond;",
+ value: "U+022C4"
+ },
+ {
+ entity: "diamondsuit;",
+ value: "U+02666"
+ },
+ {
+ entity: "diams;",
+ value: "U+02666"
+ },
+ {
+ entity: "die;",
+ value: "U+000A8"
+ },
+ {
+ entity: "digamma;",
+ value: "U+003DD"
+ },
+ {
+ entity: "disin;",
+ value: "U+022F2"
+ },
+ {
+ entity: "div;",
+ value: "U+000F7"
+ },
+ {
+ entity: "divide;",
+ value: "U+000F7"
+ },
+ {
+ entity: "divide",
+ value: "U+000F7"
+ },
+ {
+ entity: "divideontimes;",
+ value: "U+022C7"
+ },
+ {
+ entity: "divonx;",
+ value: "U+022C7"
+ },
+ {
+ entity: "djcy;",
+ value: "U+00452"
+ },
+ {
+ entity: "dlcorn;",
+ value: "U+0231E"
+ },
+ {
+ entity: "dlcrop;",
+ value: "U+0230D"
+ },
+ {
+ entity: "dollar;",
+ value: "U+00024"
+ },
+ {
+ entity: "dopf;",
+ value: "U+1D555"
+ },
+ {
+ entity: "dot;",
+ value: "U+002D9"
+ },
+ {
+ entity: "doteq;",
+ value: "U+02250"
+ },
+ {
+ entity: "doteqdot;",
+ value: "U+02251"
+ },
+ {
+ entity: "dotminus;",
+ value: "U+02238"
+ },
+ {
+ entity: "dotplus;",
+ value: "U+02214"
+ },
+ {
+ entity: "dotsquare;",
+ value: "U+022A1"
+ },
+ {
+ entity: "doublebarwedge;",
+ value: "U+02306"
+ },
+ {
+ entity: "downarrow;",
+ value: "U+02193"
+ },
+ {
+ entity: "downdownarrows;",
+ value: "U+021CA"
+ },
+ {
+ entity: "downharpoonleft;",
+ value: "U+021C3"
+ },
+ {
+ entity: "downharpoonright;",
+ value: "U+021C2"
+ },
+ {
+ entity: "drbkarow;",
+ value: "U+02910"
+ },
+ {
+ entity: "drcorn;",
+ value: "U+0231F"
+ },
+ {
+ entity: "drcrop;",
+ value: "U+0230C"
+ },
+ {
+ entity: "dscr;",
+ value: "U+1D4B9"
+ },
+ {
+ entity: "dscy;",
+ value: "U+00455"
+ },
+ {
+ entity: "dsol;",
+ value: "U+029F6"
+ },
+ {
+ entity: "dstrok;",
+ value: "U+00111"
+ },
+ {
+ entity: "dtdot;",
+ value: "U+022F1"
+ },
+ {
+ entity: "dtri;",
+ value: "U+025BF"
+ },
+ {
+ entity: "dtrif;",
+ value: "U+025BE"
+ },
+ {
+ entity: "duarr;",
+ value: "U+021F5"
+ },
+ {
+ entity: "duhar;",
+ value: "U+0296F"
+ },
+ {
+ entity: "dwangle;",
+ value: "U+029A6"
+ },
+ {
+ entity: "dzcy;",
+ value: "U+0045F"
+ },
+ {
+ entity: "dzigrarr;",
+ value: "U+027FF"
+ },
+ {
+ entity: "eDDot;",
+ value: "U+02A77"
+ },
+ {
+ entity: "eDot;",
+ value: "U+02251"
+ },
+ {
+ entity: "eacute;",
+ value: "U+000E9"
+ },
+ {
+ entity: "eacute",
+ value: "U+000E9"
+ },
+ {
+ entity: "easter;",
+ value: "U+02A6E"
+ },
+ {
+ entity: "ecaron;",
+ value: "U+0011B"
+ },
+ {
+ entity: "ecir;",
+ value: "U+02256"
+ },
+ {
+ entity: "ecirc;",
+ value: "U+000EA"
+ },
+ {
+ entity: "ecirc",
+ value: "U+000EA"
+ },
+ {
+ entity: "ecolon;",
+ value: "U+02255"
+ },
+ {
+ entity: "ecy;",
+ value: "U+0044D"
+ },
+ {
+ entity: "edot;",
+ value: "U+00117"
+ },
+ {
+ entity: "ee;",
+ value: "U+02147"
+ },
+ {
+ entity: "efDot;",
+ value: "U+02252"
+ },
+ {
+ entity: "efr;",
+ value: "U+1D522"
+ },
+ {
+ entity: "eg;",
+ value: "U+02A9A"
+ },
+ {
+ entity: "egrave;",
+ value: "U+000E8"
+ },
+ {
+ entity: "egrave",
+ value: "U+000E8"
+ },
+ {
+ entity: "egs;",
+ value: "U+02A96"
+ },
+ {
+ entity: "egsdot;",
+ value: "U+02A98"
+ },
+ {
+ entity: "el;",
+ value: "U+02A99"
+ },
+ {
+ entity: "elinters;",
+ value: "U+023E7"
+ },
+ {
+ entity: "ell;",
+ value: "U+02113"
+ },
+ {
+ entity: "els;",
+ value: "U+02A95"
+ },
+ {
+ entity: "elsdot;",
+ value: "U+02A97"
+ },
+ {
+ entity: "emacr;",
+ value: "U+00113"
+ },
+ {
+ entity: "empty;",
+ value: "U+02205"
+ },
+ {
+ entity: "emptyset;",
+ value: "U+02205"
+ },
+ {
+ entity: "emptyv;",
+ value: "U+02205"
+ },
+ {
+ entity: "emsp13;",
+ value: "U+02004"
+ },
+ {
+ entity: "emsp14;",
+ value: "U+02005"
+ },
+ {
+ entity: "emsp;",
+ value: "U+02003"
+ },
+ {
+ entity: "eng;",
+ value: "U+0014B"
+ },
+ {
+ entity: "ensp;",
+ value: "U+02002"
+ },
+ {
+ entity: "eogon;",
+ value: "U+00119"
+ },
+ {
+ entity: "eopf;",
+ value: "U+1D556"
+ },
+ {
+ entity: "epar;",
+ value: "U+022D5"
+ },
+ {
+ entity: "eparsl;",
+ value: "U+029E3"
+ },
+ {
+ entity: "eplus;",
+ value: "U+02A71"
+ },
+ {
+ entity: "epsi;",
+ value: "U+003B5"
+ },
+ {
+ entity: "epsilon;",
+ value: "U+003B5"
+ },
+ {
+ entity: "epsiv;",
+ value: "U+003F5"
+ },
+ {
+ entity: "eqcirc;",
+ value: "U+02256"
+ },
+ {
+ entity: "eqcolon;",
+ value: "U+02255"
+ },
+ {
+ entity: "eqsim;",
+ value: "U+02242"
+ },
+ {
+ entity: "eqslantgtr;",
+ value: "U+02A96"
+ },
+ {
+ entity: "eqslantless;",
+ value: "U+02A95"
+ },
+ {
+ entity: "equals;",
+ value: "U+0003D"
+ },
+ {
+ entity: "equest;",
+ value: "U+0225F"
+ },
+ {
+ entity: "equiv;",
+ value: "U+02261"
+ },
+ {
+ entity: "equivDD;",
+ value: "U+02A78"
+ },
+ {
+ entity: "eqvparsl;",
+ value: "U+029E5"
+ },
+ {
+ entity: "erDot;",
+ value: "U+02253"
+ },
+ {
+ entity: "erarr;",
+ value: "U+02971"
+ },
+ {
+ entity: "escr;",
+ value: "U+0212F"
+ },
+ {
+ entity: "esdot;",
+ value: "U+02250"
+ },
+ {
+ entity: "esim;",
+ value: "U+02242"
+ },
+ {
+ entity: "eta;",
+ value: "U+003B7"
+ },
+ {
+ entity: "eth;",
+ value: "U+000F0"
+ },
+ {
+ entity: "eth",
+ value: "U+000F0"
+ },
+ {
+ entity: "euml;",
+ value: "U+000EB"
+ },
+ {
+ entity: "euml",
+ value: "U+000EB"
+ },
+ {
+ entity: "euro;",
+ value: "U+020AC"
+ },
+ {
+ entity: "excl;",
+ value: "U+00021"
+ },
+ {
+ entity: "exist;",
+ value: "U+02203"
+ },
+ {
+ entity: "expectation;",
+ value: "U+02130"
+ },
+ {
+ entity: "exponentiale;",
+ value: "U+02147"
+ },
+ {
+ entity: "fallingdotseq;",
+ value: "U+02252"
+ },
+ {
+ entity: "fcy;",
+ value: "U+00444"
+ },
+ {
+ entity: "female;",
+ value: "U+02640"
+ },
+ {
+ entity: "ffilig;",
+ value: "U+0FB03"
+ },
+ {
+ entity: "fflig;",
+ value: "U+0FB00"
+ },
+ {
+ entity: "ffllig;",
+ value: "U+0FB04"
+ },
+ {
+ entity: "ffr;",
+ value: "U+1D523"
+ },
+ {
+ entity: "filig;",
+ value: "U+0FB01"
+ },
+ {
+ entity: "flat;",
+ value: "U+0266D"
+ },
+ {
+ entity: "fllig;",
+ value: "U+0FB02"
+ },
+ {
+ entity: "fltns;",
+ value: "U+025B1"
+ },
+ {
+ entity: "fnof;",
+ value: "U+00192"
+ },
+ {
+ entity: "fopf;",
+ value: "U+1D557"
+ },
+ {
+ entity: "forall;",
+ value: "U+02200"
+ },
+ {
+ entity: "fork;",
+ value: "U+022D4"
+ },
+ {
+ entity: "forkv;",
+ value: "U+02AD9"
+ },
+ {
+ entity: "fpartint;",
+ value: "U+02A0D"
+ },
+ {
+ entity: "frac12;",
+ value: "U+000BD"
+ },
+ {
+ entity: "frac12",
+ value: "U+000BD"
+ },
+ {
+ entity: "frac13;",
+ value: "U+02153"
+ },
+ {
+ entity: "frac14;",
+ value: "U+000BC"
+ },
+ {
+ entity: "frac14",
+ value: "U+000BC"
+ },
+ {
+ entity: "frac15;",
+ value: "U+02155"
+ },
+ {
+ entity: "frac16;",
+ value: "U+02159"
+ },
+ {
+ entity: "frac18;",
+ value: "U+0215B"
+ },
+ {
+ entity: "frac23;",
+ value: "U+02154"
+ },
+ {
+ entity: "frac25;",
+ value: "U+02156"
+ },
+ {
+ entity: "frac34;",
+ value: "U+000BE"
+ },
+ {
+ entity: "frac34",
+ value: "U+000BE"
+ },
+ {
+ entity: "frac35;",
+ value: "U+02157"
+ },
+ {
+ entity: "frac38;",
+ value: "U+0215C"
+ },
+ {
+ entity: "frac45;",
+ value: "U+02158"
+ },
+ {
+ entity: "frac56;",
+ value: "U+0215A"
+ },
+ {
+ entity: "frac58;",
+ value: "U+0215D"
+ },
+ {
+ entity: "frac78;",
+ value: "U+0215E"
+ },
+ {
+ entity: "frasl;",
+ value: "U+02044"
+ },
+ {
+ entity: "frown;",
+ value: "U+02322"
+ },
+ {
+ entity: "fscr;",
+ value: "U+1D4BB"
+ },
+ {
+ entity: "gE;",
+ value: "U+02267"
+ },
+ {
+ entity: "gEl;",
+ value: "U+02A8C"
+ },
+ {
+ entity: "gacute;",
+ value: "U+001F5"
+ },
+ {
+ entity: "gamma;",
+ value: "U+003B3"
+ },
+ {
+ entity: "gammad;",
+ value: "U+003DD"
+ },
+ {
+ entity: "gap;",
+ value: "U+02A86"
+ },
+ {
+ entity: "gbreve;",
+ value: "U+0011F"
+ },
+ {
+ entity: "gcirc;",
+ value: "U+0011D"
+ },
+ {
+ entity: "gcy;",
+ value: "U+00433"
+ },
+ {
+ entity: "gdot;",
+ value: "U+00121"
+ },
+ {
+ entity: "ge;",
+ value: "U+02265"
+ },
+ {
+ entity: "gel;",
+ value: "U+022DB"
+ },
+ {
+ entity: "geq;",
+ value: "U+02265"
+ },
+ {
+ entity: "geqq;",
+ value: "U+02267"
+ },
+ {
+ entity: "geqslant;",
+ value: "U+02A7E"
+ },
+ {
+ entity: "ges;",
+ value: "U+02A7E"
+ },
+ {
+ entity: "gescc;",
+ value: "U+02AA9"
+ },
+ {
+ entity: "gesdot;",
+ value: "U+02A80"
+ },
+ {
+ entity: "gesdoto;",
+ value: "U+02A82"
+ },
+ {
+ entity: "gesdotol;",
+ value: "U+02A84"
+ },
+ {
+ entity: "gesles;",
+ value: "U+02A94"
+ },
+ {
+ entity: "gfr;",
+ value: "U+1D524"
+ },
+ {
+ entity: "gg;",
+ value: "U+0226B"
+ },
+ {
+ entity: "ggg;",
+ value: "U+022D9"
+ },
+ {
+ entity: "gimel;",
+ value: "U+02137"
+ },
+ {
+ entity: "gjcy;",
+ value: "U+00453"
+ },
+ {
+ entity: "gl;",
+ value: "U+02277"
+ },
+ {
+ entity: "glE;",
+ value: "U+02A92"
+ },
+ {
+ entity: "gla;",
+ value: "U+02AA5"
+ },
+ {
+ entity: "glj;",
+ value: "U+02AA4"
+ },
+ {
+ entity: "gnE;",
+ value: "U+02269"
+ },
+ {
+ entity: "gnap;",
+ value: "U+02A8A"
+ },
+ {
+ entity: "gnapprox;",
+ value: "U+02A8A"
+ },
+ {
+ entity: "gne;",
+ value: "U+02A88"
+ },
+ {
+ entity: "gneq;",
+ value: "U+02A88"
+ },
+ {
+ entity: "gneqq;",
+ value: "U+02269"
+ },
+ {
+ entity: "gnsim;",
+ value: "U+022E7"
+ },
+ {
+ entity: "gopf;",
+ value: "U+1D558"
+ },
+ {
+ entity: "grave;",
+ value: "U+00060"
+ },
+ {
+ entity: "gscr;",
+ value: "U+0210A"
+ },
+ {
+ entity: "gsim;",
+ value: "U+02273"
+ },
+ {
+ entity: "gsime;",
+ value: "U+02A8E"
+ },
+ {
+ entity: "gsiml;",
+ value: "U+02A90"
+ },
+ {
+ entity: "gt;",
+ value: "U+0003E"
+ },
+ {
+ entity: "gt",
+ value: "U+0003E"
+ },
+ {
+ entity: "gtcc;",
+ value: "U+02AA7"
+ },
+ {
+ entity: "gtcir;",
+ value: "U+02A7A"
+ },
+ {
+ entity: "gtdot;",
+ value: "U+022D7"
+ },
+ {
+ entity: "gtlPar;",
+ value: "U+02995"
+ },
+ {
+ entity: "gtquest;",
+ value: "U+02A7C"
+ },
+ {
+ entity: "gtrapprox;",
+ value: "U+02A86"
+ },
+ {
+ entity: "gtrarr;",
+ value: "U+02978"
+ },
+ {
+ entity: "gtrdot;",
+ value: "U+022D7"
+ },
+ {
+ entity: "gtreqless;",
+ value: "U+022DB"
+ },
+ {
+ entity: "gtreqqless;",
+ value: "U+02A8C"
+ },
+ {
+ entity: "gtrless;",
+ value: "U+02277"
+ },
+ {
+ entity: "gtrsim;",
+ value: "U+02273"
+ },
+ {
+ entity: "hArr;",
+ value: "U+021D4"
+ },
+ {
+ entity: "hairsp;",
+ value: "U+0200A"
+ },
+ {
+ entity: "half;",
+ value: "U+000BD"
+ },
+ {
+ entity: "hamilt;",
+ value: "U+0210B"
+ },
+ {
+ entity: "hardcy;",
+ value: "U+0044A"
+ },
+ {
+ entity: "harr;",
+ value: "U+02194"
+ },
+ {
+ entity: "harrcir;",
+ value: "U+02948"
+ },
+ {
+ entity: "harrw;",
+ value: "U+021AD"
+ },
+ {
+ entity: "hbar;",
+ value: "U+0210F"
+ },
+ {
+ entity: "hcirc;",
+ value: "U+00125"
+ },
+ {
+ entity: "hearts;",
+ value: "U+02665"
+ },
+ {
+ entity: "heartsuit;",
+ value: "U+02665"
+ },
+ {
+ entity: "hellip;",
+ value: "U+02026"
+ },
+ {
+ entity: "hercon;",
+ value: "U+022B9"
+ },
+ {
+ entity: "hfr;",
+ value: "U+1D525"
+ },
+ {
+ entity: "hksearow;",
+ value: "U+02925"
+ },
+ {
+ entity: "hkswarow;",
+ value: "U+02926"
+ },
+ {
+ entity: "hoarr;",
+ value: "U+021FF"
+ },
+ {
+ entity: "homtht;",
+ value: "U+0223B"
+ },
+ {
+ entity: "hookleftarrow;",
+ value: "U+021A9"
+ },
+ {
+ entity: "hookrightarrow;",
+ value: "U+021AA"
+ },
+ {
+ entity: "hopf;",
+ value: "U+1D559"
+ },
+ {
+ entity: "horbar;",
+ value: "U+02015"
+ },
+ {
+ entity: "hscr;",
+ value: "U+1D4BD"
+ },
+ {
+ entity: "hslash;",
+ value: "U+0210F"
+ },
+ {
+ entity: "hstrok;",
+ value: "U+00127"
+ },
+ {
+ entity: "hybull;",
+ value: "U+02043"
+ },
+ {
+ entity: "hyphen;",
+ value: "U+02010"
+ },
+ {
+ entity: "iacute;",
+ value: "U+000ED"
+ },
+ {
+ entity: "iacute",
+ value: "U+000ED"
+ },
+ {
+ entity: "ic;",
+ value: "U+02063"
+ },
+ {
+ entity: "icirc;",
+ value: "U+000EE"
+ },
+ {
+ entity: "icirc",
+ value: "U+000EE"
+ },
+ {
+ entity: "icy;",
+ value: "U+00438"
+ },
+ {
+ entity: "iecy;",
+ value: "U+00435"
+ },
+ {
+ entity: "iexcl;",
+ value: "U+000A1"
+ },
+ {
+ entity: "iexcl",
+ value: "U+000A1"
+ },
+ {
+ entity: "iff;",
+ value: "U+021D4"
+ },
+ {
+ entity: "ifr;",
+ value: "U+1D526"
+ },
+ {
+ entity: "igrave;",
+ value: "U+000EC"
+ },
+ {
+ entity: "igrave",
+ value: "U+000EC"
+ },
+ {
+ entity: "ii;",
+ value: "U+02148"
+ },
+ {
+ entity: "iiiint;",
+ value: "U+02A0C"
+ },
+ {
+ entity: "iiint;",
+ value: "U+0222D"
+ },
+ {
+ entity: "iinfin;",
+ value: "U+029DC"
+ },
+ {
+ entity: "iiota;",
+ value: "U+02129"
+ },
+ {
+ entity: "ijlig;",
+ value: "U+00133"
+ },
+ {
+ entity: "imacr;",
+ value: "U+0012B"
+ },
+ {
+ entity: "image;",
+ value: "U+02111"
+ },
+ {
+ entity: "imagline;",
+ value: "U+02110"
+ },
+ {
+ entity: "imagpart;",
+ value: "U+02111"
+ },
+ {
+ entity: "imath;",
+ value: "U+00131"
+ },
+ {
+ entity: "imof;",
+ value: "U+022B7"
+ },
+ {
+ entity: "imped;",
+ value: "U+001B5"
+ },
+ {
+ entity: "in;",
+ value: "U+02208"
+ },
+ {
+ entity: "incare;",
+ value: "U+02105"
+ },
+ {
+ entity: "infin;",
+ value: "U+0221E"
+ },
+ {
+ entity: "infintie;",
+ value: "U+029DD"
+ },
+ {
+ entity: "inodot;",
+ value: "U+00131"
+ },
+ {
+ entity: "int;",
+ value: "U+0222B"
+ },
+ {
+ entity: "intcal;",
+ value: "U+022BA"
+ },
+ {
+ entity: "integers;",
+ value: "U+02124"
+ },
+ {
+ entity: "intercal;",
+ value: "U+022BA"
+ },
+ {
+ entity: "intlarhk;",
+ value: "U+02A17"
+ },
+ {
+ entity: "intprod;",
+ value: "U+02A3C"
+ },
+ {
+ entity: "iocy;",
+ value: "U+00451"
+ },
+ {
+ entity: "iogon;",
+ value: "U+0012F"
+ },
+ {
+ entity: "iopf;",
+ value: "U+1D55A"
+ },
+ {
+ entity: "iota;",
+ value: "U+003B9"
+ },
+ {
+ entity: "iprod;",
+ value: "U+02A3C"
+ },
+ {
+ entity: "iquest;",
+ value: "U+000BF"
+ },
+ {
+ entity: "iquest",
+ value: "U+000BF"
+ },
+ {
+ entity: "iscr;",
+ value: "U+1D4BE"
+ },
+ {
+ entity: "isin;",
+ value: "U+02208"
+ },
+ {
+ entity: "isinE;",
+ value: "U+022F9"
+ },
+ {
+ entity: "isindot;",
+ value: "U+022F5"
+ },
+ {
+ entity: "isins;",
+ value: "U+022F4"
+ },
+ {
+ entity: "isinsv;",
+ value: "U+022F3"
+ },
+ {
+ entity: "isinv;",
+ value: "U+02208"
+ },
+ {
+ entity: "it;",
+ value: "U+02062"
+ },
+ {
+ entity: "itilde;",
+ value: "U+00129"
+ },
+ {
+ entity: "iukcy;",
+ value: "U+00456"
+ },
+ {
+ entity: "iuml;",
+ value: "U+000EF"
+ },
+ {
+ entity: "iuml",
+ value: "U+000EF"
+ },
+ {
+ entity: "jcirc;",
+ value: "U+00135"
+ },
+ {
+ entity: "jcy;",
+ value: "U+00439"
+ },
+ {
+ entity: "jfr;",
+ value: "U+1D527"
+ },
+ {
+ entity: "jmath;",
+ value: "U+00237"
+ },
+ {
+ entity: "jopf;",
+ value: "U+1D55B"
+ },
+ {
+ entity: "jscr;",
+ value: "U+1D4BF"
+ },
+ {
+ entity: "jsercy;",
+ value: "U+00458"
+ },
+ {
+ entity: "jukcy;",
+ value: "U+00454"
+ },
+ {
+ entity: "kappa;",
+ value: "U+003BA"
+ },
+ {
+ entity: "kappav;",
+ value: "U+003F0"
+ },
+ {
+ entity: "kcedil;",
+ value: "U+00137"
+ },
+ {
+ entity: "kcy;",
+ value: "U+0043A"
+ },
+ {
+ entity: "kfr;",
+ value: "U+1D528"
+ },
+ {
+ entity: "kgreen;",
+ value: "U+00138"
+ },
+ {
+ entity: "khcy;",
+ value: "U+00445"
+ },
+ {
+ entity: "kjcy;",
+ value: "U+0045C"
+ },
+ {
+ entity: "kopf;",
+ value: "U+1D55C"
+ },
+ {
+ entity: "kscr;",
+ value: "U+1D4C0"
+ },
+ {
+ entity: "lAarr;",
+ value: "U+021DA"
+ },
+ {
+ entity: "lArr;",
+ value: "U+021D0"
+ },
+ {
+ entity: "lAtail;",
+ value: "U+0291B"
+ },
+ {
+ entity: "lBarr;",
+ value: "U+0290E"
+ },
+ {
+ entity: "lE;",
+ value: "U+02266"
+ },
+ {
+ entity: "lEg;",
+ value: "U+02A8B"
+ },
+ {
+ entity: "lHar;",
+ value: "U+02962"
+ },
+ {
+ entity: "lacute;",
+ value: "U+0013A"
+ },
+ {
+ entity: "laemptyv;",
+ value: "U+029B4"
+ },
+ {
+ entity: "lagran;",
+ value: "U+02112"
+ },
+ {
+ entity: "lambda;",
+ value: "U+003BB"
+ },
+ {
+ entity: "lang;",
+ value: "U+027E8"
+ },
+ {
+ entity: "langd;",
+ value: "U+02991"
+ },
+ {
+ entity: "langle;",
+ value: "U+027E8"
+ },
+ {
+ entity: "lap;",
+ value: "U+02A85"
+ },
+ {
+ entity: "laquo;",
+ value: "U+000AB"
+ },
+ {
+ entity: "laquo",
+ value: "U+000AB"
+ },
+ {
+ entity: "larr;",
+ value: "U+02190"
+ },
+ {
+ entity: "larrb;",
+ value: "U+021E4"
+ },
+ {
+ entity: "larrbfs;",
+ value: "U+0291F"
+ },
+ {
+ entity: "larrfs;",
+ value: "U+0291D"
+ },
+ {
+ entity: "larrhk;",
+ value: "U+021A9"
+ },
+ {
+ entity: "larrlp;",
+ value: "U+021AB"
+ },
+ {
+ entity: "larrpl;",
+ value: "U+02939"
+ },
+ {
+ entity: "larrsim;",
+ value: "U+02973"
+ },
+ {
+ entity: "larrtl;",
+ value: "U+021A2"
+ },
+ {
+ entity: "lat;",
+ value: "U+02AAB"
+ },
+ {
+ entity: "latail;",
+ value: "U+02919"
+ },
+ {
+ entity: "late;",
+ value: "U+02AAD"
+ },
+ {
+ entity: "lbarr;",
+ value: "U+0290C"
+ },
+ {
+ entity: "lbbrk;",
+ value: "U+02772"
+ },
+ {
+ entity: "lbrace;",
+ value: "U+0007B"
+ },
+ {
+ entity: "lbrack;",
+ value: "U+0005B"
+ },
+ {
+ entity: "lbrke;",
+ value: "U+0298B"
+ },
+ {
+ entity: "lbrksld;",
+ value: "U+0298F"
+ },
+ {
+ entity: "lbrkslu;",
+ value: "U+0298D"
+ },
+ {
+ entity: "lcaron;",
+ value: "U+0013E"
+ },
+ {
+ entity: "lcedil;",
+ value: "U+0013C"
+ },
+ {
+ entity: "lceil;",
+ value: "U+02308"
+ },
+ {
+ entity: "lcub;",
+ value: "U+0007B"
+ },
+ {
+ entity: "lcy;",
+ value: "U+0043B"
+ },
+ {
+ entity: "ldca;",
+ value: "U+02936"
+ },
+ {
+ entity: "ldquo;",
+ value: "U+0201C"
+ },
+ {
+ entity: "ldquor;",
+ value: "U+0201E"
+ },
+ {
+ entity: "ldrdhar;",
+ value: "U+02967"
+ },
+ {
+ entity: "ldrushar;",
+ value: "U+0294B"
+ },
+ {
+ entity: "ldsh;",
+ value: "U+021B2"
+ },
+ {
+ entity: "le;",
+ value: "U+02264"
+ },
+ {
+ entity: "leftarrow;",
+ value: "U+02190"
+ },
+ {
+ entity: "leftarrowtail;",
+ value: "U+021A2"
+ },
+ {
+ entity: "leftharpoondown;",
+ value: "U+021BD"
+ },
+ {
+ entity: "leftharpoonup;",
+ value: "U+021BC"
+ },
+ {
+ entity: "leftleftarrows;",
+ value: "U+021C7"
+ },
+ {
+ entity: "leftrightarrow;",
+ value: "U+02194"
+ },
+ {
+ entity: "leftrightarrows;",
+ value: "U+021C6"
+ },
+ {
+ entity: "leftrightharpoons;",
+ value: "U+021CB"
+ },
+ {
+ entity: "leftrightsquigarrow;",
+ value: "U+021AD"
+ },
+ {
+ entity: "leftthreetimes;",
+ value: "U+022CB"
+ },
+ {
+ entity: "leg;",
+ value: "U+022DA"
+ },
+ {
+ entity: "leq;",
+ value: "U+02264"
+ },
+ {
+ entity: "leqq;",
+ value: "U+02266"
+ },
+ {
+ entity: "leqslant;",
+ value: "U+02A7D"
+ },
+ {
+ entity: "les;",
+ value: "U+02A7D"
+ },
+ {
+ entity: "lescc;",
+ value: "U+02AA8"
+ },
+ {
+ entity: "lesdot;",
+ value: "U+02A7F"
+ },
+ {
+ entity: "lesdoto;",
+ value: "U+02A81"
+ },
+ {
+ entity: "lesdotor;",
+ value: "U+02A83"
+ },
+ {
+ entity: "lesges;",
+ value: "U+02A93"
+ },
+ {
+ entity: "lessapprox;",
+ value: "U+02A85"
+ },
+ {
+ entity: "lessdot;",
+ value: "U+022D6"
+ },
+ {
+ entity: "lesseqgtr;",
+ value: "U+022DA"
+ },
+ {
+ entity: "lesseqqgtr;",
+ value: "U+02A8B"
+ },
+ {
+ entity: "lessgtr;",
+ value: "U+02276"
+ },
+ {
+ entity: "lesssim;",
+ value: "U+02272"
+ },
+ {
+ entity: "lfisht;",
+ value: "U+0297C"
+ },
+ {
+ entity: "lfloor;",
+ value: "U+0230A"
+ },
+ {
+ entity: "lfr;",
+ value: "U+1D529"
+ },
+ {
+ entity: "lg;",
+ value: "U+02276"
+ },
+ {
+ entity: "lgE;",
+ value: "U+02A91"
+ },
+ {
+ entity: "lhard;",
+ value: "U+021BD"
+ },
+ {
+ entity: "lharu;",
+ value: "U+021BC"
+ },
+ {
+ entity: "lharul;",
+ value: "U+0296A"
+ },
+ {
+ entity: "lhblk;",
+ value: "U+02584"
+ },
+ {
+ entity: "ljcy;",
+ value: "U+00459"
+ },
+ {
+ entity: "ll;",
+ value: "U+0226A"
+ },
+ {
+ entity: "llarr;",
+ value: "U+021C7"
+ },
+ {
+ entity: "llcorner;",
+ value: "U+0231E"
+ },
+ {
+ entity: "llhard;",
+ value: "U+0296B"
+ },
+ {
+ entity: "lltri;",
+ value: "U+025FA"
+ },
+ {
+ entity: "lmidot;",
+ value: "U+00140"
+ },
+ {
+ entity: "lmoust;",
+ value: "U+023B0"
+ },
+ {
+ entity: "lmoustache;",
+ value: "U+023B0"
+ },
+ {
+ entity: "lnE;",
+ value: "U+02268"
+ },
+ {
+ entity: "lnap;",
+ value: "U+02A89"
+ },
+ {
+ entity: "lnapprox;",
+ value: "U+02A89"
+ },
+ {
+ entity: "lne;",
+ value: "U+02A87"
+ },
+ {
+ entity: "lneq;",
+ value: "U+02A87"
+ },
+ {
+ entity: "lneqq;",
+ value: "U+02268"
+ },
+ {
+ entity: "lnsim;",
+ value: "U+022E6"
+ },
+ {
+ entity: "loang;",
+ value: "U+027EC"
+ },
+ {
+ entity: "loarr;",
+ value: "U+021FD"
+ },
+ {
+ entity: "lobrk;",
+ value: "U+027E6"
+ },
+ {
+ entity: "longleftarrow;",
+ value: "U+027F5"
+ },
+ {
+ entity: "longleftrightarrow;",
+ value: "U+027F7"
+ },
+ {
+ entity: "longmapsto;",
+ value: "U+027FC"
+ },
+ {
+ entity: "longrightarrow;",
+ value: "U+027F6"
+ },
+ {
+ entity: "looparrowleft;",
+ value: "U+021AB"
+ },
+ {
+ entity: "looparrowright;",
+ value: "U+021AC"
+ },
+ {
+ entity: "lopar;",
+ value: "U+02985"
+ },
+ {
+ entity: "lopf;",
+ value: "U+1D55D"
+ },
+ {
+ entity: "loplus;",
+ value: "U+02A2D"
+ },
+ {
+ entity: "lotimes;",
+ value: "U+02A34"
+ },
+ {
+ entity: "lowast;",
+ value: "U+02217"
+ },
+ {
+ entity: "lowbar;",
+ value: "U+0005F"
+ },
+ {
+ entity: "loz;",
+ value: "U+025CA"
+ },
+ {
+ entity: "lozenge;",
+ value: "U+025CA"
+ },
+ {
+ entity: "lozf;",
+ value: "U+029EB"
+ },
+ {
+ entity: "lpar;",
+ value: "U+00028"
+ },
+ {
+ entity: "lparlt;",
+ value: "U+02993"
+ },
+ {
+ entity: "lrarr;",
+ value: "U+021C6"
+ },
+ {
+ entity: "lrcorner;",
+ value: "U+0231F"
+ },
+ {
+ entity: "lrhar;",
+ value: "U+021CB"
+ },
+ {
+ entity: "lrhard;",
+ value: "U+0296D"
+ },
+ {
+ entity: "lrm;",
+ value: "U+0200E"
+ },
+ {
+ entity: "lrtri;",
+ value: "U+022BF"
+ },
+ {
+ entity: "lsaquo;",
+ value: "U+02039"
+ },
+ {
+ entity: "lscr;",
+ value: "U+1D4C1"
+ },
+ {
+ entity: "lsh;",
+ value: "U+021B0"
+ },
+ {
+ entity: "lsim;",
+ value: "U+02272"
+ },
+ {
+ entity: "lsime;",
+ value: "U+02A8D"
+ },
+ {
+ entity: "lsimg;",
+ value: "U+02A8F"
+ },
+ {
+ entity: "lsqb;",
+ value: "U+0005B"
+ },
+ {
+ entity: "lsquo;",
+ value: "U+02018"
+ },
+ {
+ entity: "lsquor;",
+ value: "U+0201A"
+ },
+ {
+ entity: "lstrok;",
+ value: "U+00142"
+ },
+ {
+ entity: "lt;",
+ value: "U+0003C"
+ },
+ {
+ entity: "lt",
+ value: "U+0003C"
+ },
+ {
+ entity: "ltcc;",
+ value: "U+02AA6"
+ },
+ {
+ entity: "ltcir;",
+ value: "U+02A79"
+ },
+ {
+ entity: "ltdot;",
+ value: "U+022D6"
+ },
+ {
+ entity: "lthree;",
+ value: "U+022CB"
+ },
+ {
+ entity: "ltimes;",
+ value: "U+022C9"
+ },
+ {
+ entity: "ltlarr;",
+ value: "U+02976"
+ },
+ {
+ entity: "ltquest;",
+ value: "U+02A7B"
+ },
+ {
+ entity: "ltrPar;",
+ value: "U+02996"
+ },
+ {
+ entity: "ltri;",
+ value: "U+025C3"
+ },
+ {
+ entity: "ltrie;",
+ value: "U+022B4"
+ },
+ {
+ entity: "ltrif;",
+ value: "U+025C2"
+ },
+ {
+ entity: "lurdshar;",
+ value: "U+0294A"
+ },
+ {
+ entity: "luruhar;",
+ value: "U+02966"
+ },
+ {
+ entity: "mDDot;",
+ value: "U+0223A"
+ },
+ {
+ entity: "macr;",
+ value: "U+000AF"
+ },
+ {
+ entity: "macr",
+ value: "U+000AF"
+ },
+ {
+ entity: "male;",
+ value: "U+02642"
+ },
+ {
+ entity: "malt;",
+ value: "U+02720"
+ },
+ {
+ entity: "maltese;",
+ value: "U+02720"
+ },
+ {
+ entity: "map;",
+ value: "U+021A6"
+ },
+ {
+ entity: "mapsto;",
+ value: "U+021A6"
+ },
+ {
+ entity: "mapstodown;",
+ value: "U+021A7"
+ },
+ {
+ entity: "mapstoleft;",
+ value: "U+021A4"
+ },
+ {
+ entity: "mapstoup;",
+ value: "U+021A5"
+ },
+ {
+ entity: "marker;",
+ value: "U+025AE"
+ },
+ {
+ entity: "mcomma;",
+ value: "U+02A29"
+ },
+ {
+ entity: "mcy;",
+ value: "U+0043C"
+ },
+ {
+ entity: "mdash;",
+ value: "U+02014"
+ },
+ {
+ entity: "measuredangle;",
+ value: "U+02221"
+ },
+ {
+ entity: "mfr;",
+ value: "U+1D52A"
+ },
+ {
+ entity: "mho;",
+ value: "U+02127"
+ },
+ {
+ entity: "micro;",
+ value: "U+000B5"
+ },
+ {
+ entity: "micro",
+ value: "U+000B5"
+ },
+ {
+ entity: "mid;",
+ value: "U+02223"
+ },
+ {
+ entity: "midast;",
+ value: "U+0002A"
+ },
+ {
+ entity: "midcir;",
+ value: "U+02AF0"
+ },
+ {
+ entity: "middot;",
+ value: "U+000B7"
+ },
+ {
+ entity: "middot",
+ value: "U+000B7"
+ },
+ {
+ entity: "minus;",
+ value: "U+02212"
+ },
+ {
+ entity: "minusb;",
+ value: "U+0229F"
+ },
+ {
+ entity: "minusd;",
+ value: "U+02238"
+ },
+ {
+ entity: "minusdu;",
+ value: "U+02A2A"
+ },
+ {
+ entity: "mlcp;",
+ value: "U+02ADB"
+ },
+ {
+ entity: "mldr;",
+ value: "U+02026"
+ },
+ {
+ entity: "mnplus;",
+ value: "U+02213"
+ },
+ {
+ entity: "models;",
+ value: "U+022A7"
+ },
+ {
+ entity: "mopf;",
+ value: "U+1D55E"
+ },
+ {
+ entity: "mp;",
+ value: "U+02213"
+ },
+ {
+ entity: "mscr;",
+ value: "U+1D4C2"
+ },
+ {
+ entity: "mstpos;",
+ value: "U+0223E"
+ },
+ {
+ entity: "mu;",
+ value: "U+003BC"
+ },
+ {
+ entity: "multimap;",
+ value: "U+022B8"
+ },
+ {
+ entity: "mumap;",
+ value: "U+022B8"
+ },
+ {
+ entity: "nLeftarrow;",
+ value: "U+021CD"
+ },
+ {
+ entity: "nLeftrightarrow;",
+ value: "U+021CE"
+ },
+ {
+ entity: "nRightarrow;",
+ value: "U+021CF"
+ },
+ {
+ entity: "nVDash;",
+ value: "U+022AF"
+ },
+ {
+ entity: "nVdash;",
+ value: "U+022AE"
+ },
+ {
+ entity: "nabla;",
+ value: "U+02207"
+ },
+ {
+ entity: "nacute;",
+ value: "U+00144"
+ },
+ {
+ entity: "nap;",
+ value: "U+02249"
+ },
+ {
+ entity: "napos;",
+ value: "U+00149"
+ },
+ {
+ entity: "napprox;",
+ value: "U+02249"
+ },
+ {
+ entity: "natur;",
+ value: "U+0266E"
+ },
+ {
+ entity: "natural;",
+ value: "U+0266E"
+ },
+ {
+ entity: "naturals;",
+ value: "U+02115"
+ },
+ {
+ entity: "nbsp;",
+ value: "U+000A0"
+ },
+ {
+ entity: "nbsp",
+ value: "U+000A0"
+ },
+ {
+ entity: "ncap;",
+ value: "U+02A43"
+ },
+ {
+ entity: "ncaron;",
+ value: "U+00148"
+ },
+ {
+ entity: "ncedil;",
+ value: "U+00146"
+ },
+ {
+ entity: "ncong;",
+ value: "U+02247"
+ },
+ {
+ entity: "ncup;",
+ value: "U+02A42"
+ },
+ {
+ entity: "ncy;",
+ value: "U+0043D"
+ },
+ {
+ entity: "ndash;",
+ value: "U+02013"
+ },
+ {
+ entity: "ne;",
+ value: "U+02260"
+ },
+ {
+ entity: "neArr;",
+ value: "U+021D7"
+ },
+ {
+ entity: "nearhk;",
+ value: "U+02924"
+ },
+ {
+ entity: "nearr;",
+ value: "U+02197"
+ },
+ {
+ entity: "nearrow;",
+ value: "U+02197"
+ },
+ {
+ entity: "nequiv;",
+ value: "U+02262"
+ },
+ {
+ entity: "nesear;",
+ value: "U+02928"
+ },
+ {
+ entity: "nexist;",
+ value: "U+02204"
+ },
+ {
+ entity: "nexists;",
+ value: "U+02204"
+ },
+ {
+ entity: "nfr;",
+ value: "U+1D52B"
+ },
+ {
+ entity: "nge;",
+ value: "U+02271"
+ },
+ {
+ entity: "ngeq;",
+ value: "U+02271"
+ },
+ {
+ entity: "ngsim;",
+ value: "U+02275"
+ },
+ {
+ entity: "ngt;",
+ value: "U+0226F"
+ },
+ {
+ entity: "ngtr;",
+ value: "U+0226F"
+ },
+ {
+ entity: "nhArr;",
+ value: "U+021CE"
+ },
+ {
+ entity: "nharr;",
+ value: "U+021AE"
+ },
+ {
+ entity: "nhpar;",
+ value: "U+02AF2"
+ },
+ {
+ entity: "ni;",
+ value: "U+0220B"
+ },
+ {
+ entity: "nis;",
+ value: "U+022FC"
+ },
+ {
+ entity: "nisd;",
+ value: "U+022FA"
+ },
+ {
+ entity: "niv;",
+ value: "U+0220B"
+ },
+ {
+ entity: "njcy;",
+ value: "U+0045A"
+ },
+ {
+ entity: "nlArr;",
+ value: "U+021CD"
+ },
+ {
+ entity: "nlarr;",
+ value: "U+0219A"
+ },
+ {
+ entity: "nldr;",
+ value: "U+02025"
+ },
+ {
+ entity: "nle;",
+ value: "U+02270"
+ },
+ {
+ entity: "nleftarrow;",
+ value: "U+0219A"
+ },
+ {
+ entity: "nleftrightarrow;",
+ value: "U+021AE"
+ },
+ {
+ entity: "nleq;",
+ value: "U+02270"
+ },
+ {
+ entity: "nless;",
+ value: "U+0226E"
+ },
+ {
+ entity: "nlsim;",
+ value: "U+02274"
+ },
+ {
+ entity: "nlt;",
+ value: "U+0226E"
+ },
+ {
+ entity: "nltri;",
+ value: "U+022EA"
+ },
+ {
+ entity: "nltrie;",
+ value: "U+022EC"
+ },
+ {
+ entity: "nmid;",
+ value: "U+02224"
+ },
+ {
+ entity: "nopf;",
+ value: "U+1D55F"
+ },
+ {
+ entity: "not;",
+ value: "U+000AC"
+ },
+ {
+ entity: "not",
+ value: "U+000AC"
+ },
+ {
+ entity: "notin;",
+ value: "U+02209"
+ },
+ {
+ entity: "notinva;",
+ value: "U+02209"
+ },
+ {
+ entity: "notinvb;",
+ value: "U+022F7"
+ },
+ {
+ entity: "notinvc;",
+ value: "U+022F6"
+ },
+ {
+ entity: "notni;",
+ value: "U+0220C"
+ },
+ {
+ entity: "notniva;",
+ value: "U+0220C"
+ },
+ {
+ entity: "notnivb;",
+ value: "U+022FE"
+ },
+ {
+ entity: "notnivc;",
+ value: "U+022FD"
+ },
+ {
+ entity: "npar;",
+ value: "U+02226"
+ },
+ {
+ entity: "nparallel;",
+ value: "U+02226"
+ },
+ {
+ entity: "npolint;",
+ value: "U+02A14"
+ },
+ {
+ entity: "npr;",
+ value: "U+02280"
+ },
+ {
+ entity: "nprcue;",
+ value: "U+022E0"
+ },
+ {
+ entity: "nprec;",
+ value: "U+02280"
+ },
+ {
+ entity: "nrArr;",
+ value: "U+021CF"
+ },
+ {
+ entity: "nrarr;",
+ value: "U+0219B"
+ },
+ {
+ entity: "nrightarrow;",
+ value: "U+0219B"
+ },
+ {
+ entity: "nrtri;",
+ value: "U+022EB"
+ },
+ {
+ entity: "nrtrie;",
+ value: "U+022ED"
+ },
+ {
+ entity: "nsc;",
+ value: "U+02281"
+ },
+ {
+ entity: "nsccue;",
+ value: "U+022E1"
+ },
+ {
+ entity: "nscr;",
+ value: "U+1D4C3"
+ },
+ {
+ entity: "nshortmid;",
+ value: "U+02224"
+ },
+ {
+ entity: "nshortparallel;",
+ value: "U+02226"
+ },
+ {
+ entity: "nsim;",
+ value: "U+02241"
+ },
+ {
+ entity: "nsime;",
+ value: "U+02244"
+ },
+ {
+ entity: "nsimeq;",
+ value: "U+02244"
+ },
+ {
+ entity: "nsmid;",
+ value: "U+02224"
+ },
+ {
+ entity: "nspar;",
+ value: "U+02226"
+ },
+ {
+ entity: "nsqsube;",
+ value: "U+022E2"
+ },
+ {
+ entity: "nsqsupe;",
+ value: "U+022E3"
+ },
+ {
+ entity: "nsub;",
+ value: "U+02284"
+ },
+ {
+ entity: "nsube;",
+ value: "U+02288"
+ },
+ {
+ entity: "nsubseteq;",
+ value: "U+02288"
+ },
+ {
+ entity: "nsucc;",
+ value: "U+02281"
+ },
+ {
+ entity: "nsup;",
+ value: "U+02285"
+ },
+ {
+ entity: "nsupe;",
+ value: "U+02289"
+ },
+ {
+ entity: "nsupseteq;",
+ value: "U+02289"
+ },
+ {
+ entity: "ntgl;",
+ value: "U+02279"
+ },
+ {
+ entity: "ntilde;",
+ value: "U+000F1"
+ },
+ {
+ entity: "ntilde",
+ value: "U+000F1"
+ },
+ {
+ entity: "ntlg;",
+ value: "U+02278"
+ },
+ {
+ entity: "ntriangleleft;",
+ value: "U+022EA"
+ },
+ {
+ entity: "ntrianglelefteq;",
+ value: "U+022EC"
+ },
+ {
+ entity: "ntriangleright;",
+ value: "U+022EB"
+ },
+ {
+ entity: "ntrianglerighteq;",
+ value: "U+022ED"
+ },
+ {
+ entity: "nu;",
+ value: "U+003BD"
+ },
+ {
+ entity: "num;",
+ value: "U+00023"
+ },
+ {
+ entity: "numero;",
+ value: "U+02116"
+ },
+ {
+ entity: "numsp;",
+ value: "U+02007"
+ },
+ {
+ entity: "nvDash;",
+ value: "U+022AD"
+ },
+ {
+ entity: "nvHarr;",
+ value: "U+02904"
+ },
+ {
+ entity: "nvdash;",
+ value: "U+022AC"
+ },
+ {
+ entity: "nvinfin;",
+ value: "U+029DE"
+ },
+ {
+ entity: "nvlArr;",
+ value: "U+02902"
+ },
+ {
+ entity: "nvrArr;",
+ value: "U+02903"
+ },
+ {
+ entity: "nwArr;",
+ value: "U+021D6"
+ },
+ {
+ entity: "nwarhk;",
+ value: "U+02923"
+ },
+ {
+ entity: "nwarr;",
+ value: "U+02196"
+ },
+ {
+ entity: "nwarrow;",
+ value: "U+02196"
+ },
+ {
+ entity: "nwnear;",
+ value: "U+02927"
+ },
+ {
+ entity: "oS;",
+ value: "U+024C8"
+ },
+ {
+ entity: "oacute;",
+ value: "U+000F3"
+ },
+ {
+ entity: "oacute",
+ value: "U+000F3"
+ },
+ {
+ entity: "oast;",
+ value: "U+0229B"
+ },
+ {
+ entity: "ocir;",
+ value: "U+0229A"
+ },
+ {
+ entity: "ocirc;",
+ value: "U+000F4"
+ },
+ {
+ entity: "ocirc",
+ value: "U+000F4"
+ },
+ {
+ entity: "ocy;",
+ value: "U+0043E"
+ },
+ {
+ entity: "odash;",
+ value: "U+0229D"
+ },
+ {
+ entity: "odblac;",
+ value: "U+00151"
+ },
+ {
+ entity: "odiv;",
+ value: "U+02A38"
+ },
+ {
+ entity: "odot;",
+ value: "U+02299"
+ },
+ {
+ entity: "odsold;",
+ value: "U+029BC"
+ },
+ {
+ entity: "oelig;",
+ value: "U+00153"
+ },
+ {
+ entity: "ofcir;",
+ value: "U+029BF"
+ },
+ {
+ entity: "ofr;",
+ value: "U+1D52C"
+ },
+ {
+ entity: "ogon;",
+ value: "U+002DB"
+ },
+ {
+ entity: "ograve;",
+ value: "U+000F2"
+ },
+ {
+ entity: "ograve",
+ value: "U+000F2"
+ },
+ {
+ entity: "ogt;",
+ value: "U+029C1"
+ },
+ {
+ entity: "ohbar;",
+ value: "U+029B5"
+ },
+ {
+ entity: "ohm;",
+ value: "U+003A9"
+ },
+ {
+ entity: "oint;",
+ value: "U+0222E"
+ },
+ {
+ entity: "olarr;",
+ value: "U+021BA"
+ },
+ {
+ entity: "olcir;",
+ value: "U+029BE"
+ },
+ {
+ entity: "olcross;",
+ value: "U+029BB"
+ },
+ {
+ entity: "oline;",
+ value: "U+0203E"
+ },
+ {
+ entity: "olt;",
+ value: "U+029C0"
+ },
+ {
+ entity: "omacr;",
+ value: "U+0014D"
+ },
+ {
+ entity: "omega;",
+ value: "U+003C9"
+ },
+ {
+ entity: "omicron;",
+ value: "U+003BF"
+ },
+ {
+ entity: "omid;",
+ value: "U+029B6"
+ },
+ {
+ entity: "ominus;",
+ value: "U+02296"
+ },
+ {
+ entity: "oopf;",
+ value: "U+1D560"
+ },
+ {
+ entity: "opar;",
+ value: "U+029B7"
+ },
+ {
+ entity: "operp;",
+ value: "U+029B9"
+ },
+ {
+ entity: "oplus;",
+ value: "U+02295"
+ },
+ {
+ entity: "or;",
+ value: "U+02228"
+ },
+ {
+ entity: "orarr;",
+ value: "U+021BB"
+ },
+ {
+ entity: "ord;",
+ value: "U+02A5D"
+ },
+ {
+ entity: "order;",
+ value: "U+02134"
+ },
+ {
+ entity: "orderof;",
+ value: "U+02134"
+ },
+ {
+ entity: "ordf;",
+ value: "U+000AA"
+ },
+ {
+ entity: "ordf",
+ value: "U+000AA"
+ },
+ {
+ entity: "ordm;",
+ value: "U+000BA"
+ },
+ {
+ entity: "ordm",
+ value: "U+000BA"
+ },
+ {
+ entity: "origof;",
+ value: "U+022B6"
+ },
+ {
+ entity: "oror;",
+ value: "U+02A56"
+ },
+ {
+ entity: "orslope;",
+ value: "U+02A57"
+ },
+ {
+ entity: "orv;",
+ value: "U+02A5B"
+ },
+ {
+ entity: "oscr;",
+ value: "U+02134"
+ },
+ {
+ entity: "oslash;",
+ value: "U+000F8"
+ },
+ {
+ entity: "oslash",
+ value: "U+000F8"
+ },
+ {
+ entity: "osol;",
+ value: "U+02298"
+ },
+ {
+ entity: "otilde;",
+ value: "U+000F5"
+ },
+ {
+ entity: "otilde",
+ value: "U+000F5"
+ },
+ {
+ entity: "otimes;",
+ value: "U+02297"
+ },
+ {
+ entity: "otimesas;",
+ value: "U+02A36"
+ },
+ {
+ entity: "ouml;",
+ value: "U+000F6"
+ },
+ {
+ entity: "ouml",
+ value: "U+000F6"
+ },
+ {
+ entity: "ovbar;",
+ value: "U+0233D"
+ },
+ {
+ entity: "par;",
+ value: "U+02225"
+ },
+ {
+ entity: "para;",
+ value: "U+000B6"
+ },
+ {
+ entity: "para",
+ value: "U+000B6"
+ },
+ {
+ entity: "parallel;",
+ value: "U+02225"
+ },
+ {
+ entity: "parsim;",
+ value: "U+02AF3"
+ },
+ {
+ entity: "parsl;",
+ value: "U+02AFD"
+ },
+ {
+ entity: "part;",
+ value: "U+02202"
+ },
+ {
+ entity: "pcy;",
+ value: "U+0043F"
+ },
+ {
+ entity: "percnt;",
+ value: "U+00025"
+ },
+ {
+ entity: "period;",
+ value: "U+0002E"
+ },
+ {
+ entity: "permil;",
+ value: "U+02030"
+ },
+ {
+ entity: "perp;",
+ value: "U+022A5"
+ },
+ {
+ entity: "pertenk;",
+ value: "U+02031"
+ },
+ {
+ entity: "pfr;",
+ value: "U+1D52D"
+ },
+ {
+ entity: "phi;",
+ value: "U+003C6"
+ },
+ {
+ entity: "phiv;",
+ value: "U+003D5"
+ },
+ {
+ entity: "phmmat;",
+ value: "U+02133"
+ },
+ {
+ entity: "phone;",
+ value: "U+0260E"
+ },
+ {
+ entity: "pi;",
+ value: "U+003C0"
+ },
+ {
+ entity: "pitchfork;",
+ value: "U+022D4"
+ },
+ {
+ entity: "piv;",
+ value: "U+003D6"
+ },
+ {
+ entity: "planck;",
+ value: "U+0210F"
+ },
+ {
+ entity: "planckh;",
+ value: "U+0210E"
+ },
+ {
+ entity: "plankv;",
+ value: "U+0210F"
+ },
+ {
+ entity: "plus;",
+ value: "U+0002B"
+ },
+ {
+ entity: "plusacir;",
+ value: "U+02A23"
+ },
+ {
+ entity: "plusb;",
+ value: "U+0229E"
+ },
+ {
+ entity: "pluscir;",
+ value: "U+02A22"
+ },
+ {
+ entity: "plusdo;",
+ value: "U+02214"
+ },
+ {
+ entity: "plusdu;",
+ value: "U+02A25"
+ },
+ {
+ entity: "pluse;",
+ value: "U+02A72"
+ },
+ {
+ entity: "plusmn;",
+ value: "U+000B1"
+ },
+ {
+ entity: "plusmn",
+ value: "U+000B1"
+ },
+ {
+ entity: "plussim;",
+ value: "U+02A26"
+ },
+ {
+ entity: "plustwo;",
+ value: "U+02A27"
+ },
+ {
+ entity: "pm;",
+ value: "U+000B1"
+ },
+ {
+ entity: "pointint;",
+ value: "U+02A15"
+ },
+ {
+ entity: "popf;",
+ value: "U+1D561"
+ },
+ {
+ entity: "pound;",
+ value: "U+000A3"
+ },
+ {
+ entity: "pound",
+ value: "U+000A3"
+ },
+ {
+ entity: "pr;",
+ value: "U+0227A"
+ },
+ {
+ entity: "prE;",
+ value: "U+02AB3"
+ },
+ {
+ entity: "prap;",
+ value: "U+02AB7"
+ },
+ {
+ entity: "prcue;",
+ value: "U+0227C"
+ },
+ {
+ entity: "pre;",
+ value: "U+02AAF"
+ },
+ {
+ entity: "prec;",
+ value: "U+0227A"
+ },
+ {
+ entity: "precapprox;",
+ value: "U+02AB7"
+ },
+ {
+ entity: "preccurlyeq;",
+ value: "U+0227C"
+ },
+ {
+ entity: "preceq;",
+ value: "U+02AAF"
+ },
+ {
+ entity: "precnapprox;",
+ value: "U+02AB9"
+ },
+ {
+ entity: "precneqq;",
+ value: "U+02AB5"
+ },
+ {
+ entity: "precnsim;",
+ value: "U+022E8"
+ },
+ {
+ entity: "precsim;",
+ value: "U+0227E"
+ },
+ {
+ entity: "prime;",
+ value: "U+02032"
+ },
+ {
+ entity: "primes;",
+ value: "U+02119"
+ },
+ {
+ entity: "prnE;",
+ value: "U+02AB5"
+ },
+ {
+ entity: "prnap;",
+ value: "U+02AB9"
+ },
+ {
+ entity: "prnsim;",
+ value: "U+022E8"
+ },
+ {
+ entity: "prod;",
+ value: "U+0220F"
+ },
+ {
+ entity: "profalar;",
+ value: "U+0232E"
+ },
+ {
+ entity: "profline;",
+ value: "U+02312"
+ },
+ {
+ entity: "profsurf;",
+ value: "U+02313"
+ },
+ {
+ entity: "prop;",
+ value: "U+0221D"
+ },
+ {
+ entity: "propto;",
+ value: "U+0221D"
+ },
+ {
+ entity: "prsim;",
+ value: "U+0227E"
+ },
+ {
+ entity: "prurel;",
+ value: "U+022B0"
+ },
+ {
+ entity: "pscr;",
+ value: "U+1D4C5"
+ },
+ {
+ entity: "psi;",
+ value: "U+003C8"
+ },
+ {
+ entity: "puncsp;",
+ value: "U+02008"
+ },
+ {
+ entity: "qfr;",
+ value: "U+1D52E"
+ },
+ {
+ entity: "qint;",
+ value: "U+02A0C"
+ },
+ {
+ entity: "qopf;",
+ value: "U+1D562"
+ },
+ {
+ entity: "qprime;",
+ value: "U+02057"
+ },
+ {
+ entity: "qscr;",
+ value: "U+1D4C6"
+ },
+ {
+ entity: "quaternions;",
+ value: "U+0210D"
+ },
+ {
+ entity: "quatint;",
+ value: "U+02A16"
+ },
+ {
+ entity: "quest;",
+ value: "U+0003F"
+ },
+ {
+ entity: "questeq;",
+ value: "U+0225F"
+ },
+ {
+ entity: "quot;",
+ value: "U+00022"
+ },
+ {
+ entity: "quot",
+ value: "U+00022"
+ },
+ {
+ entity: "rAarr;",
+ value: "U+021DB"
+ },
+ {
+ entity: "rArr;",
+ value: "U+021D2"
+ },
+ {
+ entity: "rAtail;",
+ value: "U+0291C"
+ },
+ {
+ entity: "rBarr;",
+ value: "U+0290F"
+ },
+ {
+ entity: "rHar;",
+ value: "U+02964"
+ },
+ {
+ entity: "racute;",
+ value: "U+00155"
+ },
+ {
+ entity: "radic;",
+ value: "U+0221A"
+ },
+ {
+ entity: "raemptyv;",
+ value: "U+029B3"
+ },
+ {
+ entity: "rang;",
+ value: "U+027E9"
+ },
+ {
+ entity: "rangd;",
+ value: "U+02992"
+ },
+ {
+ entity: "range;",
+ value: "U+029A5"
+ },
+ {
+ entity: "rangle;",
+ value: "U+027E9"
+ },
+ {
+ entity: "raquo;",
+ value: "U+000BB"
+ },
+ {
+ entity: "raquo",
+ value: "U+000BB"
+ },
+ {
+ entity: "rarr;",
+ value: "U+02192"
+ },
+ {
+ entity: "rarrap;",
+ value: "U+02975"
+ },
+ {
+ entity: "rarrb;",
+ value: "U+021E5"
+ },
+ {
+ entity: "rarrbfs;",
+ value: "U+02920"
+ },
+ {
+ entity: "rarrc;",
+ value: "U+02933"
+ },
+ {
+ entity: "rarrfs;",
+ value: "U+0291E"
+ },
+ {
+ entity: "rarrhk;",
+ value: "U+021AA"
+ },
+ {
+ entity: "rarrlp;",
+ value: "U+021AC"
+ },
+ {
+ entity: "rarrpl;",
+ value: "U+02945"
+ },
+ {
+ entity: "rarrsim;",
+ value: "U+02974"
+ },
+ {
+ entity: "rarrtl;",
+ value: "U+021A3"
+ },
+ {
+ entity: "rarrw;",
+ value: "U+0219D"
+ },
+ {
+ entity: "ratail;",
+ value: "U+0291A"
+ },
+ {
+ entity: "ratio;",
+ value: "U+02236"
+ },
+ {
+ entity: "rationals;",
+ value: "U+0211A"
+ },
+ {
+ entity: "rbarr;",
+ value: "U+0290D"
+ },
+ {
+ entity: "rbbrk;",
+ value: "U+02773"
+ },
+ {
+ entity: "rbrace;",
+ value: "U+0007D"
+ },
+ {
+ entity: "rbrack;",
+ value: "U+0005D"
+ },
+ {
+ entity: "rbrke;",
+ value: "U+0298C"
+ },
+ {
+ entity: "rbrksld;",
+ value: "U+0298E"
+ },
+ {
+ entity: "rbrkslu;",
+ value: "U+02990"
+ },
+ {
+ entity: "rcaron;",
+ value: "U+00159"
+ },
+ {
+ entity: "rcedil;",
+ value: "U+00157"
+ },
+ {
+ entity: "rceil;",
+ value: "U+02309"
+ },
+ {
+ entity: "rcub;",
+ value: "U+0007D"
+ },
+ {
+ entity: "rcy;",
+ value: "U+00440"
+ },
+ {
+ entity: "rdca;",
+ value: "U+02937"
+ },
+ {
+ entity: "rdldhar;",
+ value: "U+02969"
+ },
+ {
+ entity: "rdquo;",
+ value: "U+0201D"
+ },
+ {
+ entity: "rdquor;",
+ value: "U+0201D"
+ },
+ {
+ entity: "rdsh;",
+ value: "U+021B3"
+ },
+ {
+ entity: "real;",
+ value: "U+0211C"
+ },
+ {
+ entity: "realine;",
+ value: "U+0211B"
+ },
+ {
+ entity: "realpart;",
+ value: "U+0211C"
+ },
+ {
+ entity: "reals;",
+ value: "U+0211D"
+ },
+ {
+ entity: "rect;",
+ value: "U+025AD"
+ },
+ {
+ entity: "reg;",
+ value: "U+000AE"
+ },
+ {
+ entity: "reg",
+ value: "U+000AE"
+ },
+ {
+ entity: "rfisht;",
+ value: "U+0297D"
+ },
+ {
+ entity: "rfloor;",
+ value: "U+0230B"
+ },
+ {
+ entity: "rfr;",
+ value: "U+1D52F"
+ },
+ {
+ entity: "rhard;",
+ value: "U+021C1"
+ },
+ {
+ entity: "rharu;",
+ value: "U+021C0"
+ },
+ {
+ entity: "rharul;",
+ value: "U+0296C"
+ },
+ {
+ entity: "rho;",
+ value: "U+003C1"
+ },
+ {
+ entity: "rhov;",
+ value: "U+003F1"
+ },
+ {
+ entity: "rightarrow;",
+ value: "U+02192"
+ },
+ {
+ entity: "rightarrowtail;",
+ value: "U+021A3"
+ },
+ {
+ entity: "rightharpoondown;",
+ value: "U+021C1"
+ },
+ {
+ entity: "rightharpoonup;",
+ value: "U+021C0"
+ },
+ {
+ entity: "rightleftarrows;",
+ value: "U+021C4"
+ },
+ {
+ entity: "rightleftharpoons;",
+ value: "U+021CC"
+ },
+ {
+ entity: "rightrightarrows;",
+ value: "U+021C9"
+ },
+ {
+ entity: "rightsquigarrow;",
+ value: "U+0219D"
+ },
+ {
+ entity: "rightthreetimes;",
+ value: "U+022CC"
+ },
+ {
+ entity: "ring;",
+ value: "U+002DA"
+ },
+ {
+ entity: "risingdotseq;",
+ value: "U+02253"
+ },
+ {
+ entity: "rlarr;",
+ value: "U+021C4"
+ },
+ {
+ entity: "rlhar;",
+ value: "U+021CC"
+ },
+ {
+ entity: "rlm;",
+ value: "U+0200F"
+ },
+ {
+ entity: "rmoust;",
+ value: "U+023B1"
+ },
+ {
+ entity: "rmoustache;",
+ value: "U+023B1"
+ },
+ {
+ entity: "rnmid;",
+ value: "U+02AEE"
+ },
+ {
+ entity: "roang;",
+ value: "U+027ED"
+ },
+ {
+ entity: "roarr;",
+ value: "U+021FE"
+ },
+ {
+ entity: "robrk;",
+ value: "U+027E7"
+ },
+ {
+ entity: "ropar;",
+ value: "U+02986"
+ },
+ {
+ entity: "ropf;",
+ value: "U+1D563"
+ },
+ {
+ entity: "roplus;",
+ value: "U+02A2E"
+ },
+ {
+ entity: "rotimes;",
+ value: "U+02A35"
+ },
+ {
+ entity: "rpar;",
+ value: "U+00029"
+ },
+ {
+ entity: "rpargt;",
+ value: "U+02994"
+ },
+ {
+ entity: "rppolint;",
+ value: "U+02A12"
+ },
+ {
+ entity: "rrarr;",
+ value: "U+021C9"
+ },
+ {
+ entity: "rsaquo;",
+ value: "U+0203A"
+ },
+ {
+ entity: "rscr;",
+ value: "U+1D4C7"
+ },
+ {
+ entity: "rsh;",
+ value: "U+021B1"
+ },
+ {
+ entity: "rsqb;",
+ value: "U+0005D"
+ },
+ {
+ entity: "rsquo;",
+ value: "U+02019"
+ },
+ {
+ entity: "rsquor;",
+ value: "U+02019"
+ },
+ {
+ entity: "rthree;",
+ value: "U+022CC"
+ },
+ {
+ entity: "rtimes;",
+ value: "U+022CA"
+ },
+ {
+ entity: "rtri;",
+ value: "U+025B9"
+ },
+ {
+ entity: "rtrie;",
+ value: "U+022B5"
+ },
+ {
+ entity: "rtrif;",
+ value: "U+025B8"
+ },
+ {
+ entity: "rtriltri;",
+ value: "U+029CE"
+ },
+ {
+ entity: "ruluhar;",
+ value: "U+02968"
+ },
+ {
+ entity: "rx;",
+ value: "U+0211E"
+ },
+ {
+ entity: "sacute;",
+ value: "U+0015B"
+ },
+ {
+ entity: "sbquo;",
+ value: "U+0201A"
+ },
+ {
+ entity: "sc;",
+ value: "U+0227B"
+ },
+ {
+ entity: "scE;",
+ value: "U+02AB4"
+ },
+ {
+ entity: "scap;",
+ value: "U+02AB8"
+ },
+ {
+ entity: "scaron;",
+ value: "U+00161"
+ },
+ {
+ entity: "sccue;",
+ value: "U+0227D"
+ },
+ {
+ entity: "sce;",
+ value: "U+02AB0"
+ },
+ {
+ entity: "scedil;",
+ value: "U+0015F"
+ },
+ {
+ entity: "scirc;",
+ value: "U+0015D"
+ },
+ {
+ entity: "scnE;",
+ value: "U+02AB6"
+ },
+ {
+ entity: "scnap;",
+ value: "U+02ABA"
+ },
+ {
+ entity: "scnsim;",
+ value: "U+022E9"
+ },
+ {
+ entity: "scpolint;",
+ value: "U+02A13"
+ },
+ {
+ entity: "scsim;",
+ value: "U+0227F"
+ },
+ {
+ entity: "scy;",
+ value: "U+00441"
+ },
+ {
+ entity: "sdot;",
+ value: "U+022C5"
+ },
+ {
+ entity: "sdotb;",
+ value: "U+022A1"
+ },
+ {
+ entity: "sdote;",
+ value: "U+02A66"
+ },
+ {
+ entity: "seArr;",
+ value: "U+021D8"
+ },
+ {
+ entity: "searhk;",
+ value: "U+02925"
+ },
+ {
+ entity: "searr;",
+ value: "U+02198"
+ },
+ {
+ entity: "searrow;",
+ value: "U+02198"
+ },
+ {
+ entity: "sect;",
+ value: "U+000A7"
+ },
+ {
+ entity: "sect",
+ value: "U+000A7"
+ },
+ {
+ entity: "semi;",
+ value: "U+0003B"
+ },
+ {
+ entity: "seswar;",
+ value: "U+02929"
+ },
+ {
+ entity: "setminus;",
+ value: "U+02216"
+ },
+ {
+ entity: "setmn;",
+ value: "U+02216"
+ },
+ {
+ entity: "sext;",
+ value: "U+02736"
+ },
+ {
+ entity: "sfr;",
+ value: "U+1D530"
+ },
+ {
+ entity: "sfrown;",
+ value: "U+02322"
+ },
+ {
+ entity: "sharp;",
+ value: "U+0266F"
+ },
+ {
+ entity: "shchcy;",
+ value: "U+00449"
+ },
+ {
+ entity: "shcy;",
+ value: "U+00448"
+ },
+ {
+ entity: "shortmid;",
+ value: "U+02223"
+ },
+ {
+ entity: "shortparallel;",
+ value: "U+02225"
+ },
+ {
+ entity: "shy;",
+ value: "U+000AD "
+ },
+ {
+ entity: "shy",
+ value: "U+000AD "
+ },
+ {
+ entity: "sigma;",
+ value: "U+003C3"
+ },
+ {
+ entity: "sigmaf;",
+ value: "U+003C2"
+ },
+ {
+ entity: "sigmav;",
+ value: "U+003C2"
+ },
+ {
+ entity: "sim;",
+ value: "U+0223C"
+ },
+ {
+ entity: "simdot;",
+ value: "U+02A6A"
+ },
+ {
+ entity: "sime;",
+ value: "U+02243"
+ },
+ {
+ entity: "simeq;",
+ value: "U+02243"
+ },
+ {
+ entity: "simg;",
+ value: "U+02A9E"
+ },
+ {
+ entity: "simgE;",
+ value: "U+02AA0"
+ },
+ {
+ entity: "siml;",
+ value: "U+02A9D"
+ },
+ {
+ entity: "simlE;",
+ value: "U+02A9F"
+ },
+ {
+ entity: "simne;",
+ value: "U+02246"
+ },
+ {
+ entity: "simplus;",
+ value: "U+02A24"
+ },
+ {
+ entity: "simrarr;",
+ value: "U+02972"
+ },
+ {
+ entity: "slarr;",
+ value: "U+02190"
+ },
+ {
+ entity: "smallsetminus;",
+ value: "U+02216"
+ },
+ {
+ entity: "smashp;",
+ value: "U+02A33"
+ },
+ {
+ entity: "smeparsl;",
+ value: "U+029E4"
+ },
+ {
+ entity: "smid;",
+ value: "U+02223"
+ },
+ {
+ entity: "smile;",
+ value: "U+02323"
+ },
+ {
+ entity: "smt;",
+ value: "U+02AAA"
+ },
+ {
+ entity: "smte;",
+ value: "U+02AAC"
+ },
+ {
+ entity: "softcy;",
+ value: "U+0044C"
+ },
+ {
+ entity: "sol;",
+ value: "U+0002F"
+ },
+ {
+ entity: "solb;",
+ value: "U+029C4"
+ },
+ {
+ entity: "solbar;",
+ value: "U+0233F"
+ },
+ {
+ entity: "sopf;",
+ value: "U+1D564"
+ },
+ {
+ entity: "spades;",
+ value: "U+02660"
+ },
+ {
+ entity: "spadesuit;",
+ value: "U+02660"
+ },
+ {
+ entity: "spar;",
+ value: "U+02225"
+ },
+ {
+ entity: "sqcap;",
+ value: "U+02293"
+ },
+ {
+ entity: "sqcup;",
+ value: "U+02294"
+ },
+ {
+ entity: "sqsub;",
+ value: "U+0228F"
+ },
+ {
+ entity: "sqsube;",
+ value: "U+02291"
+ },
+ {
+ entity: "sqsubset;",
+ value: "U+0228F"
+ },
+ {
+ entity: "sqsubseteq;",
+ value: "U+02291"
+ },
+ {
+ entity: "sqsup;",
+ value: "U+02290"
+ },
+ {
+ entity: "sqsupe;",
+ value: "U+02292"
+ },
+ {
+ entity: "sqsupset;",
+ value: "U+02290"
+ },
+ {
+ entity: "sqsupseteq;",
+ value: "U+02292"
+ },
+ {
+ entity: "squ;",
+ value: "U+025A1"
+ },
+ {
+ entity: "square;",
+ value: "U+025A1"
+ },
+ {
+ entity: "squarf;",
+ value: "U+025AA"
+ },
+ {
+ entity: "squf;",
+ value: "U+025AA"
+ },
+ {
+ entity: "srarr;",
+ value: "U+02192"
+ },
+ {
+ entity: "sscr;",
+ value: "U+1D4C8"
+ },
+ {
+ entity: "ssetmn;",
+ value: "U+02216"
+ },
+ {
+ entity: "ssmile;",
+ value: "U+02323"
+ },
+ {
+ entity: "sstarf;",
+ value: "U+022C6"
+ },
+ {
+ entity: "star;",
+ value: "U+02606"
+ },
+ {
+ entity: "starf;",
+ value: "U+02605"
+ },
+ {
+ entity: "straightepsilon;",
+ value: "U+003F5"
+ },
+ {
+ entity: "straightphi;",
+ value: "U+003D5"
+ },
+ {
+ entity: "strns;",
+ value: "U+000AF"
+ },
+ {
+ entity: "sub;",
+ value: "U+02282"
+ },
+ {
+ entity: "subE;",
+ value: "U+02AC5"
+ },
+ {
+ entity: "subdot;",
+ value: "U+02ABD"
+ },
+ {
+ entity: "sube;",
+ value: "U+02286"
+ },
+ {
+ entity: "subedot;",
+ value: "U+02AC3"
+ },
+ {
+ entity: "submult;",
+ value: "U+02AC1"
+ },
+ {
+ entity: "subnE;",
+ value: "U+02ACB"
+ },
+ {
+ entity: "subne;",
+ value: "U+0228A"
+ },
+ {
+ entity: "subplus;",
+ value: "U+02ABF"
+ },
+ {
+ entity: "subrarr;",
+ value: "U+02979"
+ },
+ {
+ entity: "subset;",
+ value: "U+02282"
+ },
+ {
+ entity: "subseteq;",
+ value: "U+02286"
+ },
+ {
+ entity: "subseteqq;",
+ value: "U+02AC5"
+ },
+ {
+ entity: "subsetneq;",
+ value: "U+0228A"
+ },
+ {
+ entity: "subsetneqq;",
+ value: "U+02ACB"
+ },
+ {
+ entity: "subsim;",
+ value: "U+02AC7"
+ },
+ {
+ entity: "subsub;",
+ value: "U+02AD5"
+ },
+ {
+ entity: "subsup;",
+ value: "U+02AD3"
+ },
+ {
+ entity: "succ;",
+ value: "U+0227B"
+ },
+ {
+ entity: "succapprox;",
+ value: "U+02AB8"
+ },
+ {
+ entity: "succcurlyeq;",
+ value: "U+0227D"
+ },
+ {
+ entity: "succeq;",
+ value: "U+02AB0"
+ },
+ {
+ entity: "succnapprox;",
+ value: "U+02ABA"
+ },
+ {
+ entity: "succneqq;",
+ value: "U+02AB6"
+ },
+ {
+ entity: "succnsim;",
+ value: "U+022E9"
+ },
+ {
+ entity: "succsim;",
+ value: "U+0227F"
+ },
+ {
+ entity: "sum;",
+ value: "U+02211"
+ },
+ {
+ entity: "sung;",
+ value: "U+0266A"
+ },
+ {
+ entity: "sup1;",
+ value: "U+000B9"
+ },
+ {
+ entity: "sup1",
+ value: "U+000B9"
+ },
+ {
+ entity: "sup2;",
+ value: "U+000B2"
+ },
+ {
+ entity: "sup2",
+ value: "U+000B2"
+ },
+ {
+ entity: "sup3;",
+ value: "U+000B3"
+ },
+ {
+ entity: "sup3",
+ value: "U+000B3"
+ },
+ {
+ entity: "sup;",
+ value: "U+02283"
+ },
+ {
+ entity: "supE;",
+ value: "U+02AC6"
+ },
+ {
+ entity: "supdot;",
+ value: "U+02ABE"
+ },
+ {
+ entity: "supdsub;",
+ value: "U+02AD8"
+ },
+ {
+ entity: "supe;",
+ value: "U+02287"
+ },
+ {
+ entity: "supedot;",
+ value: "U+02AC4"
+ },
+ {
+ entity: "suphsol;",
+ value: "U+027C9"
+ },
+ {
+ entity: "suphsub;",
+ value: "U+02AD7"
+ },
+ {
+ entity: "suplarr;",
+ value: "U+0297B"
+ },
+ {
+ entity: "supmult;",
+ value: "U+02AC2"
+ },
+ {
+ entity: "supnE;",
+ value: "U+02ACC"
+ },
+ {
+ entity: "supne;",
+ value: "U+0228B"
+ },
+ {
+ entity: "supplus;",
+ value: "U+02AC0"
+ },
+ {
+ entity: "supset;",
+ value: "U+02283"
+ },
+ {
+ entity: "supseteq;",
+ value: "U+02287"
+ },
+ {
+ entity: "supseteqq;",
+ value: "U+02AC6"
+ },
+ {
+ entity: "supsetneq;",
+ value: "U+0228B"
+ },
+ {
+ entity: "supsetneqq;",
+ value: "U+02ACC"
+ },
+ {
+ entity: "supsim;",
+ value: "U+02AC8"
+ },
+ {
+ entity: "supsub;",
+ value: "U+02AD4"
+ },
+ {
+ entity: "supsup;",
+ value: "U+02AD6"
+ },
+ {
+ entity: "swArr;",
+ value: "U+021D9"
+ },
+ {
+ entity: "swarhk;",
+ value: "U+02926"
+ },
+ {
+ entity: "swarr;",
+ value: "U+02199"
+ },
+ {
+ entity: "swarrow;",
+ value: "U+02199"
+ },
+ {
+ entity: "swnwar;",
+ value: "U+0292A"
+ },
+ {
+ entity: "szlig;",
+ value: "U+000DF"
+ },
+ {
+ entity: "szlig",
+ value: "U+000DF"
+ },
+ {
+ entity: "target;",
+ value: "U+02316"
+ },
+ {
+ entity: "tau;",
+ value: "U+003C4"
+ },
+ {
+ entity: "tbrk;",
+ value: "U+023B4"
+ },
+ {
+ entity: "tcaron;",
+ value: "U+00165"
+ },
+ {
+ entity: "tcedil;",
+ value: "U+00163"
+ },
+ {
+ entity: "tcy;",
+ value: "U+00442"
+ },
+ {
+ entity: "tdot;",
+ value: "U+020DB"
+ },
+ {
+ entity: "telrec;",
+ value: "U+02315"
+ },
+ {
+ entity: "tfr;",
+ value: "U+1D531"
+ },
+ {
+ entity: "there4;",
+ value: "U+02234"
+ },
+ {
+ entity: "therefore;",
+ value: "U+02234"
+ },
+ {
+ entity: "theta;",
+ value: "U+003B8"
+ },
+ {
+ entity: "thetasym;",
+ value: "U+003D1"
+ },
+ {
+ entity: "thetav;",
+ value: "U+003D1"
+ },
+ {
+ entity: "thickapprox;",
+ value: "U+02248"
+ },
+ {
+ entity: "thicksim;",
+ value: "U+0223C"
+ },
+ {
+ entity: "thinsp;",
+ value: "U+02009"
+ },
+ {
+ entity: "thkap;",
+ value: "U+02248"
+ },
+ {
+ entity: "thksim;",
+ value: "U+0223C"
+ },
+ {
+ entity: "thorn;",
+ value: "U+000FE"
+ },
+ {
+ entity: "thorn",
+ value: "U+000FE"
+ },
+ {
+ entity: "tilde;",
+ value: "U+002DC"
+ },
+ {
+ entity: "times;",
+ value: "U+000D7"
+ },
+ {
+ entity: "times",
+ value: "U+000D7"
+ },
+ {
+ entity: "timesb;",
+ value: "U+022A0"
+ },
+ {
+ entity: "timesbar;",
+ value: "U+02A31"
+ },
+ {
+ entity: "timesd;",
+ value: "U+02A30"
+ },
+ {
+ entity: "tint;",
+ value: "U+0222D"
+ },
+ {
+ entity: "toea;",
+ value: "U+02928"
+ },
+ {
+ entity: "top;",
+ value: "U+022A4"
+ },
+ {
+ entity: "topbot;",
+ value: "U+02336"
+ },
+ {
+ entity: "topcir;",
+ value: "U+02AF1"
+ },
+ {
+ entity: "topf;",
+ value: "U+1D565"
+ },
+ {
+ entity: "topfork;",
+ value: "U+02ADA"
+ },
+ {
+ entity: "tosa;",
+ value: "U+02929"
+ },
+ {
+ entity: "tprime;",
+ value: "U+02034"
+ },
+ {
+ entity: "trade;",
+ value: "U+02122"
+ },
+ {
+ entity: "triangle;",
+ value: "U+025B5"
+ },
+ {
+ entity: "triangledown;",
+ value: "U+025BF"
+ },
+ {
+ entity: "triangleleft;",
+ value: "U+025C3"
+ },
+ {
+ entity: "trianglelefteq;",
+ value: "U+022B4"
+ },
+ {
+ entity: "triangleq;",
+ value: "U+0225C"
+ },
+ {
+ entity: "triangleright;",
+ value: "U+025B9"
+ },
+ {
+ entity: "trianglerighteq;",
+ value: "U+022B5"
+ },
+ {
+ entity: "tridot;",
+ value: "U+025EC"
+ },
+ {
+ entity: "trie;",
+ value: "U+0225C"
+ },
+ {
+ entity: "triminus;",
+ value: "U+02A3A"
+ },
+ {
+ entity: "triplus;",
+ value: "U+02A39"
+ },
+ {
+ entity: "trisb;",
+ value: "U+029CD"
+ },
+ {
+ entity: "tritime;",
+ value: "U+02A3B"
+ },
+ {
+ entity: "trpezium;",
+ value: "U+023E2"
+ },
+ {
+ entity: "tscr;",
+ value: "U+1D4C9"
+ },
+ {
+ entity: "tscy;",
+ value: "U+00446"
+ },
+ {
+ entity: "tshcy;",
+ value: "U+0045B"
+ },
+ {
+ entity: "tstrok;",
+ value: "U+00167"
+ },
+ {
+ entity: "twixt;",
+ value: "U+0226C"
+ },
+ {
+ entity: "twoheadleftarrow;",
+ value: "U+0219E"
+ },
+ {
+ entity: "twoheadrightarrow;",
+ value: "U+021A0"
+ },
+ {
+ entity: "uArr;",
+ value: "U+021D1"
+ },
+ {
+ entity: "uHar;",
+ value: "U+02963"
+ },
+ {
+ entity: "uacute;",
+ value: "U+000FA"
+ },
+ {
+ entity: "uacute",
+ value: "U+000FA"
+ },
+ {
+ entity: "uarr;",
+ value: "U+02191"
+ },
+ {
+ entity: "ubrcy;",
+ value: "U+0045E"
+ },
+ {
+ entity: "ubreve;",
+ value: "U+0016D"
+ },
+ {
+ entity: "ucirc;",
+ value: "U+000FB"
+ },
+ {
+ entity: "ucirc",
+ value: "U+000FB"
+ },
+ {
+ entity: "ucy;",
+ value: "U+00443"
+ },
+ {
+ entity: "udarr;",
+ value: "U+021C5"
+ },
+ {
+ entity: "udblac;",
+ value: "U+00171"
+ },
+ {
+ entity: "udhar;",
+ value: "U+0296E"
+ },
+ {
+ entity: "ufisht;",
+ value: "U+0297E"
+ },
+ {
+ entity: "ufr;",
+ value: "U+1D532"
+ },
+ {
+ entity: "ugrave;",
+ value: "U+000F9"
+ },
+ {
+ entity: "ugrave",
+ value: "U+000F9"
+ },
+ {
+ entity: "uharl;",
+ value: "U+021BF"
+ },
+ {
+ entity: "uharr;",
+ value: "U+021BE"
+ },
+ {
+ entity: "uhblk;",
+ value: "U+02580"
+ },
+ {
+ entity: "ulcorn;",
+ value: "U+0231C"
+ },
+ {
+ entity: "ulcorner;",
+ value: "U+0231C"
+ },
+ {
+ entity: "ulcrop;",
+ value: "U+0230F"
+ },
+ {
+ entity: "ultri;",
+ value: "U+025F8"
+ },
+ {
+ entity: "umacr;",
+ value: "U+0016B"
+ },
+ {
+ entity: "uml;",
+ value: "U+000A8"
+ },
+ {
+ entity: "uml",
+ value: "U+000A8"
+ },
+ {
+ entity: "uogon;",
+ value: "U+00173"
+ },
+ {
+ entity: "uopf;",
+ value: "U+1D566"
+ },
+ {
+ entity: "uparrow;",
+ value: "U+02191"
+ },
+ {
+ entity: "updownarrow;",
+ value: "U+02195"
+ },
+ {
+ entity: "upharpoonleft;",
+ value: "U+021BF"
+ },
+ {
+ entity: "upharpoonright;",
+ value: "U+021BE"
+ },
+ {
+ entity: "uplus;",
+ value: "U+0228E"
+ },
+ {
+ entity: "upsi;",
+ value: "U+003C5"
+ },
+ {
+ entity: "upsih;",
+ value: "U+003D2"
+ },
+ {
+ entity: "upsilon;",
+ value: "U+003C5"
+ },
+ {
+ entity: "upuparrows;",
+ value: "U+021C8"
+ },
+ {
+ entity: "urcorn;",
+ value: "U+0231D"
+ },
+ {
+ entity: "urcorner;",
+ value: "U+0231D"
+ },
+ {
+ entity: "urcrop;",
+ value: "U+0230E"
+ },
+ {
+ entity: "uring;",
+ value: "U+0016F"
+ },
+ {
+ entity: "urtri;",
+ value: "U+025F9"
+ },
+ {
+ entity: "uscr;",
+ value: "U+1D4CA"
+ },
+ {
+ entity: "utdot;",
+ value: "U+022F0"
+ },
+ {
+ entity: "utilde;",
+ value: "U+00169"
+ },
+ {
+ entity: "utri;",
+ value: "U+025B5"
+ },
+ {
+ entity: "utrif;",
+ value: "U+025B4"
+ },
+ {
+ entity: "uuarr;",
+ value: "U+021C8"
+ },
+ {
+ entity: "uuml;",
+ value: "U+000FC"
+ },
+ {
+ entity: "uuml",
+ value: "U+000FC"
+ },
+ {
+ entity: "uwangle;",
+ value: "U+029A7"
+ },
+ {
+ entity: "vArr;",
+ value: "U+021D5"
+ },
+ {
+ entity: "vBar;",
+ value: "U+02AE8"
+ },
+ {
+ entity: "vBarv;",
+ value: "U+02AE9"
+ },
+ {
+ entity: "vDash;",
+ value: "U+022A8"
+ },
+ {
+ entity: "vangrt;",
+ value: "U+0299C"
+ },
+ {
+ entity: "varepsilon;",
+ value: "U+003F5"
+ },
+ {
+ entity: "varkappa;",
+ value: "U+003F0"
+ },
+ {
+ entity: "varnothing;",
+ value: "U+02205"
+ },
+ {
+ entity: "varphi;",
+ value: "U+003D5"
+ },
+ {
+ entity: "varpi;",
+ value: "U+003D6"
+ },
+ {
+ entity: "varpropto;",
+ value: "U+0221D"
+ },
+ {
+ entity: "varr;",
+ value: "U+02195"
+ },
+ {
+ entity: "varrho;",
+ value: "U+003F1"
+ },
+ {
+ entity: "varsigma;",
+ value: "U+003C2"
+ },
+ {
+ entity: "vartheta;",
+ value: "U+003D1"
+ },
+ {
+ entity: "vartriangleleft;",
+ value: "U+022B2"
+ },
+ {
+ entity: "vartriangleright;",
+ value: "U+022B3"
+ },
+ {
+ entity: "vcy;",
+ value: "U+00432"
+ },
+ {
+ entity: "vdash;",
+ value: "U+022A2"
+ },
+ {
+ entity: "vee;",
+ value: "U+02228"
+ },
+ {
+ entity: "veebar;",
+ value: "U+022BB"
+ },
+ {
+ entity: "veeeq;",
+ value: "U+0225A"
+ },
+ {
+ entity: "vellip;",
+ value: "U+022EE"
+ },
+ {
+ entity: "verbar;",
+ value: "U+0007C"
+ },
+ {
+ entity: "vert;",
+ value: "U+0007C"
+ },
+ {
+ entity: "vfr;",
+ value: "U+1D533"
+ },
+ {
+ entity: "vltri;",
+ value: "U+022B2"
+ },
+ {
+ entity: "vopf;",
+ value: "U+1D567"
+ },
+ {
+ entity: "vprop;",
+ value: "U+0221D"
+ },
+ {
+ entity: "vrtri;",
+ value: "U+022B3"
+ },
+ {
+ entity: "vscr;",
+ value: "U+1D4CB"
+ },
+ {
+ entity: "vzigzag;",
+ value: "U+0299A"
+ },
+ {
+ entity: "wcirc;",
+ value: "U+00175"
+ },
+ {
+ entity: "wedbar;",
+ value: "U+02A5F"
+ },
+ {
+ entity: "wedge;",
+ value: "U+02227"
+ },
+ {
+ entity: "wedgeq;",
+ value: "U+02259"
+ },
+ {
+ entity: "weierp;",
+ value: "U+02118"
+ },
+ {
+ entity: "wfr;",
+ value: "U+1D534"
+ },
+ {
+ entity: "wopf;",
+ value: "U+1D568"
+ },
+ {
+ entity: "wp;",
+ value: "U+02118"
+ },
+ {
+ entity: "wr;",
+ value: "U+02240"
+ },
+ {
+ entity: "wreath;",
+ value: "U+02240"
+ },
+ {
+ entity: "wscr;",
+ value: "U+1D4CC"
+ },
+ {
+ entity: "xcap;",
+ value: "U+022C2"
+ },
+ {
+ entity: "xcirc;",
+ value: "U+025EF"
+ },
+ {
+ entity: "xcup;",
+ value: "U+022C3"
+ },
+ {
+ entity: "xdtri;",
+ value: "U+025BD"
+ },
+ {
+ entity: "xfr;",
+ value: "U+1D535"
+ },
+ {
+ entity: "xhArr;",
+ value: "U+027FA"
+ },
+ {
+ entity: "xharr;",
+ value: "U+027F7"
+ },
+ {
+ entity: "xi;",
+ value: "U+003BE"
+ },
+ {
+ entity: "xlArr;",
+ value: "U+027F8"
+ },
+ {
+ entity: "xlarr;",
+ value: "U+027F5"
+ },
+ {
+ entity: "xmap;",
+ value: "U+027FC"
+ },
+ {
+ entity: "xnis;",
+ value: "U+022FB"
+ },
+ {
+ entity: "xodot;",
+ value: "U+02A00"
+ },
+ {
+ entity: "xopf;",
+ value: "U+1D569"
+ },
+ {
+ entity: "xoplus;",
+ value: "U+02A01"
+ },
+ {
+ entity: "xotime;",
+ value: "U+02A02"
+ },
+ {
+ entity: "xrArr;",
+ value: "U+027F9"
+ },
+ {
+ entity: "xrarr;",
+ value: "U+027F6"
+ },
+ {
+ entity: "xscr;",
+ value: "U+1D4CD"
+ },
+ {
+ entity: "xsqcup;",
+ value: "U+02A06"
+ },
+ {
+ entity: "xuplus;",
+ value: "U+02A04"
+ },
+ {
+ entity: "xutri;",
+ value: "U+025B3"
+ },
+ {
+ entity: "xvee;",
+ value: "U+022C1"
+ },
+ {
+ entity: "xwedge;",
+ value: "U+022C0"
+ },
+ {
+ entity: "yacute;",
+ value: "U+000FD"
+ },
+ {
+ entity: "yacute",
+ value: "U+000FD"
+ },
+ {
+ entity: "yacy;",
+ value: "U+0044F"
+ },
+ {
+ entity: "ycirc;",
+ value: "U+00177"
+ },
+ {
+ entity: "ycy;",
+ value: "U+0044B"
+ },
+ {
+ entity: "yen;",
+ value: "U+000A5"
+ },
+ {
+ entity: "yen",
+ value: "U+000A5"
+ },
+ {
+ entity: "yfr;",
+ value: "U+1D536"
+ },
+ {
+ entity: "yicy;",
+ value: "U+00457"
+ },
+ {
+ entity: "yopf;",
+ value: "U+1D56A"
+ },
+ {
+ entity: "yscr;",
+ value: "U+1D4CE"
+ },
+ {
+ entity: "yucy;",
+ value: "U+0044E"
+ },
+ {
+ entity: "yuml;",
+ value: "U+000FF"
+ },
+ {
+ entity: "yuml",
+ value: "U+000FF"
+ },
+ {
+ entity: "zacute;",
+ value: "U+0017A"
+ },
+ {
+ entity: "zcaron;",
+ value: "U+0017E"
+ },
+ {
+ entity: "zcy;",
+ value: "U+00437"
+ },
+ {
+ entity: "zdot;",
+ value: "U+0017C"
+ },
+ {
+ entity: "zeetrf;",
+ value: "U+02128"
+ },
+ {
+ entity: "zeta;",
+ value: "U+003B6"
+ },
+ {
+ entity: "zfr;",
+ value: "U+1D537"
+ },
+ {
+ entity: "zhcy;",
+ value: "U+00436"
+ },
+ {
+ entity: "zigrarr;",
+ value: "U+021DD"
+ },
+ {
+ entity: "zopf;",
+ value: "U+1D56B"
+ },
+ {
+ entity: "zscr;",
+ value: "U+1D4CF"
+ },
+ {
+ entity: "zwj;",
+ value: "U+0200D"
+ },
+ {
+ entity: "zwnj;",
+ value: "U+0200C"
+ }
+]
diff --git a/WebCore/html/HTMLFormattingElementList.cpp b/WebCore/html/HTMLFormattingElementList.cpp
index 0198261..d71cc8c 100644
--- a/WebCore/html/HTMLFormattingElementList.cpp
+++ b/WebCore/html/HTMLFormattingElementList.cpp
@@ -31,49 +31,6 @@
namespace WebCore {
-HTMLFormattingElementList::Entry::Entry(Element* element)
- : m_element(element)
-{
- ASSERT(element);
-}
-
-HTMLFormattingElementList::Entry::Entry(MarkerEntryType)
-{
-}
-
-HTMLFormattingElementList::Entry::~Entry()
-{
-}
-
-bool HTMLFormattingElementList::Entry::isMarker() const
-{
- return !m_element;
-}
-
-Element* HTMLFormattingElementList::Entry::element() const
-{
- // The fact that !m_element == isMarker() is an implementation detail
- // callers should check isMarker() before calling element().
- ASSERT(m_element);
- return m_element.get();
-}
-
-void HTMLFormattingElementList::Entry::replaceElement(PassRefPtr<Element> element)
-{
- ASSERT(m_element); // Once a marker, always a marker.
- m_element = element;
-}
-
-bool HTMLFormattingElementList::Entry::operator==(const Entry& other) const
-{
- return element() == other.element();
-}
-
-bool HTMLFormattingElementList::Entry::operator!=(const Entry& other) const
-{
- return element() != other.element();
-}
-
HTMLFormattingElementList::HTMLFormattingElementList()
{
}
@@ -101,7 +58,7 @@ bool HTMLFormattingElementList::contains(Element* element)
HTMLFormattingElementList::Entry* HTMLFormattingElementList::find(Element* element)
{
- size_t index = m_entries.find(element);
+ size_t index = m_entries.reverseFind(element);
if (index != notFound) {
// This is somewhat of a hack, and is why this method can't be const.
return &m_entries[index];
@@ -109,6 +66,42 @@ HTMLFormattingElementList::Entry* HTMLFormattingElementList::find(Element* eleme
return 0;
}
+HTMLFormattingElementList::Bookmark HTMLFormattingElementList::bookmarkFor(Element* element)
+{
+ size_t index = m_entries.reverseFind(element);
+ ASSERT(index != notFound);
+ Element* elementBefore = (index > 1) ? m_entries[index - 1].element() : 0;
+ Element* elementAfter = (index < m_entries.size() - 1) ? m_entries[index + 1].element() : 0;
+ return Bookmark(elementBefore, elementAfter);
+}
+
+void HTMLFormattingElementList::insertAt(Element* element, const Bookmark& bookmark)
+{
+ size_t beforeIndex = notFound;
+ if (bookmark.elementBefore()) {
+ beforeIndex = m_entries.reverseFind(bookmark.elementBefore());
+ ASSERT(beforeIndex != notFound);
+ }
+ size_t afterIndex = notFound;
+ if (bookmark.elementAfter()) {
+ afterIndex = m_entries.reverseFind(bookmark.elementAfter());
+ ASSERT(afterIndex != notFound);
+ }
+
+ if (!bookmark.elementBefore()) {
+ if (bookmark.elementAfter())
+ ASSERT(!afterIndex);
+ m_entries.prepend(element);
+ } else {
+ if (bookmark.elementAfter()) {
+ // Bookmarks are not general purpose. They're only for the Adoption
+ // Agency. Assume the bookmarked element was already removed.
+ ASSERT(beforeIndex + 1 == afterIndex);
+ }
+ m_entries.insert(beforeIndex + 1, element);
+ }
+}
+
void HTMLFormattingElementList::append(Element* element)
{
m_entries.append(element);
@@ -116,7 +109,7 @@ void HTMLFormattingElementList::append(Element* element)
void HTMLFormattingElementList::remove(Element* element)
{
- size_t index = m_entries.find(element);
+ size_t index = m_entries.reverseFind(element);
if (index != notFound)
m_entries.remove(index);
}
@@ -132,4 +125,19 @@ void HTMLFormattingElementList::clearToLastMarker()
m_entries.removeLast();
}
+#ifndef NDEBUG
+
+void HTMLFormattingElementList::show()
+{
+ for (unsigned i = 1; i <= m_entries.size(); ++i) {
+ const Entry& entry = m_entries[m_entries.size() - i];
+ if (entry.isMarker())
+ fprintf(stderr, "marker\n");
+ else
+ entry.element()->showNode();
+ }
+}
+
+#endif
+
}
diff --git a/WebCore/html/HTMLFormattingElementList.h b/WebCore/html/HTMLFormattingElementList.h
index da30f75..6b41da4 100644
--- a/WebCore/html/HTMLFormattingElementList.h
+++ b/WebCore/html/HTMLFormattingElementList.h
@@ -46,22 +46,58 @@ public:
// access to Entry::isMarker() and Entry::replaceElement() to do so.
class Entry {
public:
- Entry(Element*);
+ // Inline because they're hot and Vector<T> uses them.
+ explicit Entry(Element* element)
+ : m_element(element)
+ {
+ ASSERT(element);
+ }
enum MarkerEntryType { MarkerEntry };
- Entry(MarkerEntryType);
- ~Entry();
+ Entry(MarkerEntryType)
+ : m_element(0)
+ {
+ }
+ ~Entry() {}
+
+ bool isMarker() const { return !m_element; }
+
+ Element* element() const
+ {
+ // The fact that !m_element == isMarker() is an implementation detail
+ // callers should check isMarker() before calling element().
+ ASSERT(m_element);
+ return m_element.get();
+ }
+ void replaceElement(PassRefPtr<Element> element) { m_element = element; }
+
+ // Needed for use with Vector. These are super-hot and must be inline.
+ bool operator==(Element* element) const { return m_element == element; }
+ bool operator!=(Element* element) const { return m_element != element; }
- bool isMarker() const;
+ private:
+ RefPtr<Element> m_element;
+ };
+
+ class Bookmark {
+ public:
+ Bookmark(Element* before, Element* after)
+ : m_before(before)
+ , m_after(after)
+ {
+ }
- Element* element() const;
- void replaceElement(PassRefPtr<Element>);
+ void moveToAfter(Element* before)
+ {
+ m_before = before;
+ m_after = 0;
+ }
- // Needed for use with Vector.
- bool operator==(const Entry&) const;
- bool operator!=(const Entry&) const;
+ Element* elementBefore() const { return m_before; }
+ Element* elementAfter() const { return m_after; }
private:
- RefPtr<Element> m_element;
+ Element* m_before;
+ Element* m_after;
};
bool isEmpty() const { return !size(); }
@@ -74,11 +110,18 @@ public:
void append(Element*);
void remove(Element*);
+ Bookmark bookmarkFor(Element*);
+ void insertAt(Element*, const Bookmark&);
+
void appendMarker();
void clearToLastMarker();
- const Entry& operator[](size_t i) const { return m_entries[i]; }
- Entry& operator[](size_t i) { return m_entries[i]; }
+ const Entry& at(size_t i) const { return m_entries[i]; }
+ Entry& at(size_t i) { return m_entries[i]; }
+
+#ifndef NDEBUG
+ void show();
+#endif
private:
Vector<Entry> m_entries;
diff --git a/WebCore/html/HTMLFrameElement.idl b/WebCore/html/HTMLFrameElement.idl
index f1451f5..4a5268c 100644
--- a/WebCore/html/HTMLFrameElement.idl
+++ b/WebCore/html/HTMLFrameElement.idl
@@ -29,7 +29,7 @@ module html {
attribute [Reflect] DOMString name;
attribute [Reflect] boolean noResize;
attribute [Reflect] DOMString scrolling;
- attribute [ReflectURL] DOMString src;
+ attribute [Reflect,URL] DOMString src;
// Introduced in DOM Level 2:
readonly attribute [CheckFrameSecurity] Document contentDocument;
diff --git a/WebCore/html/HTMLImageElement.idl b/WebCore/html/HTMLImageElement.idl
index 0fc7271..1bf8a28 100644
--- a/WebCore/html/HTMLImageElement.idl
+++ b/WebCore/html/HTMLImageElement.idl
@@ -30,15 +30,15 @@ module html {
attribute long height;
attribute [Reflect] long hspace;
attribute [Reflect] boolean isMap;
- attribute [ReflectURL=longdesc] DOMString longDesc;
- attribute [ReflectURL] DOMString src;
+ attribute [Reflect,URL] DOMString longDesc;
+ attribute [Reflect,URL] DOMString src;
attribute [Reflect] DOMString useMap;
attribute [Reflect] long vspace;
attribute long width;
// Extensions
readonly attribute boolean complete;
- attribute [ReflectURL] DOMString lowsrc;
+ attribute [Reflect,URL] DOMString lowsrc;
readonly attribute long naturalHeight;
readonly attribute long naturalWidth;
readonly attribute long x;
diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp
index d6136d8..8502814 100644
--- a/WebCore/html/HTMLInputElement.cpp
+++ b/WebCore/html/HTMLInputElement.cpp
@@ -871,7 +871,7 @@ void HTMLInputElement::setInputType(const String& t)
registerForActivationCallbackIfNeeded();
if (didRespectHeightAndWidth != willRespectHeightAndWidth) {
- NamedNodeMap* map = mappedAttributes();
+ NamedNodeMap* map = attributeMap();
ASSERT(map);
if (Attribute* height = map->getAttributeItem(heightAttr))
attributeChanged(height, false);
diff --git a/WebCore/html/HTMLInputElement.h b/WebCore/html/HTMLInputElement.h
index 6791fa2..b055e73 100644
--- a/WebCore/html/HTMLInputElement.h
+++ b/WebCore/html/HTMLInputElement.h
@@ -124,6 +124,9 @@ public:
virtual void setValue(const String&, bool sendChangeEvent = false);
virtual void setValueForUser(const String&);
+ virtual const String& suggestedValue() const;
+ void setSuggestedValue(const String&);
+
double valueAsDate() const;
void setValueAsDate(double, ExceptionCode&);
@@ -239,9 +242,6 @@ private:
virtual const AtomicString& formControlType() const;
- virtual const String& suggestedValue() const;
- void setSuggestedValue(const String&);
-
virtual bool searchEventsShouldBeDispatched() const;
virtual bool saveFormControlState(String& value) const;
diff --git a/WebCore/html/HTMLInputElement.idl b/WebCore/html/HTMLInputElement.idl
index 9b6bbbf..b93f05c 100644
--- a/WebCore/html/HTMLInputElement.idl
+++ b/WebCore/html/HTMLInputElement.idl
@@ -51,7 +51,7 @@ module html {
// FIXME: The spec says this should be a long, not an unsigned long.
attribute unsigned long size; // Changed string -> long as part of DOM level 2
#endif
- attribute [ReflectURL] DOMString src;
+ attribute [Reflect,URL] DOMString src;
attribute [Reflect] DOMString step;
attribute [ConvertNullToNullString, JSCCustomGetter] DOMString type; // readonly dropped as part of DOM level 2
attribute [Reflect] DOMString useMap;
diff --git a/WebCore/html/HTMLLinkElement.cpp b/WebCore/html/HTMLLinkElement.cpp
index eff250a..bad236a 100644
--- a/WebCore/html/HTMLLinkElement.cpp
+++ b/WebCore/html/HTMLLinkElement.cpp
@@ -147,10 +147,13 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, RelAttribute
#if ENABLE(LINK_PREFETCH)
relAttribute.m_isLinkPrefetch = false;
#endif
+<<<<<<< HEAD
#ifdef ANDROID_APPLE_TOUCH_ICON
relAttribute.m_isTouchIcon = false;
relAttribute.m_isPrecomposedTouchIcon = false;
#endif
+=======
+>>>>>>> webkit.org at r63173
if (equalIgnoringCase(rel, "stylesheet"))
relAttribute.m_isStyleSheet = true;
else if (equalIgnoringCase(rel, "icon") || equalIgnoringCase(rel, "shortcut icon"))
diff --git a/WebCore/html/HTMLLinkElement.h b/WebCore/html/HTMLLinkElement.h
index 8fb93ba..cc8d2d1 100644
--- a/WebCore/html/HTMLLinkElement.h
+++ b/WebCore/html/HTMLLinkElement.h
@@ -41,10 +41,13 @@ public:
bool m_isIcon;
bool m_isAlternate;
bool m_isDNSPrefetch;
+<<<<<<< HEAD
#ifdef ANDROID_APPLE_TOUCH_ICON
bool m_isTouchIcon;
bool m_isPrecomposedTouchIcon;
#endif
+=======
+>>>>>>> webkit.org at r63173
#if ENABLE(LINK_PREFETCH)
bool m_isLinkPrefetch;
#endif
@@ -57,7 +60,12 @@ public:
#if ENABLE(LINK_PREFETCH)
, m_isLinkPrefetch(false)
#endif
+<<<<<<< HEAD
{ };
+=======
+ {
+ }
+>>>>>>> webkit.org at r63173
};
static PassRefPtr<HTMLLinkElement> create(const QualifiedName&, Document*, bool createdByParser);
diff --git a/WebCore/html/HTMLLinkElement.idl b/WebCore/html/HTMLLinkElement.idl
index a7e7d32..dfec24b 100644
--- a/WebCore/html/HTMLLinkElement.idl
+++ b/WebCore/html/HTMLLinkElement.idl
@@ -23,7 +23,7 @@ module html {
interface HTMLLinkElement : HTMLElement {
attribute [Reflect] boolean disabled;
attribute [Reflect] DOMString charset;
- attribute [ReflectURL] DOMString href;
+ attribute [Reflect,URL] DOMString href;
attribute [Reflect] DOMString hreflang;
attribute [Reflect] DOMString media;
attribute [Reflect] DOMString rel;
diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp
index fb024e0..b83d1cb 100644
--- a/WebCore/html/HTMLMediaElement.cpp
+++ b/WebCore/html/HTMLMediaElement.cpp
@@ -424,7 +424,7 @@ PassRefPtr<MediaError> HTMLMediaElement::error() const
KURL HTMLMediaElement::src() const
{
- return document()->completeURL(getAttribute(srcAttr));
+ return getNonEmptyURLAttribute(srcAttr);
}
void HTMLMediaElement::setSrc(const String& url)
@@ -545,14 +545,16 @@ void HTMLMediaElement::loadInternal()
void HTMLMediaElement::selectMediaResource()
{
+ enum Mode { attribute, children };
+ Mode mode = attribute;
+
// 1 - Set the networkState to NETWORK_NO_SOURCE
m_networkState = NETWORK_NO_SOURCE;
// 2 - Asynchronously await a stable state.
// 3 - ... the media element has neither a src attribute ...
- String mediaSrc = getAttribute(srcAttr);
- if (!mediaSrc) {
+ if (!hasAttribute(srcAttr)) {
// ... nor a source element child: ...
Node* node;
for (node = firstChild(); node; node = node->nextSibling()) {
@@ -568,6 +570,8 @@ void HTMLMediaElement::selectMediaResource()
ASSERT(!m_delayingTheLoadEvent);
return;
}
+
+ mode = children;
}
// 4
@@ -577,11 +581,17 @@ void HTMLMediaElement::selectMediaResource()
// 5
scheduleEvent(eventNames().loadstartEvent);
- // 6 - If the media element has a src attribute, then run these substeps
- ContentType contentType("");
- if (!mediaSrc.isNull()) {
- KURL mediaURL = document()->completeURL(mediaSrc);
+ // 6 - If mode is attribute, then run these substeps
+ if (mode == attribute) {
+ // If the src attribute's value is the empty string ... jump down to the failed step below
+ KURL mediaURL = getNonEmptyURLAttribute(srcAttr);
+ if (mediaURL.isEmpty()) {
+ noneSupported();
+ return;
+ }
+
if (isSafeToLoadURL(mediaURL, Complain) && dispatchBeforeLoadEvent(mediaURL.string())) {
+ ContentType contentType("");
m_loadState = LoadingFromSrcAttr;
loadResource(mediaURL, contentType);
} else
@@ -1474,9 +1484,12 @@ KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidSo
}
HTMLSourceElement* source = static_cast<HTMLSourceElement*>(node);
- if (!source->hasAttribute(srcAttr))
- goto check_again;
+ // If candidate does not have a src attribute, or if its src attribute's value is the empty string ... jump down to the failed step below
+ mediaURL = source->getNonEmptyURLAttribute(srcAttr);
+ if (mediaURL.isEmpty())
+ goto check_again;
+
if (source->hasAttribute(mediaAttr)) {
MediaQueryEvaluator screenEval("screen", document()->frame(), renderer() ? renderer()->style() : 0);
RefPtr<MediaList> media = MediaList::createAllowingDescriptionSyntax(source->media());
@@ -1490,7 +1503,6 @@ KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidSo
}
// Is it safe to load this url?
- mediaURL = source->src();
if (!isSafeToLoadURL(mediaURL, actionIfInvalid) || !dispatchBeforeLoadEvent(mediaURL.string()))
goto check_again;
diff --git a/WebCore/html/HTMLMediaElement.idl b/WebCore/html/HTMLMediaElement.idl
index 93430b4..baea577 100644
--- a/WebCore/html/HTMLMediaElement.idl
+++ b/WebCore/html/HTMLMediaElement.idl
@@ -30,7 +30,7 @@ interface [Conditional=VIDEO] HTMLMediaElement : HTMLElement {
readonly attribute MediaError error;
// network state
- attribute [ReflectURL] DOMString src;
+ attribute [Reflect,NonEmpty,URL] DOMString src;
readonly attribute DOMString currentSrc;
const unsigned short NETWORK_EMPTY = 0;
diff --git a/WebCore/html/HTMLObjectElement.cpp b/WebCore/html/HTMLObjectElement.cpp
index 0724ce6..d4bccc3 100644
--- a/WebCore/html/HTMLObjectElement.cpp
+++ b/WebCore/html/HTMLObjectElement.cpp
@@ -154,12 +154,6 @@ void HTMLObjectElement::attach()
if (!m_imageLoader)
m_imageLoader.set(new HTMLImageLoader(this));
m_imageLoader->updateFromElement();
- // updateForElement() may have changed us to use fallback content and called detach() and attach().
- if (m_useFallbackContent)
- return;
-
- if (renderer())
- toRenderImage(renderer())->setCachedImage(m_imageLoader->image());
}
}
diff --git a/WebCore/html/HTMLObjectElement.idl b/WebCore/html/HTMLObjectElement.idl
index ee0f1c6..e4d85b3 100644
--- a/WebCore/html/HTMLObjectElement.idl
+++ b/WebCore/html/HTMLObjectElement.idl
@@ -32,7 +32,7 @@ module html {
attribute [Reflect] DOMString border;
attribute [Reflect] DOMString codeBase;
attribute [Reflect] DOMString codeType;
- attribute [ReflectURL] DOMString data;
+ attribute [Reflect,URL] DOMString data;
attribute [Reflect] boolean declare;
attribute [Reflect] DOMString height;
attribute [Reflect] long hspace;
diff --git a/WebCore/html/HTMLPlugInElement.cpp b/WebCore/html/HTMLPlugInElement.cpp
index ffc6b64..7737dc4 100644
--- a/WebCore/html/HTMLPlugInElement.cpp
+++ b/WebCore/html/HTMLPlugInElement.cpp
@@ -51,6 +51,7 @@ HTMLPlugInElement::HTMLPlugInElement(const QualifiedName& tagName, Document* doc
: HTMLFrameOwnerElement(tagName, doc)
#if ENABLE(NETSCAPE_PLUGIN_API)
, m_NPObject(0)
+ , m_isCapturingMouseEvents(false)
#endif
{
}
@@ -70,6 +71,13 @@ HTMLPlugInElement::~HTMLPlugInElement()
void HTMLPlugInElement::detach()
{
m_instance.clear();
+
+ if (m_isCapturingMouseEvents) {
+ if (Frame* frame = document()->frame())
+ frame->eventHandler()->setCapturingMouseEventsNode(0);
+ m_isCapturingMouseEvents = false;
+ }
+
HTMLFrameOwnerElement::detach();
}
@@ -142,14 +150,7 @@ void HTMLPlugInElement::defaultEventHandler(Event* event)
RenderObject* r = renderer();
if (r && r->isEmbeddedObject() && toRenderEmbeddedObject(r)->showsMissingPluginIndicator()) {
- if (event->type() != eventNames().clickEvent)
- return;
-
- Page* page = document()->page();
- if (!page)
- return;
-
- page->chrome()->client()->missingPluginButtonClicked(this);
+ toRenderEmbeddedObject(r)->handleMissingPluginIndicatorEvent(event);
return;
}
diff --git a/WebCore/html/HTMLPlugInElement.h b/WebCore/html/HTMLPlugInElement.h
index 525dc40..e4f3474 100644
--- a/WebCore/html/HTMLPlugInElement.h
+++ b/WebCore/html/HTMLPlugInElement.h
@@ -44,6 +44,9 @@ public:
NPObject* getNPObject();
#endif
+ bool isCapturingMouseEvents() const { return m_isCapturingMouseEvents; }
+ void setIsCapturingMouseEvents(bool capturing) { m_isCapturingMouseEvents = capturing; }
+
protected:
HTMLPlugInElement(const QualifiedName& tagName, Document*);
@@ -78,6 +81,7 @@ private:
#if ENABLE(NETSCAPE_PLUGIN_API)
NPObject* m_NPObject;
#endif
+ bool m_isCapturingMouseEvents;
};
} // namespace WebCore
diff --git a/WebCore/html/HTMLScriptElement.idl b/WebCore/html/HTMLScriptElement.idl
index 399b5cd..6b7c86d 100644
--- a/WebCore/html/HTMLScriptElement.idl
+++ b/WebCore/html/HTMLScriptElement.idl
@@ -26,7 +26,7 @@ module html {
attribute [Reflect] DOMString charset;
attribute [Reflect] boolean async;
attribute [Reflect] boolean defer;
- attribute [ReflectURL] DOMString src;
+ attribute [Reflect,URL] DOMString src;
attribute [Reflect] DOMString type;
};
}
diff --git a/WebCore/html/HTMLSourceElement.cpp b/WebCore/html/HTMLSourceElement.cpp
index f6ffd9f..2c83fed 100644
--- a/WebCore/html/HTMLSourceElement.cpp
+++ b/WebCore/html/HTMLSourceElement.cpp
@@ -64,7 +64,7 @@ void HTMLSourceElement::insertedIntoDocument()
KURL HTMLSourceElement::src() const
{
- return document()->completeURL(getAttribute(srcAttr));
+ return getNonEmptyURLAttribute(srcAttr);
}
void HTMLSourceElement::setSrc(const String& url)
@@ -110,5 +110,11 @@ void HTMLSourceElement::errorEventTimerFired(Timer<HTMLSourceElement>*)
dispatchEvent(Event::create(eventNames().errorEvent, false, true));
}
+bool HTMLSourceElement::isURLAttribute(Attribute* attribute) const
+{
+ return attribute->name() == srcAttr;
+}
+
}
+
#endif
diff --git a/WebCore/html/HTMLSourceElement.h b/WebCore/html/HTMLSourceElement.h
index e11c9d0..6cca64e 100644
--- a/WebCore/html/HTMLSourceElement.h
+++ b/WebCore/html/HTMLSourceElement.h
@@ -54,7 +54,8 @@ private:
virtual int tagPriority() const { return 0; }
virtual void insertedIntoDocument();
-
+ virtual bool isURLAttribute(Attribute*) const;
+
void errorEventTimerFired(Timer<HTMLSourceElement>*);
Timer<HTMLSourceElement> m_errorEventTimer;
diff --git a/WebCore/html/HTMLSourceElement.idl b/WebCore/html/HTMLSourceElement.idl
index 863e180..f7229f1 100644
--- a/WebCore/html/HTMLSourceElement.idl
+++ b/WebCore/html/HTMLSourceElement.idl
@@ -25,7 +25,7 @@
module html {
interface [Conditional=VIDEO] HTMLSourceElement : HTMLElement {
- attribute DOMString src;
+ attribute [Reflect,NonEmpty,URL] DOMString src;
attribute DOMString type;
attribute DOMString media;
};
diff --git a/WebCore/html/HTMLStyleElement.cpp b/WebCore/html/HTMLStyleElement.cpp
index 79bafe6..4fa08ad 100644
--- a/WebCore/html/HTMLStyleElement.cpp
+++ b/WebCore/html/HTMLStyleElement.cpp
@@ -27,6 +27,7 @@
#include "Attribute.h"
#include "Document.h"
#include "HTMLNames.h"
+#include "ScriptableDocumentParser.h"
#include "ScriptEventListener.h"
namespace WebCore {
@@ -37,8 +38,11 @@ inline HTMLStyleElement::HTMLStyleElement(const QualifiedName& tagName, Document
: HTMLElement(tagName, document)
, m_loading(false)
, m_createdByParser(createdByParser)
+ , m_startLineNumber(0)
{
ASSERT(hasTagName(styleTag));
+ if (createdByParser && document && document->scriptableDocumentParser())
+ m_startLineNumber = document->scriptableDocumentParser()->lineNumber();
}
PassRefPtr<HTMLStyleElement> HTMLStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
@@ -58,7 +62,7 @@ void HTMLStyleElement::parseMappedAttribute(Attribute* attr)
void HTMLStyleElement::finishParsingChildren()
{
- StyleElement::process(this);
+ StyleElement::process(this, m_startLineNumber);
StyleElement::sheet(this);
m_createdByParser = false;
HTMLElement::finishParsingChildren();
@@ -83,7 +87,7 @@ void HTMLStyleElement::removedFromDocument()
void HTMLStyleElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
if (!changedByParser)
- StyleElement::process(this);
+ StyleElement::process(this, 0);
HTMLElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
}
diff --git a/WebCore/html/HTMLStyleElement.h b/WebCore/html/HTMLStyleElement.h
index 0f8a83b..10f5b10 100644
--- a/WebCore/html/HTMLStyleElement.h
+++ b/WebCore/html/HTMLStyleElement.h
@@ -65,6 +65,7 @@ private:
bool m_loading;
bool m_createdByParser;
+ int m_startLineNumber;
};
} //namespace
diff --git a/WebCore/html/HTMLToken.h b/WebCore/html/HTMLToken.h
index 741f5cd..c2db87d 100644
--- a/WebCore/html/HTMLToken.h
+++ b/WebCore/html/HTMLToken.h
@@ -28,6 +28,7 @@
#include "NamedNodeMap.h"
#include <wtf/Noncopyable.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
@@ -173,6 +174,12 @@ public:
return m_selfClosing;
}
+ void setSelfClosing()
+ {
+ ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag);
+ m_selfClosing = true;
+ }
+
const AttributeList& attributes() const
{
ASSERT(m_type == StartTag || m_type == EndTag);
@@ -306,7 +313,7 @@ public:
break;
case HTMLToken::DOCTYPE:
m_name = AtomicString(token.name().data(), token.name().size());
- m_doctypeData.set(token.m_doctypeData.release());
+ m_doctypeData = token.m_doctypeData.release();
break;
case HTMLToken::EndOfFile:
break;
@@ -337,9 +344,17 @@ public:
}
}
- AtomicHTMLToken(HTMLToken::Type type, AtomicString name)
+ AtomicHTMLToken(HTMLToken::Type type, AtomicString name, PassRefPtr<NamedNodeMap> attributes = 0)
: m_type(type)
, m_name(name)
+ , m_attributes(attributes)
+ {
+ ASSERT(usesName());
+ }
+
+ explicit AtomicHTMLToken(const String& characters)
+ : m_type(HTMLToken::Character)
+ , m_data(characters)
{
}
@@ -347,13 +362,13 @@ public:
const AtomicString& name() const
{
- ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE);
+ ASSERT(usesName());
return m_name;
}
void setName(const AtomicString& name)
{
- ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE);
+ ASSERT(usesName());
m_name = name;
}
@@ -363,12 +378,26 @@ public:
return m_selfClosing;
}
+ Attribute* getAttributeItem(const QualifiedName& attributeName)
+ {
+ ASSERT(usesAttributes());
+ if (!m_attributes)
+ return 0;
+ return m_attributes->getAttributeItem(attributeName);
+ }
+
NamedNodeMap* attributes() const
{
- ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag);
+ ASSERT(usesAttributes());
return m_attributes.get();
}
+ PassRefPtr<NamedNodeMap> takeAtributes()
+ {
+ ASSERT(usesAttributes());
+ return m_attributes.release();
+ }
+
const String& characters() const
{
ASSERT(m_type == HTMLToken::Character);
@@ -404,6 +433,16 @@ public:
private:
HTMLToken::Type m_type;
+ bool usesName() const
+ {
+ return m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE;
+ }
+
+ bool usesAttributes() const
+ {
+ return m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag;
+ }
+
// "name" for DOCTYPE, StartTag, and EndTag
AtomicString m_name;
diff --git a/WebCore/html/HTMLTokenizer.cpp b/WebCore/html/HTMLTokenizer.cpp
index 54e604a..55fd1ca 100644
--- a/WebCore/html/HTMLTokenizer.cpp
+++ b/WebCore/html/HTMLTokenizer.cpp
@@ -274,8 +274,13 @@ bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token)
// without getting an extra newline at the start of their <pre> element.
if (m_skipLeadingNewLineForListing) {
m_skipLeadingNewLineForListing = false;
- if (m_state == DataState && cc == '\n')
- ADVANCE_TO(DataState);
+ if (cc == '\n') {
+ if (m_state == DataState)
+ ADVANCE_TO(DataState);
+ if (m_state == RCDATAState)
+ ADVANCE_TO(RCDATAState);
+ ASSERT_NOT_REACHED();
+ }
}
// Source: http://www.whatwg.org/specs/web-apps/current-work/#tokenisation0
@@ -1045,7 +1050,7 @@ bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token)
BEGIN_STATE(SelfClosingStartTagState) {
if (cc == '>') {
- notImplemented();
+ m_token->setSelfClosing();
return emitAndResumeIn(source, DataState);
} else if (cc == InputStreamPreprocessor::endOfFileMarker) {
parseError();
diff --git a/WebCore/html/HTMLTreeBuilder.cpp b/WebCore/html/HTMLTreeBuilder.cpp
index b4e7ce1..80d4530 100644
--- a/WebCore/html/HTMLTreeBuilder.cpp
+++ b/WebCore/html/HTMLTreeBuilder.cpp
@@ -20,7 +20,7 @@
* 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.
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
@@ -40,13 +40,16 @@
#include "HTMLTokenizer.h"
#include "LegacyHTMLDocumentParser.h"
#include "LegacyHTMLTreeBuilder.h"
+#include "LocalizedStrings.h"
+#include "MathMLNames.h"
#include "NotImplemented.h"
-#if ENABLE(SVG)
#include "SVGNames.h"
-#endif
#include "ScriptController.h"
#include "Settings.h"
#include "Text.h"
+#include "XLinkNames.h"
+#include "XMLNSNames.h"
+#include "XMLNames.h"
#include <wtf/UnusedParam.h>
namespace WebCore {
@@ -57,11 +60,93 @@ static const int uninitializedLineNumberValue = -1;
namespace {
-inline bool isTreeBuilderWhiteSpace(UChar cc)
+inline bool isTreeBuilderWhitepace(UChar cc)
{
return cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ';
}
+class ExternalCharacterTokenBuffer : public Noncopyable {
+public:
+ explicit ExternalCharacterTokenBuffer(AtomicHTMLToken& token)
+ : m_current(token.characters().characters())
+ , m_end(m_current + token.characters().length())
+ {
+ ASSERT(!isEmpty());
+ }
+
+ ~ExternalCharacterTokenBuffer()
+ {
+ ASSERT(isEmpty());
+ }
+
+ bool isEmpty() const { return m_current == m_end; }
+
+ void skipLeadingWhitespace()
+ {
+ ASSERT(!isEmpty());
+ while (isTreeBuilderWhitepace(*m_current)) {
+ if (++m_current == m_end)
+ return;
+ }
+ }
+
+ String takeLeadingWhitespace()
+ {
+ ASSERT(!isEmpty());
+ const UChar* start = m_current;
+ skipLeadingWhitespace();
+ if (start == m_current)
+ return String();
+ return String(start, m_current - start);
+ }
+
+ String takeRemaining()
+ {
+ ASSERT(!isEmpty());
+ const UChar* start = m_current;
+ m_current = m_end;
+ return String(start, m_current - start);
+ }
+
+ void giveRemainingTo(Vector<UChar>& recipient)
+ {
+ recipient.append(m_current, m_end - m_current);
+ m_current = m_end;
+ }
+
+ String takeRemainingWhitespace()
+ {
+ ASSERT(!isEmpty());
+ Vector<UChar> whitespace;
+ do {
+ UChar cc = *m_current++;
+ if (isTreeBuilderWhitepace(cc))
+ whitespace.append(cc);
+ } while (m_current < m_end);
+ // Returning the null string when there aren't any whitespace
+ // characters is slightly cleaner semantically because we don't want
+ // to insert a text node (as opposed to inserting an empty text node).
+ if (whitespace.isEmpty())
+ return String();
+ return String::adopt(whitespace);
+ }
+
+private:
+ const UChar* m_current;
+ const UChar* m_end;
+};
+
+inline bool hasNonWhitespace(const String& string)
+{
+ const UChar* characters = string.characters();
+ const unsigned length = string.length();
+ for (unsigned i = 0; i < length; ++i) {
+ if (!isTreeBuilderWhitepace(characters[i]))
+ return true;
+ }
+ return false;
+}
+
bool shouldUseLegacyTreeBuilder(Document* document)
{
return !document->settings() || !document->settings()->html5TreeBuilderEnabled();
@@ -77,6 +162,18 @@ bool isNumberedHeaderTag(const AtomicString& tagName)
|| tagName == h6Tag;
}
+bool isCaptionColOrColgroupTag(const AtomicString& tagName)
+{
+ return tagName == captionTag
+ || tagName == colTag
+ || tagName == colgroupTag;
+}
+
+bool isTableCellContextTag(const AtomicString& tagName)
+{
+ return tagName == thTag || tagName == tdTag;
+}
+
bool isTableBodyContextTag(const AtomicString& tagName)
{
return tagName == tbodyTag
@@ -158,18 +255,15 @@ bool isScopingTag(const AtomicString& tagName)
return tagName == appletTag
|| tagName == buttonTag
|| tagName == captionTag
-#if ENABLE(SVG_FOREIGN_OBJECT)
|| tagName == SVGNames::foreignObjectTag
-#endif
|| tagName == htmlTag
|| tagName == marqueeTag
|| tagName == objectTag
|| tagName == tableTag
- || tagName == tdTag
- || tagName == thTag;
+ || isTableCellContextTag(tagName);
}
-bool isNonAnchorFormattingTag(const AtomicString& tagName)
+bool isNonAnchorNonNobrFormattingTag(const AtomicString& tagName)
{
return tagName == bTag
|| tagName == bigTag
@@ -177,7 +271,6 @@ bool isNonAnchorFormattingTag(const AtomicString& tagName)
|| tagName == emTag
|| tagName == fontTag
|| tagName == iTag
- || tagName == nobrTag
|| tagName == sTag
|| tagName == smallTag
|| tagName == strikeTag
@@ -186,6 +279,19 @@ bool isNonAnchorFormattingTag(const AtomicString& tagName)
|| tagName == uTag;
}
+bool isNonAnchorFormattingTag(const AtomicString& tagName)
+{
+ return tagName == nobrTag
+ || isNonAnchorNonNobrFormattingTag(tagName);
+}
+
+bool requiresRedirectToFosterParent(Element* element)
+{
+ return element->hasTagName(tableTag)
+ || isTableBodyContextTag(element->localName())
+ || element->hasTagName(trTag);
+}
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#formatting
bool isFormattingTag(const AtomicString& tagName)
{
@@ -198,15 +304,27 @@ bool isPhrasingTag(const AtomicString& tagName)
return !isSpecialTag(tagName) && !isScopingTag(tagName) && !isFormattingTag(tagName);
}
+bool isNotFormattingAndNotPhrasing(const Element* element)
+{
+ // The spec often says "node is not in the formatting category, and is not
+ // in the phrasing category". !phrasing && !formatting == scoping || special
+ // scoping || special is easier to compute.
+ // FIXME: localName() is wrong for non-html content.
+ const AtomicString& tagName = element->localName();
+ return isScopingTag(tagName) || isSpecialTag(tagName);
+}
+
} // namespace
HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* document, bool reportErrors)
: m_framesetOk(true)
, m_document(document)
+ , m_tree(document, FragmentScriptingAllowed)
, m_reportErrors(reportErrors)
, m_isPaused(false)
, m_insertionMode(InitialMode)
, m_originalInsertionMode(InitialMode)
+ , m_secondaryInsertionMode(InitialMode)
, m_tokenizer(tokenizer)
, m_legacyTreeBuilder(shouldUseLegacyTreeBuilder(document) ? new LegacyHTMLTreeBuilder(document, reportErrors) : 0)
, m_lastScriptElementStartLine(uninitializedLineNumberValue)
@@ -221,10 +339,12 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* documen
HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission)
: m_framesetOk(true)
, m_document(fragment->document())
+ , m_tree(fragment->document(), scriptingPermission)
, m_reportErrors(false) // FIXME: Why not report errors in fragments?
, m_isPaused(false)
, m_insertionMode(InitialMode)
, m_originalInsertionMode(InitialMode)
+ , m_secondaryInsertionMode(InitialMode)
, m_tokenizer(tokenizer)
, m_legacyTreeBuilder(new LegacyHTMLTreeBuilder(fragment, scriptingPermission))
, m_lastScriptElementStartLine(uninitializedLineNumberValue)
@@ -238,7 +358,7 @@ HTMLTreeBuilder::~HTMLTreeBuilder()
{
}
-static void convertToOldStyle(const AtomicHTMLToken& token, Token& oldStyleToken)
+static void convertToOldStyle(AtomicHTMLToken& token, Token& oldStyleToken)
{
switch (token.type()) {
case HTMLToken::Uninitialized:
@@ -252,9 +372,12 @@ static void convertToOldStyle(const AtomicHTMLToken& token, Token& oldStyleToken
case HTMLToken::StartTag:
case HTMLToken::EndTag: {
oldStyleToken.beginTag = (token.type() == HTMLToken::StartTag);
- oldStyleToken.selfClosingTag = token.selfClosing();
+ // The LegacyHTMLTreeBuilder seems to work better if we lie here and
+ // say that tags are never self closing. As a wise man once said:
+ // "You can't handle the truth!"
+ oldStyleToken.selfClosingTag = false;
oldStyleToken.tagName = token.name();
- oldStyleToken.attrs = token.attributes();
+ oldStyleToken.attrs = token.takeAtributes();
break;
}
case HTMLToken::Comment:
@@ -306,8 +429,12 @@ HTMLTokenizer::State HTMLTreeBuilder::adjustedLexerState(HTMLTokenizer::State st
if (tagName == textareaTag || tagName == titleTag)
return HTMLTokenizer::RCDATAState;
- if (tagName == styleTag || tagName == iframeTag || tagName == xmpTag || tagName == noembedTag
- || tagName == noframesTag || (tagName == noscriptTag && isScriptingFlagEnabled(frame)))
+ if (tagName == styleTag
+ || tagName == iframeTag
+ || tagName == xmpTag
+ || tagName == noembedTag
+ || tagName == noframesTag
+ || (tagName == noscriptTag && isScriptingFlagEnabled(frame)))
return HTMLTokenizer::RAWTEXTState;
if (tagName == plaintextTag)
@@ -409,49 +536,645 @@ void HTMLTreeBuilder::processToken(AtomicHTMLToken& token)
void HTMLTreeBuilder::processDoctypeToken(AtomicHTMLToken& token)
{
- if (insertionMode() == InitialMode) {
- insertDoctype(token);
+ ASSERT(token.type() == HTMLToken::DOCTYPE);
+ if (m_insertionMode == InitialMode) {
+ m_tree.insertDoctype(token);
+ return;
+ }
+ if (m_insertionMode == InTableTextMode) {
+ processDefaultForInTableTextMode(token);
+ processDoctypeToken(token);
return;
}
parseError(token);
}
-void HTMLTreeBuilder::insertHTMLStartTagBeforeHTML(AtomicHTMLToken& token)
+void HTMLTreeBuilder::processFakeStartTag(const QualifiedName& tagName, PassRefPtr<NamedNodeMap> attributes)
+{
+ // FIXME: We'll need a fancier conversion than just "localName" for SVG/MathML tags.
+ AtomicHTMLToken fakeToken(HTMLToken::StartTag, tagName.localName(), attributes);
+ processStartTag(fakeToken);
+}
+
+void HTMLTreeBuilder::processFakeEndTag(const QualifiedName& tagName)
{
- RefPtr<Element> element = HTMLHtmlElement::create(m_document);
- element->setAttributeMap(token.attributes(), m_fragmentScriptingPermission);
- m_openElements.pushHTMLHtmlElement(attach(m_document, element.release()));
+ // FIXME: We'll need a fancier conversion than just "localName" for SVG/MathML tags.
+ AtomicHTMLToken fakeToken(HTMLToken::EndTag, tagName.localName());
+ processEndTag(fakeToken);
}
-void HTMLTreeBuilder::mergeAttributesFromTokenIntoElement(AtomicHTMLToken& token, Element* element)
+void HTMLTreeBuilder::processFakeCharacters(const String& characters)
{
- if (!token.attributes())
+ AtomicHTMLToken fakeToken(characters);
+ processCharacter(fakeToken);
+}
+
+void HTMLTreeBuilder::processFakePEndTagIfPInScope()
+{
+ if (!m_tree.openElements()->inScope(pTag.localName()))
return;
+ AtomicHTMLToken endP(HTMLToken::EndTag, pTag.localName());
+ processEndTag(endP);
+}
- NamedNodeMap* attributes = element->attributes(false);
- for (unsigned i = 0; i < token.attributes()->length(); ++i) {
- Attribute* attribute = token.attributes()->attributeItem(i);
- if (!attributes->getAttributeItem(attribute->name()))
- element->setAttribute(attribute->name(), attribute->value());
+PassRefPtr<NamedNodeMap> HTMLTreeBuilder::attributesForIsindexInput(AtomicHTMLToken& token)
+{
+ RefPtr<NamedNodeMap> attributes = token.takeAtributes();
+ if (!attributes)
+ attributes = NamedNodeMap::create();
+ else {
+ attributes->removeAttribute(nameAttr);
+ attributes->removeAttribute(actionAttr);
+ attributes->removeAttribute(promptAttr);
}
+
+ RefPtr<Attribute> mappedAttribute = Attribute::createMapped(nameAttr, isindexTag.localName());
+ attributes->insertAttribute(mappedAttribute.release(), false);
+ return attributes.release();
}
-void HTMLTreeBuilder::insertHTMLStartTagInBody(AtomicHTMLToken& token)
+void HTMLTreeBuilder::processIsindexStartTagForInBody(AtomicHTMLToken& token)
{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ ASSERT(token.name() == isindexTag);
parseError(token);
- mergeAttributesFromTokenIntoElement(token, m_openElements.htmlElement());
+ if (m_tree.form())
+ return;
+ notImplemented(); // Acknowledge self-closing flag
+ processFakeStartTag(formTag);
+ Attribute* actionAttribute = token.getAttributeItem(actionAttr);
+ if (actionAttribute) {
+ ASSERT(m_tree.currentElement()->hasTagName(formTag));
+ m_tree.currentElement()->setAttribute(actionAttr, actionAttribute->value());
+ }
+ processFakeStartTag(hrTag);
+ processFakeStartTag(labelTag);
+ Attribute* promptAttribute = token.getAttributeItem(promptAttr);
+ if (promptAttribute)
+ processFakeCharacters(promptAttribute->value());
+ else
+ processFakeCharacters(searchableIndexIntroduction());
+ processFakeStartTag(inputTag, attributesForIsindexInput(token));
+ notImplemented(); // This second set of characters may be needed by non-english locales.
+ processFakeEndTag(labelTag);
+ processFakeStartTag(hrTag);
+ processFakeEndTag(formTag);
}
-void HTMLTreeBuilder::processFakePEndTagIfPInScope()
+namespace {
+
+bool isLi(const Element* element)
+{
+ return element->hasTagName(liTag);
+}
+
+bool isDdOrDt(const Element* element)
+{
+ return element->hasTagName(ddTag)
+ || element->hasTagName(dtTag);
+}
+
+}
+
+template <bool shouldClose(const Element*)>
+void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken& token)
+{
+ m_framesetOk = false;
+ HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord();
+ while (1) {
+ Element* node = nodeRecord->element();
+ if (shouldClose(node)) {
+ processFakeEndTag(node->tagQName());
+ break;
+ }
+ if (isNotFormattingAndNotPhrasing(node) && !node->hasTagName(addressTag) && !node->hasTagName(divTag) && !node->hasTagName(pTag))
+ break;
+ nodeRecord = nodeRecord->next();
+ }
+ processFakePEndTagIfPInScope();
+ m_tree.insertHTMLElement(token);
+}
+
+namespace {
+
+typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap;
+
+void mapLoweredLocalNameToName(PrefixedNameToQualifiedNameMap* map, QualifiedName** names, size_t length)
+{
+ for (size_t i = 0; i < length; ++i) {
+ const QualifiedName& name = *names[i];
+ const AtomicString& localName = name.localName();
+ AtomicString loweredLocalName = localName.lower();
+ if (loweredLocalName != localName)
+ map->add(loweredLocalName, name);
+ }
+}
+
+void addName(PrefixedNameToQualifiedNameMap* map, const QualifiedName& name)
+{
+ map->add(name.localName().lower(), name);
+}
+
+void adjustSVGTagNameCase(AtomicHTMLToken& token)
{
- if (!m_openElements.inScope(pTag.localName()))
+ static PrefixedNameToQualifiedNameMap* caseMap = 0;
+ if (!caseMap) {
+ caseMap = new PrefixedNameToQualifiedNameMap;
+ size_t length = 0;
+ QualifiedName** svgTags = SVGNames::getSVGTags(&length);
+ mapLoweredLocalNameToName(caseMap, svgTags, length);
+ }
+
+ const QualifiedName& casedName = caseMap->get(token.name());
+ if (casedName.localName().isNull())
return;
- AtomicHTMLToken endP(HTMLToken::EndTag, pTag.localName());
- processEndTag(endP);
+ token.setName(casedName.localName());
+}
+
+void adjustSVGAttributes(AtomicHTMLToken& token)
+{
+ static PrefixedNameToQualifiedNameMap* caseMap = 0;
+ if (!caseMap) {
+ caseMap = new PrefixedNameToQualifiedNameMap;
+ size_t length = 0;
+ QualifiedName** svgAttrs = SVGNames::getSVGAttrs(&length);
+ mapLoweredLocalNameToName(caseMap, svgAttrs, length);
+ }
+
+ NamedNodeMap* attributes = token.attributes();
+ if (!attributes)
+ return;
+
+ for (unsigned x = 0; x < attributes->length(); ++x) {
+ Attribute* attribute = attributes->attributeItem(x);
+ const QualifiedName& casedName = caseMap->get(attribute->localName());
+ if (!casedName.localName().isNull())
+ attribute->parserSetName(casedName);
+ }
+}
+
+void adjustMathMLAttributes(AtomicHTMLToken&)
+{
+ notImplemented();
+}
+
+void addNamesWithPrefix(PrefixedNameToQualifiedNameMap* map, const AtomicString& prefix, QualifiedName** names, size_t length)
+{
+ for (size_t i = 0; i < length; ++i) {
+ QualifiedName* name = names[i];
+ const AtomicString& localName = name->localName();
+ AtomicString prefixColonLocalName(prefix + ":" + localName);
+ QualifiedName nameWithPrefix(prefix, localName, name->namespaceURI());
+ map->add(prefixColonLocalName, nameWithPrefix);
+ }
+}
+
+void adjustForeignAttributes(AtomicHTMLToken& token)
+{
+ static PrefixedNameToQualifiedNameMap* map = 0;
+ if (!map) {
+ map = new PrefixedNameToQualifiedNameMap;
+ size_t length = 0;
+ QualifiedName** attrs = XLinkNames::getXLinkAttrs(&length);
+ addNamesWithPrefix(map, "xlink", attrs, length);
+
+ attrs = XMLNames::getXMLAttrs(&length);
+ addNamesWithPrefix(map, "xml", attrs, length);
+
+ map->add("xmlns", XMLNSNames::xmlnsAttr);
+ map->add("xmlns:xlink", QualifiedName("xmlns", "xlink", XMLNSNames::xmlnsNamespaceURI));
+ }
+
+ NamedNodeMap* attributes = token.attributes();
+ if (!attributes)
+ return;
+
+ for (unsigned x = 0; x < attributes->length(); ++x) {
+ Attribute* attribute = attributes->attributeItem(x);
+ const QualifiedName& name = map->get(attribute->localName());
+ if (!name.localName().isNull())
+ attribute->parserSetName(name);
+ }
+}
+
+}
+
+void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ if (token.name() == htmlTag) {
+ m_tree.insertHTMLHtmlStartTagInBody(token);
+ return;
+ }
+ if (token.name() == baseTag
+ || token.name() == "command"
+ || token.name() == linkTag
+ || token.name() == metaTag
+ || token.name() == noframesTag
+ || token.name() == scriptTag
+ || token.name() == styleTag
+ || token.name() == titleTag) {
+ bool didProcess = processStartTagForInHead(token);
+ ASSERT_UNUSED(didProcess, didProcess);
+ return;
+ }
+ if (token.name() == bodyTag) {
+ m_tree.insertHTMLBodyStartTagInBody(token);
+ return;
+ }
+ if (token.name() == framesetTag) {
+ parseError(token);
+ notImplemented(); // fragment case
+ if (!m_framesetOk)
+ return;
+ ExceptionCode ec = 0;
+ m_tree.openElements()->bodyElement()->remove(ec);
+ ASSERT(!ec);
+ m_tree.openElements()->popUntil(m_tree.openElements()->bodyElement());
+ m_tree.openElements()->popHTMLBodyElement();
+ ASSERT(m_tree.openElements()->top() == m_tree.openElements()->htmlElement());
+ m_tree.insertHTMLElement(token);
+ setInsertionMode(InFramesetMode);
+ return;
+ }
+ if (token.name() == addressTag
+ || token.name() == articleTag
+ || token.name() == asideTag
+ || token.name() == blockquoteTag
+ || token.name() == centerTag
+ || token.name() == "details"
+ || token.name() == dirTag
+ || token.name() == divTag
+ || token.name() == dlTag
+ || token.name() == fieldsetTag
+ || token.name() == "figure"
+ || token.name() == footerTag
+ || token.name() == headerTag
+ || token.name() == hgroupTag
+ || token.name() == menuTag
+ || token.name() == navTag
+ || token.name() == olTag
+ || token.name() == pTag
+ || token.name() == sectionTag
+ || token.name() == ulTag) {
+ processFakePEndTagIfPInScope();
+ m_tree.insertHTMLElement(token);
+ return;
+ }
+ if (isNumberedHeaderTag(token.name())) {
+ processFakePEndTagIfPInScope();
+ if (isNumberedHeaderTag(m_tree.currentElement()->localName())) {
+ parseError(token);
+ m_tree.openElements()->pop();
+ }
+ m_tree.insertHTMLElement(token);
+ return;
+ }
+ if (token.name() == preTag || token.name() == listingTag) {
+ processFakePEndTagIfPInScope();
+ m_tree.insertHTMLElement(token);
+ m_tokenizer->skipLeadingNewLineForListing();
+ m_framesetOk = false;
+ return;
+ }
+ if (token.name() == formTag) {
+ if (m_tree.form()) {
+ parseError(token);
+ return;
+ }
+ processFakePEndTagIfPInScope();
+ m_tree.insertHTMLElement(token);
+ m_tree.setForm(m_tree.currentElement());
+ return;
+ }
+ if (token.name() == liTag) {
+ processCloseWhenNestedTag<isLi>(token);
+ return;
+ }
+ if (token.name() == ddTag || token.name() == dtTag) {
+ processCloseWhenNestedTag<isDdOrDt>(token);
+ return;
+ }
+ if (token.name() == plaintextTag) {
+ processFakePEndTagIfPInScope();
+ m_tree.insertHTMLElement(token);
+ m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState);
+ return;
+ }
+ if (token.name() == buttonTag) {
+ if (m_tree.openElements()->inScope(buttonTag)) {
+ parseError(token);
+ processFakeEndTag(buttonTag);
+ processStartTag(token); // FIXME: Could we just fall through here?
+ return;
+ }
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertHTMLElement(token);
+ m_framesetOk = false;
+ return;
+ }
+ if (token.name() == aTag) {
+ Element* activeATag = m_tree.activeFormattingElements()->closestElementInScopeWithName(aTag.localName());
+ if (activeATag) {
+ parseError(token);
+ processFakeEndTag(aTag);
+ m_tree.activeFormattingElements()->remove(activeATag);
+ if (m_tree.openElements()->contains(activeATag))
+ m_tree.openElements()->remove(activeATag);
+ }
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertFormattingElement(token);
+ return;
+ }
+ if (isNonAnchorNonNobrFormattingTag(token.name())) {
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertFormattingElement(token);
+ return;
+ }
+ if (token.name() == nobrTag) {
+ m_tree.reconstructTheActiveFormattingElements();
+ if (m_tree.openElements()->inScope(nobrTag)) {
+ parseError(token);
+ processFakeEndTag(nobrTag);
+ m_tree.reconstructTheActiveFormattingElements();
+ }
+ m_tree.insertFormattingElement(token);
+ return;
+ }
+ if (token.name() == appletTag
+ || token.name() == marqueeTag
+ || token.name() == objectTag) {
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertHTMLElement(token);
+ m_tree.activeFormattingElements()->appendMarker();
+ m_framesetOk = false;
+ return;
+ }
+ if (token.name() == tableTag) {
+ if (m_document->parseMode() != Document::Compat && m_tree.openElements()->inScope(pTag))
+ processFakeEndTag(pTag);
+ m_tree.insertHTMLElement(token);
+ m_framesetOk = false;
+ setInsertionMode(InTableMode);
+ return;
+ }
+ if (token.name() == imageTag) {
+ parseError(token);
+ // Apparently we're not supposed to ask.
+ token.setName(imgTag.localName());
+ // Note the fall through to the imgTag handling below!
+ }
+ if (token.name() == areaTag
+ || token.name() == basefontTag
+ || token.name() == "bgsound"
+ || token.name() == brTag
+ || token.name() == embedTag
+ || token.name() == imgTag
+ || token.name() == inputTag
+ || token.name() == keygenTag
+ || token.name() == wbrTag) {
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertSelfClosingHTMLElement(token);
+ m_framesetOk = false;
+ return;
+ }
+ if (token.name() == paramTag
+ || token.name() == sourceTag
+ || token.name() == "track") {
+ m_tree.insertSelfClosingHTMLElement(token);
+ return;
+ }
+ if (token.name() == hrTag) {
+ processFakePEndTagIfPInScope();
+ m_tree.insertSelfClosingHTMLElement(token);
+ m_framesetOk = false;
+ return;
+ }
+ if (token.name() == isindexTag) {
+ processIsindexStartTagForInBody(token);
+ return;
+ }
+ if (token.name() == textareaTag) {
+ m_tree.insertHTMLElement(token);
+ m_tokenizer->skipLeadingNewLineForListing();
+ m_tokenizer->setState(HTMLTokenizer::RCDATAState);
+ m_originalInsertionMode = m_insertionMode;
+ m_framesetOk = false;
+ setInsertionMode(TextMode);
+ return;
+ }
+ if (token.name() == xmpTag) {
+ processFakePEndTagIfPInScope();
+ m_tree.reconstructTheActiveFormattingElements();
+ m_framesetOk = false;
+ processGenericRawTextStartTag(token);
+ return;
+ }
+ if (token.name() == iframeTag) {
+ m_framesetOk = false;
+ processGenericRawTextStartTag(token);
+ return;
+ }
+ if (token.name() == noembedTag) {
+ processGenericRawTextStartTag(token);
+ return;
+ }
+ if (token.name() == noscriptTag && isScriptingFlagEnabled(m_document->frame())) {
+ processGenericRawTextStartTag(token);
+ return;
+ }
+ if (token.name() == selectTag) {
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertHTMLElement(token);
+ m_framesetOk = false;
+ if (m_insertionMode == InTableMode
+ || m_insertionMode == InCaptionMode
+ || m_insertionMode == InColumnGroupMode
+ || m_insertionMode == InTableBodyMode
+ || m_insertionMode == InRowMode
+ || m_insertionMode == InCellMode)
+ setInsertionMode(InSelectInTableMode);
+ else
+ setInsertionMode(InSelectMode);
+ return;
+ }
+ if (token.name() == optgroupTag || token.name() == optionTag) {
+ if (m_tree.openElements()->inScope(optionTag.localName())) {
+ AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
+ processEndTag(endOption);
+ }
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertHTMLElement(token);
+ return;
+ }
+ if (token.name() == rpTag || token.name() == rtTag) {
+ if (m_tree.openElements()->inScope(rubyTag.localName())) {
+ m_tree.generateImpliedEndTags();
+ if (!m_tree.currentElement()->hasTagName(rubyTag)) {
+ parseError(token);
+ m_tree.openElements()->popUntil(rubyTag.localName());
+ }
+ }
+ m_tree.insertHTMLElement(token);
+ return;
+ }
+ if (token.name() == MathMLNames::mathTag.localName()) {
+ m_tree.reconstructTheActiveFormattingElements();
+ adjustMathMLAttributes(token);
+ adjustForeignAttributes(token);
+ m_tree.insertForeignElement(token, MathMLNames::mathmlNamespaceURI);
+ if (m_insertionMode != InForeignContentMode) {
+ setSecondaryInsertionMode(m_insertionMode);
+ setInsertionMode(InForeignContentMode);
+ }
+ return;
+ }
+ if (token.name() == SVGNames::svgTag.localName()) {
+ m_tree.reconstructTheActiveFormattingElements();
+ adjustSVGAttributes(token);
+ adjustForeignAttributes(token);
+ m_tree.insertForeignElement(token, SVGNames::svgNamespaceURI);
+ if (m_insertionMode != InForeignContentMode) {
+ setSecondaryInsertionMode(m_insertionMode);
+ setInsertionMode(InForeignContentMode);
+ }
+ return;
+ }
+ if (isCaptionColOrColgroupTag(token.name())
+ || token.name() == frameTag
+ || token.name() == headTag
+ || isTableBodyContextTag(token.name())
+ || isTableCellContextTag(token.name())
+ || token.name() == trTag) {
+ parseError(token);
+ return;
+ }
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertHTMLElement(token);
+}
+
+bool HTMLTreeBuilder::processColgroupEndTagForInColumnGroup()
+{
+ if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) {
+ ASSERT(m_isParsingFragment);
+ // FIXME: parse error
+ return false;
+ }
+ m_tree.openElements()->pop();
+ setInsertionMode(InTableMode);
+ return true;
+}
+
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#close-the-cell
+void HTMLTreeBuilder::closeTheCell()
+{
+ ASSERT(insertionMode() == InCellMode);
+ if (m_tree.openElements()->inScope(tdTag)) {
+ ASSERT(!m_tree.openElements()->inScope(thTag));
+ processFakeEndTag(tdTag);
+ return;
+ }
+ ASSERT(m_tree.openElements()->inScope(thTag));
+ processFakeEndTag(thTag);
+ ASSERT(insertionMode() == InRowMode);
+}
+
+void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ if (token.name() == captionTag) {
+ m_tree.openElements()->popUntilTableScopeMarker();
+ m_tree.activeFormattingElements()->appendMarker();
+ m_tree.insertHTMLElement(token);
+ setInsertionMode(InCaptionMode);
+ return;
+ }
+ if (token.name() == colgroupTag) {
+ m_tree.openElements()->popUntilTableScopeMarker();
+ m_tree.insertHTMLElement(token);
+ setInsertionMode(InColumnGroupMode);
+ return;
+ }
+ if (token.name() == colTag) {
+ processFakeStartTag(colgroupTag);
+ ASSERT(InColumnGroupMode);
+ processStartTag(token);
+ return;
+ }
+ if (isTableBodyContextTag(token.name())) {
+ m_tree.openElements()->popUntilTableScopeMarker();
+ m_tree.insertHTMLElement(token);
+ setInsertionMode(InTableBodyMode);
+ return;
+ }
+ if (isTableCellContextTag(token.name())
+ || token.name() == trTag) {
+ processFakeStartTag(tbodyTag);
+ ASSERT(insertionMode() == InTableBodyMode);
+ processStartTag(token);
+ return;
+ }
+ if (token.name() == tableTag) {
+ parseError(token);
+ if (!processTableEndTagForInTable()) {
+ ASSERT(m_isParsingFragment);
+ return;
+ }
+ processStartTag(token);
+ return;
+ }
+ if (token.name() == styleTag || token.name() == scriptTag) {
+ processStartTagForInHead(token);
+ return;
+ }
+ if (token.name() == inputTag) {
+ Attribute* typeAttribute = token.getAttributeItem(typeAttr);
+ if (!typeAttribute || equalIgnoringCase(typeAttribute->value(), "hidden")) {
+ parseError(token);
+ m_tree.insertSelfClosingHTMLElement(token);
+ return;
+ }
+ // Fall through to "anything else" case.
+ }
+ if (token.name() == formTag) {
+ parseError(token);
+ if (m_tree.form())
+ return;
+ m_tree.insertSelfClosingHTMLElement(token);
+ return;
+ }
+ parseError(token);
+ HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement()));
+ processStartTagForInBody(token);
+}
+
+namespace {
+
+bool shouldProcessUsingSecondaryInsertionMode(AtomicHTMLToken& token, Element* currentElement)
+{
+ ASSERT(token.type() == HTMLToken::StartTag);
+ if (currentElement->hasTagName(MathMLNames::miTag)
+ || currentElement->hasTagName(MathMLNames::moTag)
+ || currentElement->hasTagName(MathMLNames::mnTag)
+ || currentElement->hasTagName(MathMLNames::msTag)
+ || currentElement->hasTagName(MathMLNames::mtextTag)) {
+ return token.name() != MathMLNames::mglyphTag
+ && token.name() != MathMLNames::malignmarkTag;
+ }
+ if (currentElement->hasTagName(MathMLNames::annotation_xmlTag))
+ return token.name() == SVGNames::svgTag;
+ if (currentElement->hasTagName(SVGNames::foreignObjectTag)
+ || currentElement->hasTagName(SVGNames::descTag)
+ || currentElement->hasTagName(SVGNames::titleTag))
+ return true;
+ return currentElement->namespaceURI() == HTMLNames::xhtmlNamespaceURI;
+}
+
}
void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
{
+ ASSERT(token.type() == HTMLToken::StartTag);
switch (insertionMode()) {
case InitialMode:
ASSERT(insertionMode() == InitialMode);
@@ -460,7 +1183,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
case BeforeHTMLMode:
ASSERT(insertionMode() == BeforeHTMLMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagBeforeHTML(token);
+ m_tree.insertHTMLHtmlStartTagBeforeHTML(token);
setInsertionMode(BeforeHeadMode);
return;
}
@@ -469,11 +1192,11 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
case BeforeHeadMode:
ASSERT(insertionMode() == BeforeHeadMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
if (token.name() == headTag) {
- insertHTMLHeadElement(token);
+ m_tree.insertHTMLHeadElement(token);
setInsertionMode(InHeadMode);
return;
}
@@ -488,26 +1211,32 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
case AfterHeadMode:
ASSERT(insertionMode() == AfterHeadMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
if (token.name() == bodyTag) {
m_framesetOk = false;
- insertHTMLBodyElement(token);
- m_insertionMode = InBodyMode;
+ m_tree.insertHTMLBodyElement(token);
+ setInsertionMode(InBodyMode);
return;
}
if (token.name() == framesetTag) {
- insertElement(token);
+ m_tree.insertHTMLElement(token);
setInsertionMode(InFramesetMode);
return;
}
- if (token.name() == baseTag || token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == scriptTag || token.name() == styleTag || token.name() == titleTag) {
+ if (token.name() == baseTag
+ || token.name() == linkTag
+ || token.name() == metaTag
+ || token.name() == noframesTag
+ || token.name() == scriptTag
+ || token.name() == styleTag
+ || token.name() == titleTag) {
parseError(token);
- ASSERT(m_headElement);
- m_openElements.pushHTMLHeadElement(m_headElement);
+ ASSERT(m_tree.head());
+ m_tree.openElements()->pushHTMLHeadElement(m_tree.head());
processStartTagForInHead(token);
- m_openElements.removeHTMLHeadElement(m_headElement.get());
+ m_tree.openElements()->removeHTMLHeadElement(m_tree.head());
return;
}
if (token.name() == headTag) {
@@ -518,309 +1247,134 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
// Fall through
case InBodyMode:
ASSERT(insertionMode() == InBodyMode);
- if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
- return;
- }
- if (token.name() == baseTag || token.name() == "command" || token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == scriptTag || token.name() == styleTag || token.name() == titleTag) {
- bool didProcess = processStartTagForInHead(token);
- ASSERT_UNUSED(didProcess, didProcess);
- return;
- }
- if (token.name() == bodyTag) {
- parseError(token);
- notImplemented(); // fragment case
- mergeAttributesFromTokenIntoElement(token, m_openElements.bodyElement());
- return;
- }
- if (token.name() == framesetTag) {
+ processStartTagForInBody(token);
+ break;
+ case InTableMode:
+ ASSERT(insertionMode() == InTableMode);
+ processStartTagForInTable(token);
+ break;
+ case InCaptionMode:
+ ASSERT(insertionMode() == InCaptionMode);
+ if (isCaptionColOrColgroupTag(token.name())
+ || isTableBodyContextTag(token.name())
+ || isTableCellContextTag(token.name())
+ || token.name() == trTag) {
parseError(token);
- notImplemented(); // fragment case
- if (!m_framesetOk)
+ if (!processCaptionEndTagForInCaption()) {
+ ASSERT(m_isParsingFragment);
return;
- ExceptionCode ec = 0;
- m_openElements.bodyElement()->remove(ec);
- ASSERT(!ec);
- m_openElements.popUntil(m_openElements.bodyElement());
- m_openElements.popHTMLBodyElement();
- ASSERT(m_openElements.top() == m_openElements.htmlElement());
- insertElement(token);
- m_insertionMode = InFramesetMode;
- return;
- }
- if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == pTag || token.name() == sectionTag || token.name() == ulTag) {
- processFakePEndTagIfPInScope();
- insertElement(token);
- return;
- }
- if (isNumberedHeaderTag(token.name())) {
- processFakePEndTagIfPInScope();
- notImplemented();
- insertElement(token);
- return;
- }
- if (token.name() == preTag || token.name() == listingTag) {
- processFakePEndTagIfPInScope();
- insertElement(token);
- m_tokenizer->skipLeadingNewLineForListing();
- m_framesetOk = false;
- return;
- }
- if (token.name() == formTag) {
- notImplemented();
- processFakePEndTagIfPInScope();
- insertElement(token);
- m_formElement = currentElement();
- return;
- }
- if (token.name() == liTag) {
- notImplemented();
- processFakePEndTagIfPInScope();
- insertElement(token);
- return;
- }
- if (token.name() == ddTag || token.name() == dtTag) {
- notImplemented();
- processFakePEndTagIfPInScope();
- insertElement(token);
- return;
- }
- if (token.name() == plaintextTag) {
- processFakePEndTagIfPInScope();
- insertElement(token);
- m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState);
- return;
- }
- if (token.name() == buttonTag) {
- notImplemented();
- reconstructTheActiveFormattingElements();
- insertElement(token);
- m_framesetOk = false;
- return;
- }
- if (token.name() == aTag) {
- notImplemented();
- reconstructTheActiveFormattingElements();
- insertFormattingElement(token);
- return;
- }
- if (isNonAnchorFormattingTag(token.name())) {
- reconstructTheActiveFormattingElements();
- insertFormattingElement(token);
- return;
- }
- if (token.name() == nobrTag) {
- reconstructTheActiveFormattingElements();
- notImplemented();
- insertFormattingElement(token);
- return;
- }
- if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) {
- reconstructTheActiveFormattingElements();
- insertElement(token);
- notImplemented();
- m_framesetOk = false;
- return;
- }
- if (token.name() == tableTag) {
- notImplemented();
- insertElement(token);
- m_framesetOk = false;
- m_insertionMode = InTableMode;
- return;
- }
- if (token.name() == imageTag) {
- parseError(token);
- // Apparently we're not supposed to ask.
- token.setName(imgTag.localName());
- // Note the fall through to the imgTag handling below!
- }
- if (token.name() == areaTag || token.name() == basefontTag || token.name() == "bgsound" || token.name() == brTag || token.name() == embedTag || token.name() == imgTag || token.name() == inputTag || token.name() == keygenTag || token.name() == wbrTag) {
- reconstructTheActiveFormattingElements();
- insertSelfClosingElement(token);
- m_framesetOk = false;
- return;
- }
- if (token.name() == paramTag || token.name() == sourceTag || token.name() == "track") {
- insertSelfClosingElement(token);
- return;
- }
- if (token.name() == hrTag) {
- processFakePEndTagIfPInScope();
- insertSelfClosingElement(token);
- m_framesetOk = false;
- return;
- }
- if (token.name() == isindexTag) {
- parseError(token);
- notImplemented();
- return;
- }
- if (token.name() == textareaTag) {
- insertElement(token);
- m_tokenizer->skipLeadingNewLineForListing();
- m_tokenizer->setState(HTMLTokenizer::RCDATAState);
- m_originalInsertionMode = m_insertionMode;
- m_framesetOk = false;
- m_insertionMode = TextMode;
- return;
- }
- if (token.name() == xmpTag) {
- processFakePEndTagIfPInScope();
- reconstructTheActiveFormattingElements();
- m_framesetOk = false;
- insertGenericRawTextElement(token);
- return;
- }
- if (token.name() == iframeTag) {
- m_framesetOk = false;
- insertGenericRawTextElement(token);
- return;
- }
- if (token.name() == noembedTag) {
- insertGenericRawTextElement(token);
- return;
- }
- if (token.name() == noscriptTag && isScriptingFlagEnabled(m_document->frame())) {
- insertGenericRawTextElement(token);
- return;
- }
- if (token.name() == selectTag) {
- reconstructTheActiveFormattingElements();
- insertElement(token);
- m_framesetOk = false;
- if (m_insertionMode == InTableMode || m_insertionMode == InCaptionMode || m_insertionMode == InColumnGroupMode || m_insertionMode == InTableBodyMode || m_insertionMode == InRowMode || m_insertionMode == InCellMode)
- m_insertionMode = InSelectInTableMode;
- else
- m_insertionMode = InSelectMode;
- return;
- }
- if (token.name() == optgroupTag || token.name() == optionTag) {
- if (m_openElements.inScope(optionTag.localName())) {
- AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
- processEndTag(endOption);
}
- reconstructTheActiveFormattingElements();
- insertElement(token);
- return;
- }
- if (token.name() == rpTag || token.name() == rtTag) {
- if (m_openElements.inScope(rubyTag.localName())) {
- generateImpliedEndTags();
- if (!currentElement()->hasTagName(rubyTag)) {
- parseError(token);
- m_openElements.popUntil(rubyTag.localName());
- }
- }
- insertElement(token);
- return;
- }
- if (token.name() == "math") {
- // This is the MathML foreign content branch point.
- notImplemented();
- }
- if (token.name() == "svg") {
- // This is the SVG foreign content branch point.
- notImplemented();
- }
- if (token.name() == captionTag || token.name() == colTag || token.name() == colgroupTag || token.name() == frameTag || token.name() == headTag || token.name() == tbodyTag || token.name() == tdTag || token.name() == tfootTag || token.name() == thTag || token.name() == theadTag || token.name() == trTag) {
- parseError(token);
+ processStartTag(token);
return;
}
- reconstructTheActiveFormattingElements();
- insertElement(token);
+ processStartTagForInBody(token);
break;
- case InTableMode:
- ASSERT(insertionMode() == InTableMode);
- if (token.name() == captionTag) {
- m_openElements.popUntilTableScopeMarker();
- m_activeFormattingElements.appendMarker();
- insertElement(token);
- m_insertionMode = InCaptionMode;
- return;
- }
- if (token.name() == colgroupTag) {
- m_openElements.popUntilTableScopeMarker();
- insertElement(token);
- m_insertionMode = InColumnGroupMode;
+ case InColumnGroupMode:
+ ASSERT(insertionMode() == InColumnGroupMode);
+ if (token.name() == htmlTag) {
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
if (token.name() == colTag) {
- notImplemented();
+ m_tree.insertSelfClosingHTMLElement(token);
return;
}
- if (isTableBodyContextTag(token.name())) {
- m_openElements.popUntilTableScopeMarker();
- insertElement(token);
- m_insertionMode = InTableBodyMode;
+ if (!processColgroupEndTagForInColumnGroup()) {
+ ASSERT(m_isParsingFragment);
return;
}
- if (token.name() == tdTag || token.name() == thTag || token.name() == trTag) {
- notImplemented();
- return;
- }
- if (token.name() == tableTag) {
- notImplemented();
- return;
- }
- if (token.name() == styleTag || token.name() == scriptTag) {
- processStartTagForInHead(token);
- return;
- }
- if (token.name() == inputTag) {
- notImplemented();
- return;
- }
- if (token.name() == formTag) {
- parseError(token);
- if (m_formElement)
- return;
- insertSelfClosingElement(token);
- return;
- }
- parseError(token);
- notImplemented();
+ processStartTag(token);
break;
case InTableBodyMode:
ASSERT(insertionMode() == InTableBodyMode);
if (token.name() == trTag) {
- m_openElements.popUntilTableBodyScopeMarker(); // How is there ever anything to pop?
- insertElement(token);
- m_insertionMode = InRowMode;
+ m_tree.openElements()->popUntilTableBodyScopeMarker(); // How is there ever anything to pop?
+ m_tree.insertHTMLElement(token);
+ setInsertionMode(InRowMode);
return;
}
- if (token.name() == thTag || token.name() == tdTag) {
+ if (isTableCellContextTag(token.name())) {
parseError(token);
- AtomicHTMLToken fakeToken(HTMLToken::StartTag, trTag.localName());
- processStartTag(fakeToken);
+ processFakeStartTag(trTag);
ASSERT(insertionMode() == InRowMode);
processStartTag(token);
return;
}
- if (token.name() == captionTag || token.name() == colTag || token.name() == colgroupTag || isTableBodyContextTag(token.name())) {
- // FIXME: The spec is unclear as to what is supposed to happen here.
- notImplemented();
+ if (isCaptionColOrColgroupTag(token.name()) || isTableBodyContextTag(token.name())) {
+ // FIXME: This is slow.
+ if (!m_tree.openElements()->inTableScope(tbodyTag.localName()) && !m_tree.openElements()->inTableScope(theadTag.localName()) && !m_tree.openElements()->inTableScope(tfootTag.localName())) {
+ ASSERT(m_isParsingFragment);
+ parseError(token);
+ return;
+ }
+ m_tree.openElements()->popUntilTableBodyScopeMarker();
+ ASSERT(isTableBodyContextTag(m_tree.currentElement()->localName()));
+ processFakeEndTag(m_tree.currentElement()->tagQName());
+ processStartTag(token);
return;
}
- notImplemented(); // process using "in table" rules
+ processStartTagForInTable(token);
+ break;
+ case InRowMode:
+ ASSERT(insertionMode() == InRowMode);
+ if (isTableCellContextTag(token.name())) {
+ m_tree.openElements()->popUntilTableRowScopeMarker();
+ m_tree.insertHTMLElement(token);
+ setInsertionMode(InCellMode);
+ m_tree.activeFormattingElements()->appendMarker();
+ return;
+ }
+ if (token.name() == trTag
+ || isCaptionColOrColgroupTag(token.name())
+ || isTableBodyContextTag(token.name())) {
+ if (!processTrEndTagForInRow()) {
+ ASSERT(m_isParsingFragment);
+ return;
+ }
+ ASSERT(insertionMode() == InTableBodyMode);
+ processStartTag(token);
+ return;
+ }
+ processStartTagForInTable(token);
+ break;
+ case InCellMode:
+ ASSERT(insertionMode() == InCellMode);
+ if (isCaptionColOrColgroupTag(token.name())
+ || isTableCellContextTag(token.name())
+ || token.name() == trTag
+ || isTableBodyContextTag(token.name())) {
+ // FIXME: This could be more efficient.
+ if (!m_tree.openElements()->inTableScope(tdTag) && !m_tree.openElements()->inTableScope(thTag)) {
+ ASSERT(m_isParsingFragment);
+ parseError(token);
+ return;
+ }
+ closeTheCell();
+ processStartTag(token);
+ return;
+ }
+ processStartTagForInBody(token);
break;
case AfterBodyMode:
case AfterAfterBodyMode:
ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfterBodyMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
- m_insertionMode = InBodyMode;
+ setInsertionMode(InBodyMode);
processStartTag(token);
break;
case InHeadNoscriptMode:
ASSERT(insertionMode() == InHeadNoscriptMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
- if (token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == styleTag) {
+ if (token.name() == linkTag
+ || token.name() == metaTag
+ || token.name() == noframesTag
+ || token.name() == styleTag) {
bool didProcess = processStartTagForInHead(token);
ASSERT_UNUSED(didProcess, didProcess);
return;
@@ -835,15 +1389,15 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
case InFramesetMode:
ASSERT(insertionMode() == InFramesetMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
if (token.name() == framesetTag) {
- insertElement(token);
+ m_tree.insertHTMLElement(token);
return;
}
if (token.name() == frameTag) {
- insertSelfClosingElement(token);
+ m_tree.insertSelfClosingHTMLElement(token);
return;
}
if (token.name() == noframesTag) {
@@ -856,7 +1410,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
case AfterAfterFramesetMode:
ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return;
}
if (token.name() == noframesTag) {
@@ -865,61 +1419,197 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
}
parseError(token);
break;
- default:
+ case InSelectInTableMode:
+ ASSERT(insertionMode() == InSelectInTableMode);
+ if (token.name() == captionTag
+ || token.name() == tableTag
+ || isTableBodyContextTag(token.name())
+ || token.name() == trTag
+ || isTableCellContextTag(token.name())) {
+ parseError(token);
+ AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
+ processEndTag(endSelect);
+ processStartTag(token);
+ return;
+ }
+ // Fall through
+ case InSelectMode:
+ ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode);
+ if (token.name() == htmlTag) {
+ m_tree.insertHTMLHtmlStartTagInBody(token);
+ return;
+ }
+ if (token.name() == optionTag) {
+ if (m_tree.currentElement()->hasTagName(optionTag)) {
+ AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
+ processEndTag(endOption);
+ }
+ m_tree.insertHTMLElement(token);
+ return;
+ }
+ if (token.name() == optgroupTag) {
+ if (m_tree.currentElement()->hasTagName(optionTag)) {
+ AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName());
+ processEndTag(endOption);
+ }
+ if (m_tree.currentElement()->hasTagName(optgroupTag)) {
+ AtomicHTMLToken endOptgroup(HTMLToken::EndTag, optgroupTag.localName());
+ processEndTag(endOptgroup);
+ }
+ m_tree.insertHTMLElement(token);
+ return;
+ }
+ if (token.name() == selectTag) {
+ parseError(token);
+ AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
+ processEndTag(endSelect);
+ return;
+ }
+ if (token.name() == inputTag
+ || token.name() == keygenTag
+ || token.name() == textareaTag) {
+ parseError(token);
+ notImplemented(); // fragment case
+ AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
+ processEndTag(endSelect);
+ processStartTag(token);
+ return;
+ }
+ if (token.name() == scriptTag) {
+ bool didProcess = processStartTagForInHead(token);
+ ASSERT_UNUSED(didProcess, didProcess);
+ return;
+ }
+ break;
+ case InTableTextMode:
+ processDefaultForInTableTextMode(token);
+ processStartTag(token);
+ break;
+ case InForeignContentMode: {
+ // FIXME: We're missing a bunch of if branches here.
+ if (shouldProcessUsingSecondaryInsertionMode(token, m_tree.currentElement())) {
+ processUsingSecondaryInsertionModeAndAdjustInsertionMode(token);
+ return;
+ }
+ if (token.name() == bTag
+ || token.name() == bigTag
+ || token.name() == blockquoteTag
+ || token.name() == bodyTag
+ || token.name() == brTag
+ || token.name() == centerTag
+ || token.name() == codeTag
+ || token.name() == ddTag
+ || token.name() == divTag
+ || token.name() == dlTag
+ || token.name() == dtTag
+ || token.name() == emTag
+ || token.name() == embedTag
+ || isNumberedHeaderTag(token.name())
+ || token.name() == headTag
+ || token.name() == hrTag
+ || token.name() == iTag
+ || token.name() == imgTag
+ || token.name() == liTag
+ || token.name() == listingTag
+ || token.name() == menuTag
+ || token.name() == metaTag
+ || token.name() == nobrTag
+ || token.name() == olTag
+ || token.name() == pTag
+ || token.name() == preTag
+ || token.name() == rubyTag
+ || token.name() == sTag
+ || token.name() == smallTag
+ || token.name() == spanTag
+ || token.name() == strongTag
+ || token.name() == strikeTag
+ || token.name() == subTag
+ || token.name() == supTag
+ || token.name() == tableTag
+ || token.name() == ttTag
+ || token.name() == uTag
+ || token.name() == ulTag
+ || token.name() == varTag
+ || (token.name() == fontTag && (token.getAttributeItem(colorAttr) || token.getAttributeItem(faceAttr) || token.getAttributeItem(sizeAttr)))) {
+ m_tree.openElements()->popUntilElementWithNamespace(xhtmlNamespaceURI);
+ setInsertionMode(m_secondaryInsertionMode);
+ processStartTag(token);
+ return;
+ }
+ const AtomicString& currentNamespace = m_tree.currentElement()->namespaceURI();
+ if (currentNamespace == MathMLNames::mathmlNamespaceURI)
+ adjustMathMLAttributes(token);
+ if (currentNamespace == SVGNames::svgNamespaceURI) {
+ adjustSVGTagNameCase(token);
+ adjustSVGAttributes(token);
+ }
+ adjustForeignAttributes(token);
+ m_tree.insertForeignElement(token, currentNamespace);
+ break;
+ }
+ case TextMode:
notImplemented();
+ break;
}
}
bool HTMLTreeBuilder::processBodyEndTagForInBody(AtomicHTMLToken& token)
{
- if (!m_openElements.inScope(bodyTag.localName())) {
+ ASSERT(token.type() == HTMLToken::EndTag);
+ ASSERT(token.name() == bodyTag);
+ if (!m_tree.openElements()->inScope(bodyTag.localName())) {
parseError(token);
return false;
}
notImplemented();
- m_insertionMode = AfterBodyMode;
+ setInsertionMode(AfterBodyMode);
return true;
}
+void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::EndTag);
+ HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord();
+ while (1) {
+ Element* node = record->element();
+ if (node->hasLocalName(token.name())) {
+ m_tree.generateImpliedEndTags();
+ if (!m_tree.currentElement()->hasLocalName(token.name())) {
+ parseError(token);
+ // FIXME: This is either a bug in the spec, or a bug in our
+ // implementation. Filed a bug with HTML5:
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080
+ // We might have already popped the node for the token in
+ // generateImpliedEndTags, just abort.
+ if (!m_tree.openElements()->contains(node))
+ return;
+ }
+ m_tree.openElements()->popUntilPopped(node);
+ return;
+ }
+ if (isNotFormattingAndNotPhrasing(node)) {
+ parseError(token);
+ return;
+ }
+ record = record->next();
+ }
+}
+
// FIXME: This probably belongs on HTMLElementStack.
HTMLElementStack::ElementRecord* HTMLTreeBuilder::furthestBlockForFormattingElement(Element* formattingElement)
{
HTMLElementStack::ElementRecord* furthestBlock = 0;
- HTMLElementStack::ElementRecord* record = m_openElements.topRecord();
+ HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord();
for (; record; record = record->next()) {
if (record->element() == formattingElement)
return furthestBlock;
- const AtomicString& tagName = record->element()->localName();
- // !phrasing && !formatting == scoping || special
- if (isScopingTag(tagName) || isSpecialTag(tagName))
+ if (isNotFormattingAndNotPhrasing(record->element()))
furthestBlock = record;
}
ASSERT_NOT_REACHED();
return 0;
}
-void HTMLTreeBuilder::findFosterParentFor(Element* element)
-{
- Element* fosterParentElement = 0;
- HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName());
- if (lastTableElementRecord) {
- Element* lastTableElement = lastTableElementRecord->element();
- if (lastTableElement->parent()) {
- // FIXME: We need an insertElement which does not send mutation events.
- ExceptionCode ec = 0;
- lastTableElement->parent()->insertBefore(element, lastTableElement, ec);
- ASSERT(!ec);
- return;
- }
- fosterParentElement = lastTableElementRecord->next()->element();
- } else {
- ASSERT(m_isParsingFragment);
- fosterParentElement = m_openElements.bottom(); // <html> element
- }
-
- fosterParentElement->parserAddChild(element);
-}
-
// FIXME: This should have a whitty name.
// FIXME: This must be implemented in many other places in WebCore.
void HTMLTreeBuilder::reparentChildren(Element* oldParent, Element* newParent)
@@ -939,34 +1629,33 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
{
while (1) {
// 1.
- Element* formattingElement = m_activeFormattingElements.closestElementInScopeWithName(token.name());
- if (!formattingElement || !m_openElements.inScope(formattingElement)) {
+ Element* formattingElement = m_tree.activeFormattingElements()->closestElementInScopeWithName(token.name());
+ if (!formattingElement || (m_tree.openElements()->contains(formattingElement)) && !m_tree.openElements()->inScope(formattingElement)) {
parseError(token);
notImplemented(); // Check the stack of open elements for a more specific parse error.
return;
}
- HTMLElementStack::ElementRecord* formattingElementRecord = m_openElements.find(formattingElement);
+ HTMLElementStack::ElementRecord* formattingElementRecord = m_tree.openElements()->find(formattingElement);
if (!formattingElementRecord) {
parseError(token);
- m_activeFormattingElements.remove(formattingElement);
+ m_tree.activeFormattingElements()->remove(formattingElement);
return;
}
- if (formattingElement != currentElement())
+ if (formattingElement != m_tree.currentElement())
parseError(token);
// 2.
HTMLElementStack::ElementRecord* furthestBlock = furthestBlockForFormattingElement(formattingElement);
// 3.
if (!furthestBlock) {
- m_openElements.popUntil(formattingElement);
- m_openElements.pop();
- m_activeFormattingElements.remove(formattingElement);
+ m_tree.openElements()->popUntilPopped(formattingElement);
+ m_tree.activeFormattingElements()->remove(formattingElement);
return;
}
// 4.
ASSERT(furthestBlock->isAbove(formattingElementRecord));
Element* commonAncestor = formattingElementRecord->next()->element();
// 5.
- notImplemented(); // bookmark?
+ HTMLFormattingElementList::Bookmark bookmark = m_tree.activeFormattingElements()->bookmarkFor(formattingElement);
// 6.
HTMLElementStack::ElementRecord* node = furthestBlock;
HTMLElementStack::ElementRecord* nextNode = node->next();
@@ -977,26 +1666,28 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
ASSERT(node);
nextNode = node->next(); // Save node->next() for the next iteration in case node is deleted in 6.2.
// 6.2
- if (!m_activeFormattingElements.contains(node->element())) {
- m_openElements.remove(node->element());
+ if (!m_tree.activeFormattingElements()->contains(node->element())) {
+ m_tree.openElements()->remove(node->element());
node = 0;
continue;
}
// 6.3
if (node == formattingElementRecord)
break;
- // 6.4
- if (lastNode == furthestBlock)
- notImplemented(); // move bookmark.
// 6.5
// FIXME: We're supposed to save the original token in the entry.
AtomicHTMLToken fakeToken(HTMLToken::StartTag, node->element()->localName());
- // Is createElement correct? (instead of insertElement)
+ // Is createHTMLElement correct? (instead of insertHTMLElement)
// Does this code ever leave newElement unattached?
- RefPtr<Element> newElement = createElement(fakeToken);
- HTMLFormattingElementList::Entry* nodeEntry = m_activeFormattingElements.find(node->element());
+ RefPtr<Element> newElement = m_tree.createHTMLElement(fakeToken);
+ HTMLFormattingElementList::Entry* nodeEntry = m_tree.activeFormattingElements()->find(node->element());
nodeEntry->replaceElement(newElement.get());
node->replaceElement(newElement.release());
+ // 6.4 -- Intentionally out of order to handle the case where node
+ // was replaced in 6.5.
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10096
+ if (lastNode == furthestBlock)
+ bookmark.moveToAfter(node->element());
// 6.6
// Use appendChild instead of parserAddChild to handle possible reparenting.
ExceptionCode ec;
@@ -1010,7 +1701,7 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
if (commonAncestorTag == tableTag
|| commonAncestorTag == trTag
|| isTableBodyContextTag(commonAncestorTag))
- findFosterParentFor(lastNode->element());
+ m_tree.fosterParent(lastNode->element());
else {
ExceptionCode ec;
commonAncestor->appendChild(lastNode->element(), ec);
@@ -1019,22 +1710,403 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
// 8
// FIXME: We're supposed to save the original token in the entry.
AtomicHTMLToken fakeToken(HTMLToken::StartTag, formattingElement->localName());
- RefPtr<Element> newElement = createElement(fakeToken);
+ RefPtr<Element> newElement = m_tree.createHTMLElement(fakeToken);
// 9
reparentChildren(furthestBlock->element(), newElement.get());
// 10
furthestBlock->element()->parserAddChild(newElement);
// 11
- m_activeFormattingElements.remove(formattingElement);
- notImplemented(); // insert new element at bookmark
+ m_tree.activeFormattingElements()->remove(formattingElement);
+ m_tree.activeFormattingElements()->insertAt(newElement.get(), bookmark);
// 12
- m_openElements.remove(formattingElement);
- m_openElements.insertAbove(newElement, furthestBlock);
+ m_tree.openElements()->remove(formattingElement);
+ m_tree.openElements()->insertAbove(newElement, furthestBlock);
+ }
+}
+
+void HTMLTreeBuilder::setSecondaryInsertionMode(InsertionMode mode)
+{
+ ASSERT(mode != InForeignContentMode);
+ m_secondaryInsertionMode = mode;
+}
+
+void HTMLTreeBuilder::setInsertionModeAndEnd(InsertionMode newInsertionMode, bool foreign)
+{
+ setInsertionMode(newInsertionMode);
+ if (foreign) {
+ setSecondaryInsertionMode(m_insertionMode);
+ setInsertionMode(InForeignContentMode);
+ }
+}
+
+void HTMLTreeBuilder::resetInsertionModeAppropriately()
+{
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately
+ bool last = false;
+ bool foreign = false;
+ HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord();
+ while (1) {
+ Element* node = nodeRecord->element();
+ if (node == m_tree.openElements()->bottom()) {
+ ASSERT(m_isParsingFragment);
+ last = true;
+ notImplemented(); // node = m_contextElement;
+ }
+ if (node->hasTagName(selectTag)) {
+ ASSERT(m_isParsingFragment);
+ return setInsertionModeAndEnd(InSelectMode, foreign);
+ }
+ if (node->hasTagName(tdTag) || node->hasTagName(thTag))
+ return setInsertionModeAndEnd(InCellMode, foreign);
+ if (node->hasTagName(trTag))
+ return setInsertionModeAndEnd(InRowMode, foreign);
+ if (isTableBodyContextTag(node->localName()))
+ return setInsertionModeAndEnd(InTableBodyMode, foreign);
+ if (node->hasTagName(captionTag))
+ return setInsertionModeAndEnd(InCaptionMode, foreign);
+ if (node->hasTagName(colgroupTag)) {
+ ASSERT(m_isParsingFragment);
+ return setInsertionModeAndEnd(InColumnGroupMode, foreign);
+ }
+ if (node->hasTagName(tableTag))
+ return setInsertionModeAndEnd(InTableMode, foreign);
+ if (node->hasTagName(headTag)) {
+ ASSERT(m_isParsingFragment);
+ return setInsertionModeAndEnd(InBodyMode, foreign);
+ }
+ if (node->hasTagName(bodyTag))
+ return setInsertionModeAndEnd(InBodyMode, foreign);
+ if (node->hasTagName(framesetTag)) {
+ ASSERT(m_isParsingFragment);
+ return setInsertionModeAndEnd(InFramesetMode, foreign);
+ }
+ if (node->hasTagName(htmlTag)) {
+ ASSERT(m_isParsingFragment);
+ return setInsertionModeAndEnd(BeforeHeadMode, foreign);
+ }
+ if (node->namespaceURI() == SVGNames::svgNamespaceURI
+ || node->namespaceURI() == MathMLNames::mathmlNamespaceURI)
+ foreign = true;
+ if (last) {
+ ASSERT(m_isParsingFragment);
+ return setInsertionModeAndEnd(InBodyMode, foreign);
+ }
+ nodeRecord = nodeRecord->next();
+ }
+}
+
+void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::EndTag);
+ if (isTableBodyContextTag(token.name())) {
+ if (!m_tree.openElements()->inTableScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.openElements()->popUntilTableBodyScopeMarker();
+ m_tree.openElements()->pop();
+ setInsertionMode(InTableMode);
+ return;
+ }
+ if (token.name() == tableTag) {
+ // FIXME: This is slow.
+ if (!m_tree.openElements()->inTableScope(tbodyTag.localName()) && !m_tree.openElements()->inTableScope(theadTag.localName()) && !m_tree.openElements()->inTableScope(tfootTag.localName())) {
+ ASSERT(m_isParsingFragment);
+ parseError(token);
+ return;
+ }
+ m_tree.openElements()->popUntilTableBodyScopeMarker();
+ ASSERT(isTableBodyContextTag(m_tree.currentElement()->localName()));
+ processFakeEndTag(m_tree.currentElement()->tagQName());
+ processEndTag(token);
+ return;
+ }
+ if (token.name() == bodyTag
+ || isCaptionColOrColgroupTag(token.name())
+ || token.name() == htmlTag
+ || isTableCellContextTag(token.name())
+ || token.name() == trTag) {
+ parseError(token);
+ return;
+ }
+ processEndTagForInTable(token);
+}
+
+void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::EndTag);
+ if (token.name() == trTag) {
+ processTrEndTagForInRow();
+ return;
+ }
+ if (token.name() == tableTag) {
+ if (!processTrEndTagForInRow()) {
+ ASSERT(m_isParsingFragment);
+ return;
+ }
+ ASSERT(insertionMode() == InTableBodyMode);
+ processEndTag(token);
+ return;
+ }
+ if (isTableBodyContextTag(token.name())) {
+ if (!m_tree.openElements()->inTableScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ processFakeEndTag(trTag);
+ ASSERT(insertionMode() == InTableBodyMode);
+ processEndTag(token);
+ return;
+ }
+ if (token.name() == bodyTag
+ || isCaptionColOrColgroupTag(token.name())
+ || token.name() == htmlTag
+ || isTableCellContextTag(token.name())) {
+ parseError(token);
+ return;
+ }
+ processEndTagForInTable(token);
+}
+
+void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::EndTag);
+ if (isTableCellContextTag(token.name())) {
+ if (!m_tree.openElements()->inTableScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTags();
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ m_tree.activeFormattingElements()->clearToLastMarker();
+ setInsertionMode(InRowMode);
+ ASSERT(m_tree.currentElement()->hasTagName(trTag));
+ return;
+ }
+ if (token.name() == bodyTag
+ || isCaptionColOrColgroupTag(token.name())
+ || token.name() == htmlTag) {
+ parseError(token);
+ return;
}
+ if (token.name() == tableTag
+ || token.name() == trTag
+ || isTableBodyContextTag(token.name())) {
+ if (!m_tree.openElements()->inTableScope(token.name())) {
+ ASSERT(m_isParsingFragment);
+ // FIXME: It is unclear what the exact ASSERT should be.
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10098
+ parseError(token);
+ return;
+ }
+ closeTheCell();
+ processEndTag(token);
+ return;
+ }
+ processEndTagForInBody(token);
+}
+
+void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::EndTag);
+ if (token.name() == bodyTag) {
+ processBodyEndTagForInBody(token);
+ return;
+ }
+ if (token.name() == htmlTag) {
+ AtomicHTMLToken endBody(HTMLToken::EndTag, bodyTag.localName());
+ if (processBodyEndTagForInBody(endBody))
+ processEndTag(token);
+ return;
+ }
+ if (token.name() == addressTag
+ || token.name() == articleTag
+ || token.name() == asideTag
+ || token.name() == blockquoteTag
+ || token.name() == buttonTag
+ || token.name() == centerTag
+ || token.name() == "details"
+ || token.name() == dirTag
+ || token.name() == divTag
+ || token.name() == dlTag
+ || token.name() == fieldsetTag
+ || token.name() == "figure"
+ || token.name() == footerTag
+ || token.name() == headerTag
+ || token.name() == hgroupTag
+ || token.name() == listingTag
+ || token.name() == menuTag
+ || token.name() == navTag
+ || token.name() == olTag
+ || token.name() == preTag
+ || token.name() == sectionTag
+ || token.name() == ulTag) {
+ if (!m_tree.openElements()->inScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTags();
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ return;
+ }
+ if (token.name() == formTag) {
+ RefPtr<Element> node = m_tree.takeForm();
+ if (!node || !m_tree.openElements()->inScope(node.get())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTags();
+ if (m_tree.currentElement() != node.get())
+ parseError(token);
+ m_tree.openElements()->remove(node.get());
+ }
+ if (token.name() == pTag) {
+ if (!m_tree.openElements()->inScope(token.name())) {
+ parseError(token);
+ processFakeStartTag(pTag);
+ ASSERT(m_tree.openElements()->inScope(token.name()));
+ processEndTag(token);
+ return;
+ }
+ m_tree.generateImpliedEndTagsWithExclusion(token.name());
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ return;
+ }
+ if (token.name() == liTag) {
+ if (!m_tree.openElements()->inListItemScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTagsWithExclusion(token.name());
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ return;
+ }
+ if (token.name() == ddTag
+ || token.name() == dtTag) {
+ if (!m_tree.openElements()->inScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTagsWithExclusion(token.name());
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ return;
+ }
+ if (isNumberedHeaderTag(token.name())) {
+ if (!m_tree.openElements()->inScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTags();
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ return;
+ }
+ if (token.name() == "sarcasm") {
+ notImplemented(); // Take a deep breath.
+ return;
+ }
+ if (isFormattingTag(token.name())) {
+ callTheAdoptionAgency(token);
+ return;
+ }
+ if (token.name() == appletTag
+ || token.name() == marqueeTag
+ || token.name() == objectTag) {
+ if (!m_tree.openElements()->inScope(token.name())) {
+ parseError(token);
+ return;
+ }
+ m_tree.generateImpliedEndTags();
+ if (!m_tree.currentElement()->hasLocalName(token.name()))
+ parseError(token);
+ m_tree.openElements()->popUntilPopped(token.name());
+ m_tree.activeFormattingElements()->clearToLastMarker();
+ return;
+ }
+ if (token.name() == brTag) {
+ parseError(token);
+ processFakeStartTag(brTag);
+ return;
+ }
+ processAnyOtherEndTagForInBody(token);
+}
+
+bool HTMLTreeBuilder::processCaptionEndTagForInCaption()
+{
+ if (!m_tree.openElements()->inTableScope(captionTag.localName())) {
+ ASSERT(m_isParsingFragment);
+ // FIXME: parse error
+ return false;
+ }
+ m_tree.generateImpliedEndTags();
+ // FIXME: parse error if (!m_tree.currentElement()->hasTagName(captionTag))
+ m_tree.openElements()->popUntilPopped(captionTag.localName());
+ m_tree.activeFormattingElements()->clearToLastMarker();
+ setInsertionMode(InTableMode);
+ return true;
+}
+
+bool HTMLTreeBuilder::processTrEndTagForInRow()
+{
+ if (!m_tree.openElements()->inTableScope(trTag.localName())) {
+ ASSERT(m_isParsingFragment);
+ // FIXME: parse error
+ return false;
+ }
+ m_tree.openElements()->popUntilTableRowScopeMarker();
+ ASSERT(m_tree.currentElement()->hasTagName(trTag));
+ m_tree.openElements()->pop();
+ setInsertionMode(InTableBodyMode);
+ return true;
+}
+
+bool HTMLTreeBuilder::processTableEndTagForInTable()
+{
+ if (!m_tree.openElements()->inTableScope(tableTag)) {
+ ASSERT(m_isParsingFragment);
+ // FIXME: parse error.
+ return false;
+ }
+ m_tree.openElements()->popUntilPopped(tableTag.localName());
+ resetInsertionModeAppropriately();
+ return true;
+}
+
+void HTMLTreeBuilder::processEndTagForInTable(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::EndTag);
+ if (token.name() == tableTag) {
+ processTableEndTagForInTable();
+ return;
+ }
+ if (token.name() == bodyTag
+ || isCaptionColOrColgroupTag(token.name())
+ || token.name() == htmlTag
+ || isTableBodyContextTag(token.name())
+ || isTableCellContextTag(token.name())
+ || token.name() == trTag) {
+ parseError(token);
+ return;
+ }
+ // Is this redirection necessary here?
+ HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement()));
+ processEndTagForInBody(token);
}
void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
{
+ ASSERT(token.type() == HTMLToken::EndTag);
switch (insertionMode()) {
case InitialMode:
ASSERT(insertionMode() == InitialMode);
@@ -1050,7 +2122,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
// Fall through.
case BeforeHeadMode:
ASSERT(insertionMode() == BeforeHeadMode);
- if (token.name() != headTag && token.name() != bodyTag && token.name() != brTag) {
+ if (token.name() != headTag && token.name() != bodyTag && token.name() != htmlTag && token.name() != brTag) {
parseError(token);
return;
}
@@ -1059,7 +2131,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
case InHeadMode:
ASSERT(insertionMode() == InHeadMode);
if (token.name() == headTag) {
- m_openElements.popHTMLHeadElement();
+ m_tree.openElements()->popHTMLHeadElement();
setInsertionMode(AfterHeadMode);
return;
}
@@ -1079,123 +2151,66 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
// Fall through
case InBodyMode:
ASSERT(insertionMode() == InBodyMode);
- if (token.name() == bodyTag) {
- processBodyEndTagForInBody(token);
- return;
- }
- if (token.name() == htmlTag) {
- if (processBodyEndTagForInBody(token))
- processEndTag(token);
- return;
- }
- if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == buttonTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == listingTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == preTag || token.name() == sectionTag || token.name() == ulTag) {
- if (!m_openElements.inScope(token.name())) {
- parseError(token);
- return;
- }
- generateImpliedEndTags();
- if (currentElement()->tagQName() != token.name())
- parseError(token);
- m_openElements.popUntil(token.name());
- m_openElements.pop();
- }
- if (token.name() == formTag) {
- RefPtr<Element> node = m_formElement.release();
- if (!node || !m_openElements.inScope(node.get())) {
- parseError(token);
- return;
- }
- generateImpliedEndTags();
- if (currentElement() != node.get())
- parseError(token);
- m_openElements.remove(node.get());
- }
- if (token.name() == pTag) {
- if (!m_openElements.inScope(token.name())) {
- parseError(token);
- notImplemented();
- return;
- }
- generateImpliedEndTagsWithExclusion(token.name());
- if (!currentElement()->hasLocalName(token.name()))
- parseError(token);
- m_openElements.popUntil(token.name());
- m_openElements.pop();
- return;
- }
- if (token.name() == liTag) {
- if (!m_openElements.inListItemScope(token.name())) {
- parseError(token);
- return;
- }
- generateImpliedEndTagsWithExclusion(token.name());
- if (!currentElement()->hasLocalName(token.name()))
- parseError(token);
- m_openElements.popUntil(token.name());
- m_openElements.pop();
- return;
- }
- if (token.name() == ddTag || token.name() == dtTag) {
- if (!m_openElements.inScope(token.name())) {
- parseError(token);
- return;
- }
- generateImpliedEndTagsWithExclusion(token.name());
- if (!currentElement()->hasLocalName(token.name()))
- parseError(token);
- m_openElements.popUntil(token.name());
- m_openElements.pop();
+ processEndTagForInBody(token);
+ break;
+ case InTableMode:
+ ASSERT(insertionMode() == InTableMode);
+ processEndTagForInTable(token);
+ break;
+ case InCaptionMode:
+ ASSERT(insertionMode() == InCaptionMode);
+ if (token.name() == captionTag) {
+ processCaptionEndTagForInCaption();
return;
}
- if (isNumberedHeaderTag(token.name())) {
- if (!m_openElements.inScope(token.name())) {
- parseError(token);
+ if (token.name() == tableTag) {
+ parseError(token);
+ if (!processCaptionEndTagForInCaption()) {
+ ASSERT(m_isParsingFragment);
return;
}
- generateImpliedEndTags();
- if (!currentElement()->hasLocalName(token.name()))
- parseError(token);
- m_openElements.popUntil(token.name());
- m_openElements.pop();
- return;
- }
- if (token.name() == "sarcasm") {
- notImplemented(); // Take a deep breath.
+ processEndTag(token);
return;
}
- if (isFormattingTag(token.name())) {
- callTheAdoptionAgency(token);
+ if (token.name() == bodyTag
+ || token.name() == colTag
+ || token.name() == colgroupTag
+ || token.name() == htmlTag
+ || isTableBodyContextTag(token.name())
+ || isTableCellContextTag(token.name())
+ || token.name() == trTag) {
+ parseError(token);
return;
}
- if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) {
- if (!m_openElements.inScope(token.name())) {
- parseError(token);
- return;
- }
- generateImpliedEndTags();
- if (currentElement()->tagQName() != token.name())
- parseError(token);
- m_openElements.popUntil(token.name());
- m_openElements.pop();
- m_activeFormattingElements.clearToLastMarker();
+ processEndTagForInBody(token);
+ break;
+ case InColumnGroupMode:
+ ASSERT(insertionMode() == InColumnGroupMode);
+ if (token.name() == colgroupTag) {
+ processColgroupEndTagForInColumnGroup();
return;
}
- if (token.name() == brTag) {
+ if (token.name() == colTag) {
parseError(token);
- reconstructTheActiveFormattingElements();
- // Notice that we lose the attributes.
- AtomicHTMLToken startBr(HTMLToken::StartTag, token.name());
- insertSelfClosingElement(startBr);
- m_framesetOk = false;
return;
}
- // FIXME: We need an iterator over m_openElements to implement this
- // correctly.
- notImplemented();
- if (!m_openElements.inScope(token.name()))
+ if (!processColgroupEndTagForInColumnGroup()) {
+ ASSERT(m_isParsingFragment);
return;
- m_openElements.popUntil(token.name());
- m_openElements.pop();
+ }
+ processEndTag(token);
+ break;
+ case InRowMode:
+ ASSERT(insertionMode() == InRowMode);
+ processEndTagForInRow(token);
+ break;
+ case InCellMode:
+ ASSERT(insertionMode() == InCellMode);
+ processEndTagForInCell(token);
+ break;
+ case InTableBodyMode:
+ ASSERT(insertionMode() == InTableBodyMode);
+ processEndTagForInTableBody(token);
break;
case AfterBodyMode:
ASSERT(insertionMode() == AfterBodyMode);
@@ -1204,22 +2219,22 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
parseError(token);
return;
}
- m_insertionMode = AfterAfterBodyMode;
+ setInsertionMode(AfterAfterBodyMode);
return;
}
// Fall through.
case AfterAfterBodyMode:
ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfterBodyMode);
parseError(token);
- m_insertionMode = InBodyMode;
+ setInsertionMode(InBodyMode);
processEndTag(token);
break;
case InHeadNoscriptMode:
ASSERT(insertionMode() == InHeadNoscriptMode);
if (token.name() == noscriptTag) {
- ASSERT(currentElement()->tagQName() == noscriptTag);
- m_openElements.pop();
- ASSERT(currentElement()->tagQName() == headTag);
+ ASSERT(m_tree.currentElement()->hasTagName(noscriptTag));
+ m_tree.openElements()->pop();
+ ASSERT(m_tree.currentElement()->hasTagName(headTag));
setInsertionMode(InHeadMode);
return;
}
@@ -1234,32 +2249,32 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
if (token.name() == scriptTag) {
// Pause ourselves so that parsing stops until the script can be processed by the caller.
m_isPaused = true;
- ASSERT(currentElement()->tagQName() == scriptTag);
- m_scriptToProcess = currentElement();
- m_openElements.pop();
- m_insertionMode = m_originalInsertionMode;
+ ASSERT(m_tree.currentElement()->hasTagName(scriptTag));
+ m_scriptToProcess = m_tree.currentElement();
+ m_tree.openElements()->pop();
+ setInsertionMode(m_originalInsertionMode);
return;
}
- m_openElements.pop();
- m_insertionMode = m_originalInsertionMode;
+ m_tree.openElements()->pop();
+ setInsertionMode(m_originalInsertionMode);
break;
case InFramesetMode:
ASSERT(insertionMode() == InFramesetMode);
if (token.name() == framesetTag) {
- if (currentElement() == m_openElements.htmlElement()) {
+ if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) {
parseError(token);
return;
}
- m_openElements.pop();
- if (!m_isParsingFragment && !currentElement()->hasTagName(framesetTag))
- m_insertionMode = AfterFramesetMode;
+ m_tree.openElements()->pop();
+ if (!m_isParsingFragment && !m_tree.currentElement()->hasTagName(framesetTag))
+ setInsertionMode(AfterFramesetMode);
return;
}
break;
case AfterFramesetMode:
ASSERT(insertionMode() == AfterFramesetMode);
if (token.name() == htmlTag) {
- m_insertionMode = AfterAfterFramesetMode;
+ setInsertionMode(AfterAfterFramesetMode);
return;
}
// Fall through.
@@ -1267,87 +2282,296 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode);
parseError(token);
break;
- default:
- notImplemented();
+ case InSelectInTableMode:
+ ASSERT(insertionMode() == InSelectInTableMode);
+ if (token.name() == captionTag
+ || token.name() == tableTag
+ || isTableBodyContextTag(token.name())
+ || token.name() == trTag
+ || isTableCellContextTag(token.name())) {
+ parseError(token);
+ if (m_tree.openElements()->inTableScope(token.name())) {
+ AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName());
+ processEndTag(endSelect);
+ processEndTag(token);
+ }
+ return;
+ }
+ // Fall through.
+ case InSelectMode:
+ ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode);
+ if (token.name() == optgroupTag) {
+ if (m_tree.currentElement()->hasTagName(optionTag) && m_tree.oneBelowTop()->hasTagName(optgroupTag))
+ processFakeEndTag(optionTag);
+ if (m_tree.currentElement()->hasTagName(optgroupTag)) {
+ m_tree.openElements()->pop();
+ return;
+ }
+ parseError(token);
+ return;
+ }
+ if (token.name() == optionTag) {
+ if (m_tree.currentElement()->hasTagName(optionTag)) {
+ m_tree.openElements()->pop();
+ return;
+ }
+ parseError(token);
+ return;
+ }
+ if (token.name() == selectTag) {
+ notImplemented(); // fragment case
+ m_tree.openElements()->popUntilPopped(selectTag.localName());
+ resetInsertionModeAppropriately();
+ return;
+ }
+ break;
+ case InTableTextMode:
+ processDefaultForInTableTextMode(token);
+ processEndTag(token);
+ break;
+ case InForeignContentMode:
+ if (token.name() == SVGNames::scriptTag && m_tree.currentElement()->hasTagName(SVGNames::scriptTag)) {
+ notImplemented();
+ return;
+ }
+ if (m_tree.currentElement()->namespaceURI() != xhtmlNamespaceURI) {
+ // FIXME: This code just wants an Element* iterator, instead of an ElementRecord*
+ HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord();
+ if (!nodeRecord->element()->hasLocalName(token.name())) {
+ parseError(token);
+ // FIXME: This return is not in the spec but appears to be needed.
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10118
+ return;
+ }
+ while (1) {
+ if (nodeRecord->element()->hasLocalName(token.name())) {
+ m_tree.openElements()->popUntilPopped(nodeRecord->element());
+ return;
+ }
+ nodeRecord = nodeRecord->next();
+ if (nodeRecord->element()->namespaceURI() == xhtmlNamespaceURI)
+ processUsingSecondaryInsertionModeAndAdjustInsertionMode(token);
+ }
+ return;
+ }
+ processUsingSecondaryInsertionModeAndAdjustInsertionMode(token);
+ break;
+ }
+}
+
+class HTMLTreeBuilder::FakeInsertionMode : public Noncopyable {
+public:
+ FakeInsertionMode(HTMLTreeBuilder* treeBuilder, InsertionMode mode)
+ : m_treeBuilder(treeBuilder)
+ , m_originalMode(treeBuilder->insertionMode())
+ {
+ m_treeBuilder->setFakeInsertionMode(mode);
+ }
+
+ ~FakeInsertionMode()
+ {
+ if (m_treeBuilder->isFakeInsertionMode())
+ m_treeBuilder->setInsertionMode(m_originalMode);
+ }
+
+private:
+ HTMLTreeBuilder* m_treeBuilder;
+ InsertionMode m_originalMode;
+};
+
+// This handles both secondary insertion mode processing, as well as updating
+// the insertion mode. These are separate steps in the spec, but always occur
+// right after one another.
+void HTMLTreeBuilder::processUsingSecondaryInsertionModeAndAdjustInsertionMode(AtomicHTMLToken& token)
+{
+ ASSERT(token.type() == HTMLToken::StartTag || token.type() == HTMLToken::EndTag);
+ {
+ FakeInsertionMode fakeMode(this, m_secondaryInsertionMode);
+ processToken(token);
}
+ if (insertionMode() == InForeignContentMode && m_tree.openElements()->hasOnlyHTMLElementsInScope())
+ setInsertionMode(m_secondaryInsertionMode);
}
void HTMLTreeBuilder::processComment(AtomicHTMLToken& token)
{
- if (m_insertionMode == InitialMode || m_insertionMode == BeforeHTMLMode || m_insertionMode == AfterAfterBodyMode || m_insertionMode == AfterAfterFramesetMode) {
- insertCommentOnDocument(token);
+ ASSERT(token.type() == HTMLToken::Comment);
+ if (m_insertionMode == InitialMode
+ || m_insertionMode == BeforeHTMLMode
+ || m_insertionMode == AfterAfterBodyMode
+ || m_insertionMode == AfterAfterFramesetMode) {
+ m_tree.insertCommentOnDocument(token);
return;
}
if (m_insertionMode == AfterBodyMode) {
- insertCommentOnHTMLHtmlElement(token);
+ m_tree.insertCommentOnHTMLHtmlElement(token);
+ return;
+ }
+ if (m_insertionMode == InTableTextMode) {
+ processDefaultForInTableTextMode(token);
+ processComment(token);
return;
}
- insertComment(token);
+ m_tree.insertComment(token);
}
void HTMLTreeBuilder::processCharacter(AtomicHTMLToken& token)
{
- // FIXME: We need to figure out how to handle each character individually.
+ ASSERT(token.type() == HTMLToken::Character);
+
+ // FIXME: Currently this design has an extra memcpy because we copy the
+ // characters out of the HTMLTokenizer's buffer into the AtomicHTMLToken
+ // and then into the text node. What we'd really like is to copy directly
+ // from the HTMLTokenizer's buffer into the text node.
+ ExternalCharacterTokenBuffer buffer(token);
+
+ReprocessBuffer:
switch (insertionMode()) {
- case InitialMode:
+ case InitialMode: {
ASSERT(insertionMode() == InitialMode);
- notImplemented();
+ buffer.skipLeadingWhitespace();
+ if (buffer.isEmpty())
+ return;
processDefaultForInitialMode(token);
// Fall through.
- case BeforeHTMLMode:
+ }
+ case BeforeHTMLMode: {
ASSERT(insertionMode() == BeforeHTMLMode);
- notImplemented();
+ buffer.skipLeadingWhitespace();
+ if (buffer.isEmpty())
+ return;
processDefaultForBeforeHTMLMode(token);
// Fall through.
- case BeforeHeadMode:
+ }
+ case BeforeHeadMode: {
ASSERT(insertionMode() == BeforeHeadMode);
- notImplemented();
+ buffer.skipLeadingWhitespace();
+ if (buffer.isEmpty())
+ return;
processDefaultForBeforeHeadMode(token);
// Fall through.
- case InHeadMode:
+ }
+ case InHeadMode: {
ASSERT(insertionMode() == InHeadMode);
- notImplemented();
+ String leadingWhitespace = buffer.takeLeadingWhitespace();
+ if (!leadingWhitespace.isEmpty())
+ m_tree.insertTextNode(leadingWhitespace);
+ if (buffer.isEmpty())
+ return;
processDefaultForInHeadMode(token);
// Fall through.
- case AfterHeadMode:
+ }
+ case AfterHeadMode: {
ASSERT(insertionMode() == AfterHeadMode);
- notImplemented();
+ String leadingWhitespace = buffer.takeLeadingWhitespace();
+ if (!leadingWhitespace.isEmpty())
+ m_tree.insertTextNode(leadingWhitespace);
+ if (buffer.isEmpty())
+ return;
processDefaultForAfterHeadMode(token);
- // Fall through
+ // Fall through.
+ }
case InBodyMode:
- ASSERT(insertionMode() == InBodyMode);
- notImplemented();
- insertTextNode(token);
+ case InCaptionMode:
+ case InCellMode: {
+ ASSERT(insertionMode() == InBodyMode || insertionMode() == InCaptionMode || insertionMode() == InCellMode);
+ m_tree.reconstructTheActiveFormattingElements();
+ String characters = buffer.takeRemaining();
+ m_tree.insertTextNode(characters);
+ if (m_framesetOk && hasNonWhitespace(characters))
+ m_framesetOk = false;
break;
+ }
+ case InTableMode:
+ case InTableBodyMode:
+ case InRowMode: {
+ ASSERT(insertionMode() == InTableMode || insertionMode() == InTableBodyMode || insertionMode() == InRowMode);
+ ASSERT(m_pendingTableCharacters.isEmpty());
+ m_originalInsertionMode = m_insertionMode;
+ setInsertionMode(InTableTextMode);
+ // Fall through.
+ }
+ case InTableTextMode: {
+ buffer.giveRemainingTo(m_pendingTableCharacters);
+ break;
+ }
+ case InColumnGroupMode: {
+ ASSERT(insertionMode() == InColumnGroupMode);
+ String leadingWhitespace = buffer.takeLeadingWhitespace();
+ if (!leadingWhitespace.isEmpty())
+ m_tree.insertTextNode(leadingWhitespace);
+ if (buffer.isEmpty())
+ return;
+ if (!processColgroupEndTagForInColumnGroup()) {
+ ASSERT(m_isParsingFragment);
+ return;
+ }
+ goto ReprocessBuffer;
+ }
case AfterBodyMode:
- case AfterAfterBodyMode:
+ case AfterAfterBodyMode: {
ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfterBodyMode);
parseError(token);
- m_insertionMode = InBodyMode;
- processCharacter(token);
+ setInsertionMode(InBodyMode);
+ goto ReprocessBuffer;
break;
- case TextMode:
- notImplemented();
- insertTextNode(token);
+ }
+ case TextMode: {
+ ASSERT(insertionMode() == TextMode);
+ m_tree.insertTextNode(buffer.takeRemaining());
break;
- case InHeadNoscriptMode:
+ }
+ case InHeadNoscriptMode: {
ASSERT(insertionMode() == InHeadNoscriptMode);
+ String leadingWhitespace = buffer.takeLeadingWhitespace();
+ if (!leadingWhitespace.isEmpty())
+ m_tree.insertTextNode(leadingWhitespace);
+ if (buffer.isEmpty())
+ return;
processDefaultForInHeadNoscriptMode(token);
- processToken(token);
+ goto ReprocessBuffer;
break;
+ }
case InFramesetMode:
- case AfterFramesetMode:
- case AfterAfterFramesetMode:
+ case AfterFramesetMode: {
ASSERT(insertionMode() == InFramesetMode || insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode);
- parseError(token);
+ String leadingWhitespace = buffer.takeRemainingWhitespace();
+ if (!leadingWhitespace.isEmpty())
+ m_tree.insertTextNode(leadingWhitespace);
+ // FIXME: We should generate a parse error if we skipped over any
+ // non-whitespace characters.
+ break;
+ }
+ case InSelectInTableMode:
+ case InSelectMode: {
+ ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode);
+ m_tree.insertTextNode(buffer.takeRemaining());
break;
- default:
- notImplemented();
+ }
+ case InForeignContentMode: {
+ ASSERT(insertionMode() == InForeignContentMode);
+ String characters = buffer.takeRemaining();
+ m_tree.insertTextNode(characters);
+ if (m_framesetOk && hasNonWhitespace(characters))
+ m_framesetOk = false;
+ break;
+ }
+ case AfterAfterFramesetMode: {
+ String leadingWhitespace = buffer.takeRemainingWhitespace();
+ if (!leadingWhitespace.isEmpty()) {
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertTextNode(leadingWhitespace);
+ }
+ // FIXME: We should generate a parse error if we skipped over any
+ // non-whitespace characters.
+ break;
+ }
}
}
void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token)
{
+ ASSERT(token.type() == HTMLToken::EndOfFile);
switch (insertionMode()) {
case InitialMode:
ASSERT(insertionMode() == InitialMode);
@@ -1370,7 +2594,8 @@ void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token)
processDefaultForAfterHeadMode(token);
// Fall through
case InBodyMode:
- ASSERT(insertionMode() == InBodyMode);
+ case InCellMode:
+ ASSERT(insertionMode() == InBodyMode || insertionMode() == InCellMode);
notImplemented();
break;
case AfterBodyMode:
@@ -1383,17 +2608,47 @@ void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token)
processDefaultForInHeadNoscriptMode(token);
processToken(token);
break;
- case InFramesetMode:
- ASSERT(insertionMode() == InFramesetMode);
- if (currentElement() != m_openElements.htmlElement())
- parseError(token);
- break;
case AfterFramesetMode:
case AfterAfterFramesetMode:
ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode);
break;
- default:
+ case InFramesetMode:
+ case InTableMode:
+ case InTableBodyMode:
+ case InSelectInTableMode:
+ case InSelectMode:
+ ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode || insertionMode() == InTableBodyMode);
+ if (m_tree.currentElement() != m_tree.openElements()->htmlElement())
+ parseError(token);
+ break;
+ case InColumnGroupMode:
+ if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) {
+ ASSERT(m_isParsingFragment);
+ return;
+ }
+ if (!processColgroupEndTagForInColumnGroup()) {
+ ASSERT(m_isParsingFragment);
+ return;
+ }
+ processEndOfFile(token);
+ break;
+ case InForeignContentMode:
+ parseError(token);
+ // FIXME: Following the spec would infinitely recurse on <svg><svg>
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10115
+ m_tree.openElements()->popUntilElementWithNamespace(xhtmlNamespaceURI);
+ setInsertionMode(m_secondaryInsertionMode);
+ processEndOfFile(token);
+ break;
+ case InTableTextMode:
+ processDefaultForInTableTextMode(token);
+ processEndOfFile(token);
+ break;
+ case TextMode:
+ case InCaptionMode:
+ case InRowMode:
notImplemented();
+ break;
}
}
@@ -1407,7 +2662,7 @@ void HTMLTreeBuilder::processDefaultForInitialMode(AtomicHTMLToken& token)
void HTMLTreeBuilder::processDefaultForBeforeHTMLMode(AtomicHTMLToken&)
{
AtomicHTMLToken startHTML(HTMLToken::StartTag, htmlTag.localName());
- insertHTMLStartTagBeforeHTML(startHTML);
+ m_tree.insertHTMLHtmlStartTagBeforeHTML(startHTML);
setInsertionMode(BeforeHeadMode);
}
@@ -1436,37 +2691,57 @@ void HTMLTreeBuilder::processDefaultForAfterHeadMode(AtomicHTMLToken&)
m_framesetOk = true;
}
+void HTMLTreeBuilder::processDefaultForInTableTextMode(AtomicHTMLToken& token)
+{
+ String characters = String::adopt(m_pendingTableCharacters);
+ if (hasNonWhitespace(characters)) {
+ parseError(token);
+ HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement()));
+ m_tree.reconstructTheActiveFormattingElements();
+ m_tree.insertTextNode(characters);
+ m_framesetOk = false;
+ setInsertionMode(m_originalInsertionMode);
+ return;
+ }
+ m_tree.insertTextNode(characters);
+ setInsertionMode(m_originalInsertionMode);
+}
+
bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken& token)
{
+ ASSERT(token.type() == HTMLToken::StartTag);
if (token.name() == htmlTag) {
- insertHTMLStartTagInBody(token);
+ m_tree.insertHTMLHtmlStartTagInBody(token);
return true;
}
// FIXME: Atomize "command".
- if (token.name() == baseTag || token.name() == "command" || token.name() == linkTag || token.name() == metaTag) {
- insertSelfClosingElement(token);
+ if (token.name() == baseTag
+ || token.name() == "command"
+ || token.name() == linkTag
+ || token.name() == metaTag) {
+ m_tree.insertSelfClosingHTMLElement(token);
// Note: The custom processing for the <meta> tag is done in HTMLMetaElement::process().
return true;
}
if (token.name() == titleTag) {
- insertGenericRCDATAElement(token);
+ processGenericRCDATAStartTag(token);
return true;
}
if (token.name() == noscriptTag) {
if (isScriptingFlagEnabled(m_document->frame())) {
- insertGenericRawTextElement(token);
+ processGenericRawTextStartTag(token);
return true;
}
- insertElement(token);
+ m_tree.insertHTMLElement(token);
setInsertionMode(InHeadNoscriptMode);
return true;
}
if (token.name() == noframesTag || token.name() == styleTag) {
- insertGenericRawTextElement(token);
+ processGenericRawTextStartTag(token);
return true;
}
if (token.name() == scriptTag) {
- insertScriptElement(token);
+ processScriptStartTag(token);
return true;
}
if (token.name() == headTag) {
@@ -1476,176 +2751,31 @@ bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken& token)
return false;
}
-void HTMLTreeBuilder::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())));
- // FIXME: Move quirks mode detection from DocumentType element to here.
- notImplemented();
- if (token.forceQuirks())
- m_document->setParseMode(Document::Compat);
-}
-
-void HTMLTreeBuilder::insertComment(AtomicHTMLToken& token)
-{
- ASSERT(token.type() == HTMLToken::Comment);
- attach(currentElement(), Comment::create(m_document, token.comment()));
-}
-
-void HTMLTreeBuilder::insertCommentOnDocument(AtomicHTMLToken& token)
-{
- ASSERT(token.type() == HTMLToken::Comment);
- attach(m_document, Comment::create(m_document, token.comment()));
-}
-
-void HTMLTreeBuilder::insertCommentOnHTMLHtmlElement(AtomicHTMLToken& token)
-{
- ASSERT(token.type() == HTMLToken::Comment);
- attach(m_openElements.htmlElement(), Comment::create(m_document, token.comment()));
-}
-
-PassRefPtr<Element> HTMLTreeBuilder::createElementAndAttachToCurrent(AtomicHTMLToken& token)
+void HTMLTreeBuilder::processGenericRCDATAStartTag(AtomicHTMLToken& token)
{
ASSERT(token.type() == HTMLToken::StartTag);
- return attach(currentElement(), createElement(token));
-}
-
-void HTMLTreeBuilder::insertHTMLHtmlElement(AtomicHTMLToken& token)
-{
- m_openElements.pushHTMLHtmlElement(createElementAndAttachToCurrent(token));
-}
-
-void HTMLTreeBuilder::insertHTMLHeadElement(AtomicHTMLToken& token)
-{
- m_headElement = createElementAndAttachToCurrent(token);
- m_openElements.pushHTMLHeadElement(m_headElement);
-}
-
-void HTMLTreeBuilder::insertHTMLBodyElement(AtomicHTMLToken& token)
-{
- m_openElements.pushHTMLBodyElement(createElementAndAttachToCurrent(token));
-}
-
-void HTMLTreeBuilder::insertElement(AtomicHTMLToken& token)
-{
- m_openElements.push(createElementAndAttachToCurrent(token));
-}
-
-void HTMLTreeBuilder::insertSelfClosingElement(AtomicHTMLToken& token)
-{
- ASSERT(token.type() == HTMLToken::StartTag);
- attach(currentElement(), createElement(token));
- // FIXME: Do we want to acknowledge the token's self-closing flag?
- // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#acknowledge-self-closing-flag
-}
-
-void HTMLTreeBuilder::insertFormattingElement(AtomicHTMLToken& token)
-{
- // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#the-stack-of-open-elements
- // Possible active formatting elements include:
- // a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u.
- insertElement(token);
- m_activeFormattingElements.append(currentElement());
-}
-
-void HTMLTreeBuilder::insertGenericRCDATAElement(AtomicHTMLToken& token)
-{
- insertElement(token);
+ m_tree.insertHTMLElement(token);
m_tokenizer->setState(HTMLTokenizer::RCDATAState);
m_originalInsertionMode = m_insertionMode;
- m_insertionMode = TextMode;
+ setInsertionMode(TextMode);
}
-void HTMLTreeBuilder::insertGenericRawTextElement(AtomicHTMLToken& token)
+void HTMLTreeBuilder::processGenericRawTextStartTag(AtomicHTMLToken& token)
{
- insertElement(token);
+ ASSERT(token.type() == HTMLToken::StartTag);
+ m_tree.insertHTMLElement(token);
m_tokenizer->setState(HTMLTokenizer::RAWTEXTState);
m_originalInsertionMode = m_insertionMode;
- m_insertionMode = TextMode;
+ setInsertionMode(TextMode);
}
-void HTMLTreeBuilder::insertScriptElement(AtomicHTMLToken& token)
+void HTMLTreeBuilder::processScriptStartTag(AtomicHTMLToken& token)
{
- ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag);
- RefPtr<HTMLScriptElement> element = HTMLScriptElement::create(scriptTag, m_document, true);
- element->setAttributeMap(token.attributes(), m_fragmentScriptingPermission);
- m_openElements.push(attach(currentElement(), element.release()));
+ ASSERT(token.type() == HTMLToken::StartTag);
+ m_tree.insertScriptElement(token);
m_tokenizer->setState(HTMLTokenizer::ScriptDataState);
m_originalInsertionMode = m_insertionMode;
- m_insertionMode = TextMode;
-}
-
-void HTMLTreeBuilder::insertTextNode(AtomicHTMLToken& token)
-{
- attach(currentElement(), Text::create(m_document, token.characters()));
-}
-
-PassRefPtr<Element> HTMLTreeBuilder::createElement(AtomicHTMLToken& token)
-{
- RefPtr<Element> element = HTMLElementFactory::createHTMLElement(QualifiedName(nullAtom, token.name(), xhtmlNamespaceURI), m_document, 0);
- element->setAttributeMap(token.attributes(), m_fragmentScriptingPermission);
- return element.release();
-}
-
-bool HTMLTreeBuilder::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const
-{
- if (m_activeFormattingElements.isEmpty())
- return false;
- unsigned index = m_activeFormattingElements.size();
- do {
- --index;
- const HTMLFormattingElementList::Entry& entry = m_activeFormattingElements[index];
- if (entry.isMarker() || m_openElements.contains(entry.element())) {
- firstUnopenElementIndex = index;
- return true;
- }
- } while (index);
- return false;
-}
-
-void HTMLTreeBuilder::reconstructTheActiveFormattingElements()
-{
- unsigned firstUnopenElementIndex;
- if (!indexOfFirstUnopenFormattingElement(firstUnopenElementIndex))
- return;
-
- unsigned unopenEntryIndex = firstUnopenElementIndex;
- ASSERT(unopenEntryIndex < m_activeFormattingElements.size());
- for (; unopenEntryIndex < m_activeFormattingElements.size(); ++unopenEntryIndex) {
- HTMLFormattingElementList::Entry& unopenedEntry = m_activeFormattingElements[unopenEntryIndex];
- // FIXME: We're supposed to save the original token in the entry.
- AtomicHTMLToken fakeToken(HTMLToken::StartTag, unopenedEntry.element()->localName());
- insertElement(fakeToken);
- unopenedEntry.replaceElement(currentElement());
- }
-}
-
-namespace {
-
-bool hasImpliedEndTag(Element* element)
-{
- return element->hasTagName(ddTag)
- || element->hasTagName(dtTag)
- || element->hasTagName(liTag)
- || element->hasTagName(optionTag)
- || element->hasTagName(optgroupTag)
- || element->hasTagName(pTag)
- || element->hasTagName(rpTag)
- || element->hasTagName(rtTag);
-}
-
-}
-
-void HTMLTreeBuilder::generateImpliedEndTagsWithExclusion(const AtomicString& tagName)
-{
- while (hasImpliedEndTag(currentElement()) && !currentElement()->hasLocalName(tagName))
- m_openElements.pop();
-}
-
-void HTMLTreeBuilder::generateImpliedEndTags()
-{
- while (hasImpliedEndTag(currentElement()))
- m_openElements.pop();
+ setInsertionMode(TextMode);
}
void HTMLTreeBuilder::finished()
@@ -1657,9 +2787,6 @@ void HTMLTreeBuilder::finished()
return;
}
- AtomicHTMLToken eofToken(HTMLToken::EndOfFile, nullAtom);
- processToken(eofToken);
-
// Warning, this may delete the parser, so don't try to do anything else after this.
if (!m_isParsingFragment)
m_document->finishedParsing();
diff --git a/WebCore/html/HTMLTreeBuilder.h b/WebCore/html/HTMLTreeBuilder.h
index 37e4279..74e3398 100644
--- a/WebCore/html/HTMLTreeBuilder.h
+++ b/WebCore/html/HTMLTreeBuilder.h
@@ -28,6 +28,7 @@
#include "Element.h"
#include "FragmentScriptingPermission.h"
+#include "HTMLConstructionSite.h"
#include "HTMLElementStack.h"
#include "HTMLFormattingElementList.h"
#include "HTMLTokenizer.h"
@@ -74,6 +75,7 @@ public:
LegacyHTMLTreeBuilder* legacyTreeBuilder() const { return m_legacyTreeBuilder.get(); }
private:
+ class FakeInsertionMode;
// Represents HTML5 "insertion mode"
// http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#insertion-mode
enum InsertionMode {
@@ -104,8 +106,8 @@ private:
void passTokenToLegacyParser(HTMLToken&);
- // Specialized functions for processing the different types of tokens.
void processToken(AtomicHTMLToken&);
+
void processDoctypeToken(AtomicHTMLToken&);
void processStartTag(AtomicHTMLToken&);
void processEndTag(AtomicHTMLToken&);
@@ -113,72 +115,57 @@ private:
void processCharacter(AtomicHTMLToken&);
void processEndOfFile(AtomicHTMLToken&);
+ bool processStartTagForInHead(AtomicHTMLToken&);
+ void processStartTagForInBody(AtomicHTMLToken&);
+ void processStartTagForInTable(AtomicHTMLToken&);
+ void processEndTagForInBody(AtomicHTMLToken&);
+ void processEndTagForInTable(AtomicHTMLToken&);
+ void processEndTagForInTableBody(AtomicHTMLToken&);
+ void processEndTagForInRow(AtomicHTMLToken&);
+ void processEndTagForInCell(AtomicHTMLToken&);
+
+ void processIsindexStartTagForInBody(AtomicHTMLToken&);
+ bool processBodyEndTagForInBody(AtomicHTMLToken&);
+ bool processTableEndTagForInTable();
+ bool processCaptionEndTagForInCaption();
+ bool processColgroupEndTagForInColumnGroup();
+ bool processTrEndTagForInRow();
+ // FIXME: This function should be inlined into its one call site or it
+ // needs to assert which tokens it can be called with.
+ void processAnyOtherEndTagForInBody(AtomicHTMLToken&);
+
+ void processFakeStartTag(const QualifiedName&, PassRefPtr<NamedNodeMap> attributes = 0);
+ void processFakeEndTag(const QualifiedName&);
+ void processFakeCharacters(const String&);
+ void processFakePEndTagIfPInScope();
+
+ void processGenericRCDATAStartTag(AtomicHTMLToken&);
+ void processGenericRawTextStartTag(AtomicHTMLToken&);
+ void processScriptStartTag(AtomicHTMLToken&);
+
// Default processing for the different insertion modes.
+ // FIXME: These functions need to be renamed to remove "process" from their names.
void processDefaultForInitialMode(AtomicHTMLToken&);
void processDefaultForBeforeHTMLMode(AtomicHTMLToken&);
void processDefaultForBeforeHeadMode(AtomicHTMLToken&);
void processDefaultForInHeadMode(AtomicHTMLToken&);
void processDefaultForInHeadNoscriptMode(AtomicHTMLToken&);
void processDefaultForAfterHeadMode(AtomicHTMLToken&);
+ void processDefaultForInTableTextMode(AtomicHTMLToken&);
- bool processStartTagForInHead(AtomicHTMLToken&);
- bool processBodyEndTagForInBody(AtomicHTMLToken&);
- void processFakePEndTagIfPInScope();
+ void processUsingSecondaryInsertionModeAndAdjustInsertionMode(AtomicHTMLToken&);
+
+ PassRefPtr<NamedNodeMap> attributesForIsindexInput(AtomicHTMLToken&);
HTMLElementStack::ElementRecord* furthestBlockForFormattingElement(Element*);
- void findFosterParentFor(Element*);
void reparentChildren(Element* oldParent, Element* newParent);
void callTheAdoptionAgency(AtomicHTMLToken&);
- template<typename ChildType>
- PassRefPtr<ChildType> attach(Node* parent, PassRefPtr<ChildType> prpChild)
- {
- RefPtr<ChildType> child = prpChild;
- parent->parserAddChild(child);
- // It's slightly unfortunate that we need to hold a reference to child
- // here to call attach(). We should investigate whether we can rely on
- // |parent| to hold a ref at this point. In the common case (at least
- // for elements), however, we'll get to use this ref in the stack of
- // open elements.
- child->attach();
- return child.release();
- }
+ void closeTheCell();
+
+ template <bool shouldClose(const Element*)>
+ void processCloseWhenNestedTag(AtomicHTMLToken&);
- void insertDoctype(AtomicHTMLToken&);
- void insertComment(AtomicHTMLToken&);
- void insertCommentOnDocument(AtomicHTMLToken&);
- void insertCommentOnHTMLHtmlElement(AtomicHTMLToken&);
- void insertHTMLHtmlElement(AtomicHTMLToken&);
- void insertHTMLHeadElement(AtomicHTMLToken&);
- void insertHTMLBodyElement(AtomicHTMLToken&);
- void insertElement(AtomicHTMLToken&);
- void insertSelfClosingElement(AtomicHTMLToken&);
- void insertFormattingElement(AtomicHTMLToken&);
- void insertGenericRCDATAElement(AtomicHTMLToken&);
- void insertGenericRawTextElement(AtomicHTMLToken&);
- void insertScriptElement(AtomicHTMLToken&);
- void insertTextNode(AtomicHTMLToken&);
-
- void insertHTMLStartTagBeforeHTML(AtomicHTMLToken&);
- void insertHTMLStartTagInBody(AtomicHTMLToken&);
-
- PassRefPtr<Element> createElement(AtomicHTMLToken&);
- PassRefPtr<Element> createElementAndAttachToCurrent(AtomicHTMLToken&);
-
- void mergeAttributesFromTokenIntoElement(AtomicHTMLToken&, Element*);
-
- bool indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const;
- void reconstructTheActiveFormattingElements();
-
- void generateImpliedEndTags();
- void generateImpliedEndTagsWithExclusion(const AtomicString& tagName);
-
- Element* currentElement() { return m_openElements.top(); }
-
- RefPtr<Element> m_headElement;
- RefPtr<Element> m_formElement;
- HTMLElementStack m_openElements;
- HTMLFormattingElementList m_activeFormattingElements;
bool m_framesetOk;
// FIXME: Implement error reporting.
@@ -187,17 +174,43 @@ private:
void handleScriptStartTag();
void handleScriptEndTag(Element*, int scriptStartLine);
- void setInsertionMode(InsertionMode value) { m_insertionMode = value; }
InsertionMode insertionMode() const { return m_insertionMode; }
+ void setInsertionMode(InsertionMode mode)
+ {
+ m_insertionMode = mode;
+ m_isFakeInsertionMode = false;
+ }
+
+ bool isFakeInsertionMode() { return m_isFakeInsertionMode; }
+ void setFakeInsertionMode(InsertionMode mode)
+ {
+ m_insertionMode = mode;
+ m_isFakeInsertionMode = true;
+ }
+
+ void setSecondaryInsertionMode(InsertionMode);
+
+ void setInsertionModeAndEnd(InsertionMode, bool foreign); // Helper for resetInsertionModeAppropriately
+ void resetInsertionModeAppropriately();
static bool isScriptingFlagEnabled(Frame* frame);
- Document* m_document; // This is only used by the m_legacyParser for now.
+ Document* m_document;
+ HTMLConstructionSite m_tree;
+
bool m_reportErrors;
bool m_isPaused;
+ bool m_isFakeInsertionMode;
+ // FIXME: InsertionModes should be a separate object to prevent direct
+ // manipulation of these variables. For now, be careful to always use
+ // setInsertionMode and never set m_insertionMode directly.
InsertionMode m_insertionMode;
InsertionMode m_originalInsertionMode;
+ InsertionMode m_secondaryInsertionMode;
+
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#pending-table-character-tokens
+ Vector<UChar> m_pendingTableCharacters;
// HTML5 spec requires that we be able to change the state of the tokenizer
// from within parser actions.
diff --git a/WebCore/html/HTMLVideoElement.cpp b/WebCore/html/HTMLVideoElement.cpp
index cf7d64c..a6fdb5f 100644
--- a/WebCore/html/HTMLVideoElement.cpp
+++ b/WebCore/html/HTMLVideoElement.cpp
@@ -101,7 +101,7 @@ void HTMLVideoElement::parseMappedAttribute(Attribute* attr)
const QualifiedName& attrName = attr->name();
if (attrName == posterAttr) {
- m_posterURL = document()->completeURL(attr->value());
+ m_posterURL = getNonEmptyURLAttribute(posterAttr);
updatePosterImage();
if (m_shouldDisplayPosterImage) {
#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
diff --git a/WebCore/html/HTMLVideoElement.idl b/WebCore/html/HTMLVideoElement.idl
index 1f56db9..248d0f4 100644
--- a/WebCore/html/HTMLVideoElement.idl
+++ b/WebCore/html/HTMLVideoElement.idl
@@ -32,7 +32,7 @@ module html {
attribute [Reflect] unsigned long height;
readonly attribute unsigned long videoWidth;
readonly attribute unsigned long videoHeight;
- attribute [ReflectURL] DOMString poster;
+ attribute [Reflect,NonEmpty,URL] DOMString poster;
readonly attribute boolean webkitSupportsFullscreen;
readonly attribute boolean webkitDisplayingFullscreen;
diff --git a/WebCore/html/TimeRanges.idl b/WebCore/html/TimeRanges.idl
index 992b12a..c37c360 100644
--- a/WebCore/html/TimeRanges.idl
+++ b/WebCore/html/TimeRanges.idl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 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
@@ -25,12 +25,14 @@
module html {
-interface [Conditional=VIDEO, OmitConstructor] TimeRanges {
- readonly attribute unsigned long length;
- float start(in unsigned long index)
- raises (DOMException);
- float end(in unsigned long index)
- raises (DOMException);
-};
+ interface [
+ Conditional=VIDEO
+ ] TimeRanges {
+ readonly attribute unsigned long length;
+ float start(in unsigned long index)
+ raises (DOMException);
+ float end(in unsigned long index)
+ raises (DOMException);
+ };
}
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
index 2ac2ca3..b3d212a 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.cpp
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
@@ -614,6 +614,10 @@ void CanvasRenderingContext2D::arc(float x, float y, float r, float sa, float ea
ec = INDEX_SIZE_ERR;
return;
}
+
+ if (sa == ea)
+ return;
+
if (!state().m_invertibleCTM)
return;
m_path.addArc(FloatPoint(x, y), r, sa, ea, anticlockwise);
@@ -763,9 +767,7 @@ void CanvasRenderingContext2D::fillRect(float x, float y, float width, float hei
FloatRect rect(x, y, width, height);
willDraw(rect);
- c->save();
c->fillRect(rect);
- c->restore();
}
void CanvasRenderingContext2D::strokeRect(float x, float y, float width, float height)
diff --git a/WebCore/html/canvas/WebGLBuffer.cpp b/WebCore/html/canvas/WebGLBuffer.cpp
index 4c87958..e71a12b 100644
--- a/WebCore/html/canvas/WebGLBuffer.cpp
+++ b/WebCore/html/canvas/WebGLBuffer.cpp
@@ -54,14 +54,24 @@ void WebGLBuffer::_deleteObject(Platform3DObject object)
bool WebGLBuffer::associateBufferData(int size)
{
- switch (m_target) {
- case GraphicsContext3D::ELEMENT_ARRAY_BUFFER:
- case GraphicsContext3D::ARRAY_BUFFER:
+ if (!m_target)
+ return false;
+
+ if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
+ m_byteLength = size;
+ clearCachedMaxIndices();
+ m_elementArrayBuffer = ArrayBuffer::create(size, 1);
+ if (!m_elementArrayBuffer) {
+ m_byteLength = 0;
+ return false;
+ }
+ return true;
+ } else if (m_target == GraphicsContext3D::ARRAY_BUFFER) {
m_byteLength = size;
return true;
- default:
- return false;
}
+
+ return false;
}
bool WebGLBuffer::associateBufferData(ArrayBufferView* array)
@@ -78,6 +88,10 @@ bool WebGLBuffer::associateBufferData(ArrayBufferView* array)
// modifications without calling bufferData or bufferSubData
// must never be able to change the validation results.
m_elementArrayBuffer = ArrayBuffer::create(array->buffer().get());
+ if (!m_elementArrayBuffer) {
+ m_byteLength = 0;
+ return false;
+ }
return true;
}
@@ -107,6 +121,9 @@ bool WebGLBuffer::associateBufferSubData(long offset, ArrayBufferView* array)
if (uoffset > m_byteLength || array->byteLength() > m_byteLength - uoffset)
return false;
+ if (!m_elementArrayBuffer)
+ return false;
+
memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()) + offset, array->baseAddress(), array->byteLength());
return true;
}
diff --git a/WebCore/html/canvas/WebGLRenderingContext.cpp b/WebCore/html/canvas/WebGLRenderingContext.cpp
index c3dea58..a82a4ac4 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -349,6 +349,10 @@ void WebGLRenderingContext::blendFuncSeparate(unsigned long srcRGB, unsigned lon
void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
+ if (!isGLES2Compliant()) {
+ if (!validateBufferDataUsage(usage))
+ return;
+ }
if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER && m_boundElementArrayBuffer) {
if (!m_boundElementArrayBuffer->associateBufferData(size)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -371,6 +375,10 @@ void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned
void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode& ec)
{
UNUSED_PARAM(ec);
+ if (!isGLES2Compliant()) {
+ if (!validateBufferDataUsage(usage))
+ return;
+ }
if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER && m_boundElementArrayBuffer) {
if (!m_boundElementArrayBuffer->associateBufferData(data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -428,6 +436,12 @@ unsigned long WebGLRenderingContext::checkFramebufferStatus(unsigned long target
void WebGLRenderingContext::clear(unsigned long mask)
{
+ if (!isGLES2Compliant()) {
+ if (mask & ~(GraphicsContext3D::COLOR_BUFFER_BIT | GraphicsContext3D::DEPTH_BUFFER_BIT | GraphicsContext3D::STENCIL_BUFFER_BIT)) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
+ }
m_context->clear(mask);
cleanupAfterGraphicsCall(true);
}
@@ -1557,6 +1571,10 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG
UNUSED_PARAM(ec);
if (!validateWebGLObject(program))
return WebGLGetInfo();
+ if (!uniformLocation) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return WebGLGetInfo();
+ }
if (uniformLocation->program() != program) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
return WebGLGetInfo();
@@ -3574,6 +3592,18 @@ bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLo
return true;
}
+bool WebGLRenderingContext::validateBufferDataUsage(unsigned long usage)
+{
+ switch (usage) {
+ case GraphicsContext3D::STREAM_DRAW:
+ case GraphicsContext3D::STATIC_DRAW:
+ case GraphicsContext3D::DYNAMIC_DRAW:
+ return true;
+ }
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
+ return false;
+}
+
void WebGLRenderingContext::vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3)
{
if (index >= m_maxVertexAttribs) {
diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h
index be74001..d03d972 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/WebCore/html/canvas/WebGLRenderingContext.h
@@ -501,6 +501,9 @@ class WebKitCSSMatrix;
bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, Float32Array* v, int mod);
bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, void* v, int size, int mod);
+ // Helper function to validate usage for bufferData.
+ bool validateBufferDataUsage(unsigned long);
+
// Helper functions for vertexAttribNf{v}.
void vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3);
void vertexAttribfvImpl(unsigned long index, Float32Array* v, int expectedSize);
diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm
new file mode 100644
index 0000000..cadfaac
--- /dev/null
+++ b/WebCore/inspector/CodeGeneratorInspector.pm
@@ -0,0 +1,298 @@
+# Copyright (c) 2010 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+package CodeGeneratorInspector;
+
+use strict;
+
+use File::stat;
+
+my %typeTransform;
+$typeTransform{"InspectorClient"} = {
+ "forward" => "InspectorClient",
+ "header" => "InspectorClient.h",
+};
+$typeTransform{"PassRefPtr"} = {
+ "forwardHeader" => "wtf/PassRefPtr.h",
+};
+$typeTransform{"Object"} = {
+ "param" => "PassRefPtr<InspectorObject>",
+ "retVal" => "PassRefPtr<InspectorObject>",
+ "forward" => "InspectorObject",
+ "header" => "InspectorValues.h",
+ "push" => "push"
+};
+$typeTransform{"Array"} = {
+ "param" => "PassRefPtr<InspectorArray>",
+ "retVal" => "PassRefPtr<InspectorArray>",
+ "forward" => "InspectorArray",
+ "header" => "InspectorValues.h",
+ "push" => "push"
+};
+$typeTransform{"Value"} = {
+ "param" => "PassRefPtr<InspectorValue>",
+ "retVal" => "PassRefPtr<InspectorValue>",
+ "forward" => "InspectorValue",
+ "header" => "InspectorValues.h",
+ "push" => "push"
+};
+$typeTransform{"String"} = {
+ "param" => "const String&",
+ "retVal" => "String",
+ "forward" => "String",
+ "header" => "PlatformString.h",
+ "push" => "pushString"
+};
+$typeTransform{"long"} = {
+ "param" => "long",
+ "retVal" => "long",
+ "forward" => "",
+ "header" => "",
+ "push" => "pushNumber"
+};
+$typeTransform{"int"} = {
+ "param" => "int",
+ "retVal" => "int",
+ "forward" => "",
+ "header" => "",
+ "push" => "pushNumber"
+};
+$typeTransform{"unsigned long"} = {
+ "param" => "unsigned long",
+ "retVal" => "unsigned long",
+ "forward" => "",
+ "header" => "",
+ "push" => "pushNumber"
+};
+$typeTransform{"boolean"} = {
+ "param" => "bool",
+ "retVal"=> "bool",
+ "forward" => "",
+ "header" => "",
+ "push" => "pushBool"
+};
+$typeTransform{"void"} = {
+ "retVal" => "void",
+ "forward" => "",
+ "header" => ""
+};
+
+# Default License Templates
+
+my $licenseTemplate = << "EOF";
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+EOF
+
+my $codeGenerator;
+my $outputDir;
+my $writeDependencies;
+my $verbose;
+
+my $namespace;
+my $fileName;
+my %discoveredTypes;
+
+my @classDefinition;
+my @functionDefinitions;
+
+sub typeSpec
+{
+ my $param = shift;
+ my $retValue = shift;
+
+ my $type = $typeTransform{$param->type}->{$retValue ? "retVal" : "param"};
+ $discoveredTypes{$param->type} = 1;
+ $type or die "invalid type specification \"" . $param->type ."\"";
+ return $type;
+}
+
+# Default constructor
+sub new
+{
+ my $object = shift;
+ my $reference = { };
+
+ $codeGenerator = shift;
+ $outputDir = shift;
+ shift; # $useLayerOnTop
+ shift; # $preprocessor
+ $writeDependencies = shift;
+ $verbose = shift;
+
+ bless($reference, $object);
+ return $reference;
+}
+
+# Params: 'idlDocument' struct
+sub GenerateModule
+{
+ my $object = shift;
+ my $dataNode = shift;
+
+ $namespace = $dataNode->module;
+}
+
+# Params: 'idlDocument' struct
+sub GenerateInterface
+{
+ my $object = shift;
+ my $interface = shift;
+ my $defines = shift;
+
+ my $className = $interface->name;
+ $fileName = $className;
+
+ $discoveredTypes{"String"} = 1;
+ $discoveredTypes{"InspectorClient"} = 1;
+ $discoveredTypes{"PassRefPtr"} = 1;
+
+ push(@classDefinition, "class $className {");
+ push(@classDefinition, "public:");
+ push(@classDefinition, " $className(InspectorClient* inspectorClient) : m_inspectorClient(inspectorClient) { }");
+ push(@classDefinition, "");
+ push(@classDefinition, generateFunctionsDeclarations($interface, $className));
+ push(@classDefinition, "");
+ push(@classDefinition, "private:");
+ push(@classDefinition, " void sendSimpleMessageToFrontend(const String&);");
+ push(@classDefinition, " InspectorClient* m_inspectorClient;");
+ push(@classDefinition, "};");
+
+ push(@functionDefinitions, "void ${className}::sendSimpleMessageToFrontend(const String& functionName)");
+ push(@functionDefinitions, "{");
+ push(@functionDefinitions, " RefPtr<InspectorArray> arguments = InspectorArray::create();");
+ push(@functionDefinitions, " arguments->pushString(functionName);");
+ push(@functionDefinitions, " m_inspectorClient->sendMessageToFrontend(arguments->toJSONString());");
+ push(@functionDefinitions, "}");
+}
+
+sub generateFunctionsDeclarations
+{
+ my $interface = shift;
+ my $className = shift;
+
+ my @functionDeclarations;
+ foreach my $function (@{$interface->functions}) {
+ my $functionName = $function->signature->name;
+ my $abstract = $function->signature->extendedAttributes->{"abstract"};
+ my $arguments = "";
+ foreach my $parameter (@{$function->parameters}) {
+ $parameter->name or die "empty argument name specified for function ${className}::$functionName and argument type " . $parameter->type;
+ $arguments = $arguments . ", " if ($arguments);
+ $arguments = $arguments . typeSpec($parameter) . " " . $parameter->name;
+ }
+ my $signature = " " . typeSpec($function->signature, 1) . " $functionName($arguments)";
+ push(@functionDeclarations, $abstract ? "$signature = 0;" : "$signature;");
+ push(@functionDefinitions, generateFunctionsImpl($className, $function, $arguments)) if !$abstract;
+ }
+ return @functionDeclarations;
+}
+
+sub generateHeader
+{
+ my @headerContent = split("\r", $licenseTemplate);
+ push(@headerContent, "#ifndef ${fileName}_h");
+ push(@headerContent, "#define ${fileName}_h");
+ push(@headerContent, "");
+
+ my @forwardHeaders;
+ foreach my $type (keys %discoveredTypes) {
+ push(@forwardHeaders, "#include <" . $typeTransform{$type}->{"forwardHeader"} . ">") if !$typeTransform{$type}->{"forwardHeader"} eq "";
+ }
+ push(@headerContent, sort @forwardHeaders);
+ push(@headerContent, "");
+ push(@headerContent, "namespace $namespace {");
+ push(@headerContent, "");
+
+ my @forwardDeclarations;
+ foreach my $type (keys %discoveredTypes) {
+ push(@forwardDeclarations, "class " . $typeTransform{$type}->{"forward"} . ";") if !$typeTransform{$type}->{"forward"} eq "";
+ }
+ push(@headerContent, sort @forwardDeclarations);
+
+ push(@headerContent, "");
+ push(@headerContent, @classDefinition);
+ push(@headerContent, "");
+ push(@headerContent, "} // namespace $namespace");
+ push(@headerContent, "");
+ push(@headerContent, "#endif // !defined(${fileName}_h)");
+ push(@headerContent, "");
+ return @headerContent;
+}
+
+sub generateSource
+{
+ my @sourceContent = split("\r", $licenseTemplate);
+ push(@sourceContent, "\n#include \"config.h\"");
+ push(@sourceContent, "#include \"Remote$fileName.h\"");
+ push(@sourceContent, "");
+ push(@sourceContent, "#if ENABLE(INSPECTOR)");
+ push(@sourceContent, "");
+
+ my %headers;
+ foreach my $type (keys %discoveredTypes) {
+ $headers{"#include \"" . $typeTransform{$type}->{"header"} . "\""} = 1 if !$typeTransform{$type}->{"header"} eq "";
+ }
+ push(@sourceContent, sort keys %headers);
+ push(@sourceContent, "");
+ push(@sourceContent, "namespace $namespace {");
+ push(@sourceContent, "");
+ push(@sourceContent, @functionDefinitions);
+ push(@sourceContent, "");
+ push(@sourceContent, "} // namespace $namespace");
+ push(@sourceContent, "");
+ push(@sourceContent, "#endif // ENABLE(INSPECTOR)");
+ push(@sourceContent, "");
+ return @sourceContent;
+}
+
+sub generateFunctionsImpl
+{
+ my $className = shift;
+ my $function = shift;
+ my $arguments = shift;
+
+ my @func;
+
+ my $functionName = $function->signature->name;
+
+ push(@func, typeSpec($function->signature, 1) . " " . $className . "::" . $functionName . "(" . $arguments . ")");
+ push(@func, "{");
+
+ my $numParameters = @{$function->parameters};
+ if ($numParameters > 0) {
+ push(@func, " RefPtr<InspectorArray> arguments = InspectorArray::create();");
+ push(@func, " arguments->pushString(\"$functionName\");");
+ foreach my $parameter (@{$function->parameters}) {
+ my $pushCall = $typeTransform{$parameter->type}->{"push"};
+ push(@func, " arguments->$pushCall(" . $parameter->name . ");");
+ }
+ push(@func, " m_inspectorClient->sendMessageToFrontend(arguments->toJSONString());");
+ } else {
+ push(@func, " sendSimpleMessageToFrontend(\"$functionName\");");
+ }
+
+ push(@func, "}");
+ push(@func, "");
+ return @func;
+}
+
+sub finish
+{
+ my $object = shift;
+
+ open(my $SOURCE, ">$outputDir/Remote$fileName.cpp") || die "Couldn't open file $outputDir/Remote$fileName.cpp";
+ open(my $HEADER, ">$outputDir/Remote$fileName.h") || die "Couldn't open file $outputDir/Remote$fileName.h";
+
+ print $SOURCE join("\n", generateSource());
+ close($SOURCE);
+ undef($SOURCE);
+
+ print $HEADER join("\n", generateHeader());
+ close($HEADER);
+ undef($HEADER);
+}
+
+1;
diff --git a/WebCore/inspector/InspectorApplicationCacheAgent.cpp b/WebCore/inspector/InspectorApplicationCacheAgent.cpp
new file mode 100644
index 0000000..88238be
--- /dev/null
+++ b/WebCore/inspector/InspectorApplicationCacheAgent.cpp
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2010 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:
+ * 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 "InspectorApplicationCacheAgent.h"
+
+#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
+
+#include "ApplicationCache.h"
+#include "ApplicationCacheResource.h"
+#include "DocumentLoader.h"
+#include "Frame.h"
+#include "FrameLoader.h"
+#include "InspectorController.h"
+#include "InspectorFrontend.h"
+#include "Page.h"
+#include "ResourceResponse.h"
+#include "ScriptArray.h"
+#include "ScriptObject.h"
+
+namespace WebCore {
+
+InspectorApplicationCacheAgent::InspectorApplicationCacheAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
+ : m_inspectorController(inspectorController)
+ , m_frontend(frontend)
+{
+}
+
+void InspectorApplicationCacheAgent::didReceiveManifestResponse(unsigned long identifier, const ResourceResponse& response)
+{
+ m_inspectorController->didReceiveResponse(identifier, response);
+}
+
+void InspectorApplicationCacheAgent::updateApplicationCacheStatus(ApplicationCacheHost::Status status)
+{
+ m_frontend->updateApplicationCacheStatus(status);
+}
+
+void InspectorApplicationCacheAgent::updateNetworkState(bool isNowOnline)
+{
+ m_frontend->updateNetworkState(isNowOnline);
+}
+
+void InspectorApplicationCacheAgent::fillResourceList(ApplicationCache* cache, ResourceInfoList* resources)
+{
+#if !PLATFORM(CHROMIUM)
+ ASSERT(cache && cache->isComplete());
+#endif
+ ApplicationCache::ResourceMap::const_iterator end = cache->end();
+ for (ApplicationCache::ResourceMap::const_iterator it = cache->begin(); it != end; ++it) {
+ RefPtr<ApplicationCacheResource> resource = it->second;
+ unsigned type = resource->type();
+ bool isMaster = type & ApplicationCacheResource::Master;
+ bool isManifest = type & ApplicationCacheResource::Manifest;
+ bool isExplicit = type & ApplicationCacheResource::Explicit;
+ bool isForeign = type & ApplicationCacheResource::Foreign;
+ bool isFallback = type & ApplicationCacheResource::Fallback;
+#if PLATFORM(CHROMIUM)
+ int64_t estimatedSizeInStorage = 0;
+#else
+ int64_t estimatedSizeInStorage = resource->estimatedSizeInStorage();
+#endif
+ resources->append(InspectorApplicationCacheAgent::ResourceInfo(resource->url(), isMaster, isManifest, isFallback, isForeign, isExplicit, estimatedSizeInStorage));
+ }
+}
+
+void InspectorApplicationCacheAgent::getApplicationCaches(long callId)
+{
+ DocumentLoader* documentLoader = m_inspectorController->inspectedPage()->mainFrame()->loader()->documentLoader();
+ if (!documentLoader) {
+ m_frontend->didGetApplicationCaches(callId, ScriptValue::undefined());
+ return;
+ }
+
+ ApplicationCacheHost* host = documentLoader->applicationCacheHost();
+ ApplicationCache* cache = host->applicationCacheForInspector();
+ if (!cache
+#if !PLATFORM(CHROMIUM)
+ || !cache->isComplete()
+#endif
+ ) {
+ m_frontend->didGetApplicationCaches(callId, ScriptValue::undefined());
+ return;
+ }
+
+ // FIXME: Add "Creation Time" and "Update Time" to Application Caches.
+ ApplicationCacheInfo info(cache->manifestResource()->url(), String(), String(), cache->estimatedSizeInStorage());
+ ResourceInfoList resources;
+ fillResourceList(cache, &resources);
+
+ m_frontend->didGetApplicationCaches(callId, buildObjectForApplicationCache(resources, info));
+}
+
+ScriptObject InspectorApplicationCacheAgent::buildObjectForApplicationCache(const ResourceInfoList& applicationCacheResources, const ApplicationCacheInfo& applicationCacheInfo)
+{
+ ScriptObject value = m_frontend->newScriptObject();
+ value.set("size", applicationCacheInfo.m_size);
+ value.set("manifest", applicationCacheInfo.m_manifest.string());
+ value.set("lastPathComponent", applicationCacheInfo.m_manifest.lastPathComponent());
+ value.set("creationTime", applicationCacheInfo.m_creationTime);
+ value.set("updateTime", applicationCacheInfo.m_updateTime);
+ value.set("resources", buildArrayForApplicationCacheResources(applicationCacheResources));
+ return value;
+}
+
+ScriptArray InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources(const ResourceInfoList& applicationCacheResources)
+{
+ ScriptArray resources = m_frontend->newScriptArray();
+
+ ResourceInfoList::const_iterator end = applicationCacheResources.end();
+ ResourceInfoList::const_iterator it = applicationCacheResources.begin();
+ for (int i = 0; it != end; ++it, i++)
+ resources.set(i, buildObjectForApplicationCacheResource(*it));
+
+ return resources;
+}
+
+ScriptObject InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource(const ResourceInfo& resourceInfo)
+{
+ ScriptObject value = m_frontend->newScriptObject();
+ value.set("name", resourceInfo.m_resource.string());
+ value.set("size", resourceInfo.m_size);
+
+ String types;
+ if (resourceInfo.m_isMaster)
+ types.append("Master ");
+
+ if (resourceInfo.m_isManifest)
+ types.append("Manifest ");
+
+ if (resourceInfo.m_isFallback)
+ types.append("Fallback ");
+
+ if (resourceInfo.m_isForeign)
+ types.append("Foreign ");
+
+ if (resourceInfo.m_isExplicit)
+ types.append("Explicit ");
+
+ value.set("type", types);
+ return value;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
diff --git a/WebCore/inspector/InspectorApplicationCacheAgent.h b/WebCore/inspector/InspectorApplicationCacheAgent.h
new file mode 100644
index 0000000..79763f4
--- /dev/null
+++ b/WebCore/inspector/InspectorApplicationCacheAgent.h
@@ -0,0 +1,109 @@
+/*
+ * 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 InspectorApplicationCacheAgent_h
+#define InspectorApplicationCacheAgent_h
+
+#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
+
+#include "ApplicationCacheHost.h"
+#include "KURL.h"
+#include "PlatformString.h"
+#include <wtf/Noncopyable.h>
+
+namespace WebCore {
+
+class ApplicationCache;
+class InspectorController;
+class InspectorFrontend;
+class ResourceResponse;
+class ScriptArray;
+class ScriptObject;
+
+class InspectorApplicationCacheAgent : public Noncopyable {
+public:
+ struct ApplicationCacheInfo {
+ ApplicationCacheInfo(const KURL& manifest, const String& creationTime, const String& updateTime, long long size)
+ : m_manifest(manifest)
+ , m_creationTime(creationTime)
+ , m_updateTime(updateTime)
+ , m_size(size)
+ {
+ }
+
+ KURL m_manifest;
+ String m_creationTime;
+ String m_updateTime;
+ long long m_size;
+ };
+
+ struct ResourceInfo {
+ ResourceInfo(const KURL& resource, bool isMaster, bool isManifest, bool isFallback, bool isForeign, bool isExplicit, long long size)
+ : m_resource(resource)
+ , m_isMaster(isMaster)
+ , m_isManifest(isManifest)
+ , m_isFallback(isFallback)
+ , m_isForeign(isForeign)
+ , m_isExplicit(isExplicit)
+ , m_size(size)
+ {
+ }
+
+ KURL m_resource;
+ bool m_isMaster;
+ bool m_isManifest;
+ bool m_isFallback;
+ bool m_isForeign;
+ bool m_isExplicit;
+ long long m_size;
+ };
+
+ typedef Vector<ResourceInfo> ResourceInfoList;
+
+ InspectorApplicationCacheAgent(InspectorController* inspectorController, InspectorFrontend* frontend);
+ ~InspectorApplicationCacheAgent() { }
+
+ // Backend to Frontend
+ void didReceiveManifestResponse(unsigned long identifier, const ResourceResponse&);
+ void updateApplicationCacheStatus(ApplicationCacheHost::Status);
+ void updateNetworkState(bool isNowOnline);
+
+ // From Frontend
+ void getApplicationCaches(long callId);
+
+private:
+ ScriptObject buildObjectForApplicationCache(const ResourceInfoList&, const ApplicationCacheInfo&);
+ ScriptArray buildArrayForApplicationCacheResources(const ResourceInfoList&);
+ ScriptObject buildObjectForApplicationCacheResource(const ResourceInfo&);
+
+ void fillResourceList(ApplicationCache*, ResourceInfoList*);
+
+ InspectorController* m_inspectorController;
+ InspectorFrontend* m_frontend;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
+#endif // InspectorApplicationCacheAgent_h
diff --git a/WebCore/inspector/InspectorBackend.cpp b/WebCore/inspector/InspectorBackend.cpp
index e8866c2..57ee19f 100644
--- a/WebCore/inspector/InspectorBackend.cpp
+++ b/WebCore/inspector/InspectorBackend.cpp
@@ -61,6 +61,10 @@
#include "ScriptDebugServer.h"
#endif
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+#include "InspectorApplicationCacheAgent.h"
+#endif
+
#include "markup.h"
#include <wtf/RefPtr.h>
@@ -514,6 +518,14 @@ void InspectorBackend::hideDOMNodeHighlight()
m_inspectorController->hideHighlight();
}
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+void InspectorBackend::getApplicationCaches(long callId)
+{
+ if (InspectorApplicationCacheAgent* agent = inspectorApplicationCacheAgent())
+ agent->getApplicationCaches(callId);
+}
+#endif
+
void InspectorBackend::getCookies(long callId)
{
if (!m_inspectorController)
@@ -585,6 +597,15 @@ InspectorDOMAgent* InspectorBackend::inspectorDOMAgent()
return m_inspectorController->domAgent();
}
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+InspectorApplicationCacheAgent* InspectorBackend::inspectorApplicationCacheAgent()
+{
+ if (!m_inspectorController)
+ return 0;
+ return m_inspectorController->applicationCacheAgent();
+}
+#endif
+
InspectorFrontend* InspectorBackend::inspectorFrontend()
{
if (!m_inspectorController)
diff --git a/WebCore/inspector/InspectorBackend.h b/WebCore/inspector/InspectorBackend.h
index 035abf6..47cfdc7 100644
--- a/WebCore/inspector/InspectorBackend.h
+++ b/WebCore/inspector/InspectorBackend.h
@@ -39,6 +39,7 @@ namespace WebCore {
class CachedResource;
class Database;
+class InspectorApplicationCacheAgent;
class InspectorDOMAgent;
class InspectorFrontend;
class Node;
@@ -153,6 +154,10 @@ public:
void getCookies(long callId);
void deleteCookie(const String& cookieName, const String& domain);
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ void getApplicationCaches(long callId);
+#endif
+
// Generic code called from custom implementations.
void releaseWrapperObjectGroup(long injectedScriptId, const String& objectGroup);
void didEvaluateForTestInFrontend(long callId, const String& jsonResult);
@@ -170,6 +175,9 @@ public:
private:
InspectorBackend(InspectorController* inspectorController);
InspectorDOMAgent* inspectorDOMAgent();
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ InspectorApplicationCacheAgent* inspectorApplicationCacheAgent();
+#endif
InspectorFrontend* inspectorFrontend();
Node* nodeForId(long nodeId);
diff --git a/WebCore/inspector/InspectorBackend.idl b/WebCore/inspector/InspectorBackend.idl
index b4a68cf..1fc8a16 100644
--- a/WebCore/inspector/InspectorBackend.idl
+++ b/WebCore/inspector/InspectorBackend.idl
@@ -128,6 +128,10 @@ module core {
void getCookies(in long callId);
void deleteCookie(in DOMString cookieName, in DOMString domain);
+#if defined(ENABLE_OFFLINE_WEB_APPLICATIONS)
+ void getApplicationCaches(in long callId);
+#endif
+
void releaseWrapperObjectGroup(in long injectedScriptId, in DOMString objectGroup);
void didEvaluateForTestInFrontend(in long callId, in DOMString jsonResult);
diff --git a/WebCore/inspector/InspectorCSSStore.cpp b/WebCore/inspector/InspectorCSSStore.cpp
index 7bc947a..413fb8b 100644
--- a/WebCore/inspector/InspectorCSSStore.cpp
+++ b/WebCore/inspector/InspectorCSSStore.cpp
@@ -39,10 +39,9 @@
#include "CSSStyleSheet.h"
#include "HTMLHeadElement.h"
#include "InspectorController.h"
-#include "InspectorFrontend.h"
#include "InspectorResource.h"
#include "PlatformString.h"
-#include "ScriptObject.h"
+#include "RemoteInspectorFrontend2.h"
#include "StyleSheetList.h"
namespace WebCore {
@@ -96,13 +95,13 @@ CSSStyleSheet* InspectorCSSStore::inspectorStyleSheet(Document* ownerDocument, b
if (!ec)
ownerDocument->head()->appendChild(styleElement, ec);
if (ec) {
- m_inspectorController->inspectorFrontend()->didAddRule(callId, ScriptValue::undefined(), false);
+ m_inspectorController->inspectorFrontend2()->didAddRule(callId, InspectorValue::null(), false);
return 0;
}
StyleSheetList* styleSheets = ownerDocument->styleSheets();
StyleSheet* styleSheet = styleSheets->item(styleSheets->length() - 1);
if (!styleSheet->isCSSStyleSheet()) {
- m_inspectorController->inspectorFrontend()->didAddRule(callId, ScriptValue::undefined(), false);
+ m_inspectorController->inspectorFrontend2()->didAddRule(callId, InspectorValue::null(), false);
return 0;
}
CSSStyleSheet* inspectorStyleSheet = static_cast<CSSStyleSheet*>(styleSheet);
@@ -125,7 +124,7 @@ HashMap<long, SourceRange> InspectorCSSStore::getRuleRangesForStyleSheet(CSSStyl
RefPtr<CSSStyleSheet> newStyleSheet = CSSStyleSheet::create(styleSheet->ownerNode());
CSSParser p;
CSSParser::StyleRuleRanges ruleRangeMap;
- p.parseSheet(newStyleSheet.get(), resource->sourceString(), &ruleRangeMap);
+ p.parseSheet(newStyleSheet.get(), resource->sourceString(), 0, &ruleRangeMap);
for (unsigned i = 0, length = newStyleSheet->length(); i < length; ++i) {
CSSStyleRule* rule = asCSSStyleRule(newStyleSheet->item(i));
if (!rule)
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index 2256041..ed25696 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -68,6 +68,7 @@
#include "Page.h"
#include "ProgressTracker.h"
#include "Range.h"
+#include "RemoteInspectorFrontend2.h"
#include "RenderInline.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
@@ -95,6 +96,10 @@
#include "Database.h"
#endif
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+#include "InspectorApplicationCacheAgent.h"
+#endif
+
#if ENABLE(DOM_STORAGE)
#include "Storage.h"
#include "StorageArea.h"
@@ -216,7 +221,7 @@ InspectorController::~InspectorController()
ASSERT(s_inspectorControllerCount);
--s_inspectorControllerCount;
- releaseDOMAgent();
+ releaseFrontendLifetimeAgents();
m_inspectorBackend->disconnectController();
m_injectedScriptHost->disconnectController();
@@ -479,11 +484,12 @@ void InspectorController::setMonitoringXHR(bool enabled)
void InspectorController::connectFrontend(const ScriptObject& webInspector)
{
m_openingFrontend = false;
+ releaseFrontendLifetimeAgents();
m_frontend = new InspectorFrontend(webInspector, m_client);
- releaseDOMAgent();
- m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend.get());
+ m_frontend2 = new InspectorFrontend2(m_client);
+ m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend2.get());
if (m_timelineAgent)
- m_timelineAgent->resetFrontendProxyObject(m_frontend.get());
+ m_timelineAgent->resetFrontendProxyObject(m_frontend2.get());
// Initialize Web Inspector title.
m_frontend->inspectedURLChanged(m_inspectedPage->mainFrame()->loader()->url().string());
@@ -513,6 +519,10 @@ void InspectorController::connectFrontend(const ScriptObject& webInspector)
if (m_nodeToFocus)
focusNode();
showPanel(m_showAfterVisible);
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ m_applicationCacheAgent = new InspectorApplicationCacheAgent(this, m_frontend.get());
+#endif
}
void InspectorController::show()
@@ -582,17 +592,21 @@ void InspectorController::disconnectFrontend()
stopUserInitiatedProfiling();
#endif
- releaseDOMAgent();
+ releaseFrontendLifetimeAgents();
m_timelineAgent.clear();
}
-void InspectorController::releaseDOMAgent()
+void InspectorController::releaseFrontendLifetimeAgents()
{
// 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(OFFLINE_WEB_APPLICATIONS)
+ m_applicationCacheAgent.clear();
+#endif
}
void InspectorController::populateScriptObjects()
@@ -933,7 +947,7 @@ bool InspectorController::isMainResourceLoader(DocumentLoader* loader, const KUR
return loader->frame() == m_inspectedPage->mainFrame() && requestUrl == loader->requestURL();
}
-void InspectorController::willSendRequest(unsigned long identifier, const ResourceRequest& request, const ResourceResponse& redirectResponse)
+void InspectorController::willSendRequest(unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
{
if (!enabled())
return;
@@ -946,11 +960,12 @@ void InspectorController::willSendRequest(unsigned long identifier, const Resour
if (!resource)
return;
+ request.setReportLoadTiming(true);
+
if (!redirectResponse.isNull()) {
// Redirect may have empty URL and we'd like to not crash with invalid HashMap entry.
// See http/tests/misc/will-send-request-returns-null-on-redirect.html
if (!request.url().isEmpty()) {
- resource->markResponseReceivedTime();
resource->endTiming();
resource->updateResponse(redirectResponse);
@@ -981,7 +996,6 @@ void InspectorController::didReceiveResponse(unsigned long identifier, const Res
if (RefPtr<InspectorResource> resource = getTrackedResource(identifier)) {
resource->updateResponse(response);
- resource->markResponseReceivedTime();
if (resource != m_mainResource && m_frontend)
resource->updateScriptObject(m_frontend.get());
@@ -1149,7 +1163,7 @@ void InspectorController::startTimelineProfiler()
if (m_timelineAgent)
return;
- m_timelineAgent = new InspectorTimelineAgent(m_frontend.get());
+ m_timelineAgent = new InspectorTimelineAgent(m_frontend2.get());
if (m_frontend)
m_frontend->timelineProfilerWasStarted();
m_client->timelineProfilerWasStarted();
@@ -1342,6 +1356,16 @@ ScriptObject InspectorController::buildObjectForCookie(const Cookie& cookie)
return value;
}
+void InspectorController::deleteCookie(const String& cookieName, const String& domain)
+{
+ ResourcesMap::iterator resourcesEnd = m_resources.end();
+ for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it) {
+ Document* document = it->second->frame()->document();
+ if (document->url().host() == domain)
+ WebCore::deleteCookie(document, it->second->requestURL(), cookieName);
+ }
+}
+
#if ENABLE(DOM_STORAGE)
void InspectorController::didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame)
{
@@ -2104,16 +2128,6 @@ InspectorController::SpecialPanels InspectorController::specialPanelForJSName(co
return ElementsPanel;
}
-void InspectorController::deleteCookie(const String& cookieName, const String& domain)
-{
- ResourcesMap::iterator resourcesEnd = m_resources.end();
- for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it) {
- Document* document = it->second->frame()->document();
- if (document->url().host() == domain)
- WebCore::deleteCookie(document, it->second->requestURL(), cookieName);
- }
-}
-
InjectedScript InspectorController::injectedScriptForNodeId(long id)
{
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index 4c94d6d..1f416a0 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -41,7 +41,6 @@
#include "ScriptValue.h"
#include "StringHash.h"
#include "Timer.h"
-
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/ListHashSet.h>
@@ -55,6 +54,7 @@
namespace WebCore {
class CachedResource;
+class ConsoleMessage;
class Database;
class Document;
class DocumentLoader;
@@ -66,10 +66,15 @@ class InjectedScriptHost;
class InspectorBackend;
class InspectorClient;
class InspectorCSSStore;
+class InspectorDOMStorageResource;
+class InspectorDatabaseResource;
class InspectorFrontend;
+class InspectorFrontend2;
class InspectorFrontendClient;
+class InspectorResource;
class InspectorTimelineAgent;
class InspectorValue;
+class InspectorWorkerResource;
class KURL;
class Node;
class Page;
@@ -82,11 +87,9 @@ class SharedBuffer;
class Storage;
class StorageArea;
-class ConsoleMessage;
-class InspectorDatabaseResource;
-class InspectorDOMStorageResource;
-class InspectorResource;
-class InspectorWorkerResource;
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+class InspectorApplicationCacheAgent;
+#endif
class InspectorController
#if ENABLE(JAVASCRIPT_DEBUGGER)
@@ -161,11 +164,10 @@ public:
void didCommitLoad(DocumentLoader*);
void frameDetachedFromParent(Frame*);
-
void didLoadResourceFromMemoryCache(DocumentLoader*, const CachedResource*);
void identifierForInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
- void willSendRequest(unsigned long identifier, const ResourceRequest&, const ResourceResponse& redirectResponse);
+ void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
void didReceiveResponse(unsigned long identifier, const ResourceResponse&);
void didReceiveContentLength(unsigned long identifier, int lengthReceived);
void didFinishLoading(unsigned long identifier);
@@ -183,6 +185,13 @@ public:
void stopTimelineProfiler();
InspectorTimelineAgent* timelineAgent() { return m_timelineAgent.get(); }
+ void getCookies(long callId);
+ void deleteCookie(const String& cookieName, const String& domain);
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ InspectorApplicationCacheAgent* applicationCacheAgent() { return m_applicationCacheAgent.get(); }
+#endif
+
void mainResourceFiredLoadEvent(DocumentLoader*, const KURL&);
void mainResourceFiredDOMContentEvent(DocumentLoader*, const KURL&);
@@ -196,7 +205,6 @@ public:
void didCreateWorker(intptr_t, const String& url, bool isSharedWorker);
void didDestroyWorker(intptr_t);
#endif
- void getCookies(long callId);
#if ENABLE(DATABASE)
void didOpenDatabase(Database*, const String& domain, const String& name, const String& version);
@@ -212,6 +220,7 @@ public:
const ResourcesMap& resources() const { return m_resources; }
InspectorResource* resourceForURL(const String& url);
InspectorFrontend* inspectorFrontend() { return m_frontend.get(); }
+ InspectorFrontend2* inspectorFrontend2() { return m_frontend2.get(); }
void drawNodeHighlight(GraphicsContext&) const;
@@ -243,9 +252,7 @@ public:
bool profilerEnabled() const { return enabled() && m_profilerEnabled; }
void takeHeapSnapshot();
-#endif
-#if ENABLE(JAVASCRIPT_DEBUGGER)
void enableDebugger();
void disableDebugger(bool always = false);
bool debuggerEnabled() const { return m_debuggerEnabled; }
@@ -284,9 +291,7 @@ private:
void setMonitoringXHR(bool enabled);
void storeLastActivePanel(const String& panelName);
InspectorDOMAgent* domAgent() { return m_domAgent.get(); }
- void releaseDOMAgent();
-
- void deleteCookie(const String& cookieName, const String& domain);
+ void releaseFrontendLifetimeAgents();
#if ENABLE(JAVASCRIPT_DEBUGGER)
void setBreakpoint(long callId, const String& sourceID, unsigned lineNumber, bool enabled, const String& condition);
@@ -340,9 +345,15 @@ private:
OwnPtr<InspectorFrontendClient> m_inspectorFrontendClient;
bool m_openingFrontend;
OwnPtr<InspectorFrontend> m_frontend;
+ OwnPtr<InspectorFrontend2> m_frontend2;
RefPtr<InspectorDOMAgent> m_domAgent;
OwnPtr<InspectorCSSStore> m_cssStore;
OwnPtr<InspectorTimelineAgent> m_timelineAgent;
+
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent;
+#endif
+
RefPtr<Node> m_nodeToFocus;
RefPtr<InspectorResource> m_mainResource;
ResourcesMap m_resources;
diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp
index a2f2e15..46bc938 100644
--- a/WebCore/inspector/InspectorDOMAgent.cpp
+++ b/WebCore/inspector/InspectorDOMAgent.cpp
@@ -55,15 +55,14 @@
#include "FrameTree.h"
#include "HTMLElement.h"
#include "HTMLFrameOwnerElement.h"
-#include "InspectorFrontend.h"
#include "MutationEvent.h"
#include "Node.h"
#include "NodeList.h"
#include "PlatformString.h"
+#include "RemoteInspectorFrontend2.h"
#include "RenderStyle.h"
#include "RenderStyleConstants.h"
#include "ScriptEventListener.h"
-#include "ScriptObject.h"
#include "StyleSheetList.h"
#include "Text.h"
@@ -196,7 +195,7 @@ public:
}
-InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend* frontend)
+InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend2* frontend)
: EventListener(InspectorDOMAgentType)
, m_cssStore(cssStore)
, m_frontend(frontend)
@@ -234,7 +233,7 @@ void InspectorDOMAgent::setDocument(Document* doc)
if (doc->documentElement())
pushDocumentToFrontend();
} else
- m_frontend->setDocument(ScriptObject());
+ m_frontend->setDocument(InspectorValue::null());
}
void InspectorDOMAgent::releaseDanglingNodes()
@@ -284,10 +283,10 @@ void InspectorDOMAgent::handleEvent(ScriptExecutionContext*, Event* event)
// Re-add frame owner element together with its new children.
long parentId = m_documentNodeToIdMap.get(innerParentNode(node));
m_frontend->childNodeRemoved(parentId, frameOwnerId);
- ScriptObject value = buildObjectForNode(node, 0, &m_documentNodeToIdMap);
+ 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);
+ m_frontend->childNodeInserted(parentId, prevId, value.release());
// Invalidate children requested flag for the element.
m_childrenRequested.remove(m_childrenRequested.find(frameOwnerId));
}
@@ -350,9 +349,9 @@ void InspectorDOMAgent::pushChildNodesToFrontend(long nodeId)
return;
NodeToIdMap* nodeMap = m_idToNodesMap.get(nodeId);
- ScriptArray children = buildArrayForContainerChildren(node, 1, nodeMap);
+ RefPtr<InspectorArray> children = buildArrayForContainerChildren(node, 1, nodeMap);
m_childrenRequested.add(nodeId);
- m_frontend->setChildNodes(nodeId, children);
+ m_frontend->setChildNodes(nodeId, children.release());
}
long InspectorDOMAgent::pushNodeByPathToFrontend(const String& path)
@@ -587,13 +586,12 @@ void InspectorDOMAgent::setTextNodeValue(long callId, long nodeId, const String&
void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId)
{
Node* node = nodeForId(nodeId);
- ScriptArray listenersArray = m_frontend->newScriptArray();
- unsigned counter = 0;
+ RefPtr<InspectorArray> listenersArray = InspectorArray::create();
EventTargetData* d;
// Quick break if a null node or no listeners at all
if (!node || !(d = node->eventTargetData())) {
- m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray);
+ m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release());
return;
}
@@ -607,7 +605,7 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId)
// Quick break if no useful listeners
size_t eventTypesLength = eventTypes.size();
if (eventTypesLength == 0) {
- m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray);
+ m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release());
return;
}
@@ -640,7 +638,7 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId)
for (size_t j = 0; j < vector.size(); ++j) {
const RegisteredEventListener& listener = vector[j];
if (listener.useCapture)
- listenersArray.set(counter++, buildObjectForEventListener(listener, info.eventType, info.node));
+ listenersArray->push(buildObjectForEventListener(listener, info.eventType, info.node));
}
}
@@ -651,11 +649,11 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId)
for (size_t j = 0; j < vector.size(); ++j) {
const RegisteredEventListener& listener = vector[j];
if (!listener.useCapture)
- listenersArray.set(counter++, buildObjectForEventListener(listener, info.eventType, info.node));
+ listenersArray->push(buildObjectForEventListener(listener, info.eventType, info.node));
}
}
- m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray);
+ m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release());
}
void InspectorDOMAgent::addInspectedNode(long nodeId)
@@ -769,9 +767,9 @@ String InspectorDOMAgent::documentURLString(Document* document) const
return document->url().string();
}
-ScriptObject InspectorDOMAgent::buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap)
+PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap)
{
- ScriptObject value = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> value = InspectorObject::create();
long id = bind(node, nodesMap);
String nodeName;
@@ -796,95 +794,92 @@ ScriptObject InspectorDOMAgent::buildObjectForNode(Node* node, int depth, NodeTo
break;
}
- value.set("id", id);
- value.set("nodeType", node->nodeType());
- value.set("nodeName", nodeName);
- value.set("localName", localName);
- value.set("nodeValue", nodeValue);
+ value->setNumber("id", id);
+ value->setNumber("nodeType", node->nodeType());
+ value->setString("nodeName", nodeName);
+ value->setString("localName", localName);
+ value->setString("nodeValue", nodeValue);
if (node->nodeType() == Node::ELEMENT_NODE || node->nodeType() == Node::DOCUMENT_NODE || node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE) {
int nodeCount = innerChildNodeCount(node);
- value.set("childNodeCount", nodeCount);
- ScriptArray children = buildArrayForContainerChildren(node, depth, nodesMap);
- if (children.length() > 0)
- value.set("children", children);
+ value->setNumber("childNodeCount", nodeCount);
+ RefPtr<InspectorArray> children = buildArrayForContainerChildren(node, depth, nodesMap);
+ if (children->length() > 0)
+ value->set("children", children.release());
if (node->nodeType() == Node::ELEMENT_NODE) {
Element* element = static_cast<Element*>(node);
- value.set("attributes", buildArrayForElementAttributes(element));
+ value->set("attributes", buildArrayForElementAttributes(element));
if (node->isFrameOwnerElement()) {
HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElement*>(node);
- value.set("documentURL", documentURLString(frameOwner->contentDocument()));
+ value->setString("documentURL", documentURLString(frameOwner->contentDocument()));
}
} else if (node->nodeType() == Node::DOCUMENT_NODE) {
Document* document = static_cast<Document*>(node);
- value.set("documentURL", documentURLString(document));
+ value->setString("documentURL", documentURLString(document));
}
} else if (node->nodeType() == Node::DOCUMENT_TYPE_NODE) {
DocumentType* docType = static_cast<DocumentType*>(node);
- value.set("publicId", docType->publicId());
- value.set("systemId", docType->systemId());
- value.set("internalSubset", docType->internalSubset());
+ value->setString("publicId", docType->publicId());
+ value->setString("systemId", docType->systemId());
+ value->setString("internalSubset", docType->internalSubset());
}
- return value;
+ return value.release();
}
-ScriptArray InspectorDOMAgent::buildArrayForElementAttributes(Element* element)
+PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForElementAttributes(Element* element)
{
- ScriptArray attributesValue = m_frontend->newScriptArray();
+ RefPtr<InspectorArray> attributesValue = InspectorArray::create();
// Go through all attributes and serialize them.
const NamedNodeMap* attrMap = element->attributes(true);
if (!attrMap)
- return attributesValue;
+ return attributesValue.release();
unsigned numAttrs = attrMap->length();
- int index = 0;
for (unsigned i = 0; i < numAttrs; ++i) {
// Add attribute pair
const Attribute *attribute = attrMap->attributeItem(i);
- attributesValue.set(index++, attribute->name().toString());
- attributesValue.set(index++, attribute->value());
+ attributesValue->pushString(attribute->name().toString());
+ attributesValue->pushString(attribute->value());
}
- return attributesValue;
+ return attributesValue.release();
}
-ScriptArray InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap)
+PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap)
{
- ScriptArray children = m_frontend->newScriptArray();
+ RefPtr<InspectorArray> children = InspectorArray::create();
if (depth == 0) {
- int index = 0;
// Special case the_only text child.
if (innerChildNodeCount(container) == 1) {
Node *child = innerFirstChild(container);
if (child->nodeType() == Node::TEXT_NODE)
- children.set(index++, buildObjectForNode(child, 0, nodesMap));
+ children->push(buildObjectForNode(child, 0, nodesMap));
}
- return children;
+ return children.release();
} else if (depth > 0) {
depth--;
}
- int index = 0;
for (Node *child = innerFirstChild(container); child; child = innerNextSibling(child))
- children.set(index++, buildObjectForNode(child, depth, nodesMap));
- return children;
+ children->push(buildObjectForNode(child, depth, nodesMap));
+ return children.release();
}
-ScriptObject InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node)
+PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node)
{
RefPtr<EventListener> eventListener = registeredEventListener.listener;
- ScriptObject value = m_frontend->newScriptObject();
- value.set("type", eventType);
- value.set("useCapture", registeredEventListener.useCapture);
- value.set("isAttribute", eventListener->isAttribute());
- value.set("nodeId", pushNodePathToFrontend(node));
- value.set("listenerBody", eventListenerHandlerBody(node->document(), m_frontend->scriptState(), eventListener.get()));
+ RefPtr<InspectorObject> value = InspectorObject::create();
+ value->setString("type", eventType);
+ value->setBool("useCapture", registeredEventListener.useCapture);
+ value->setBool("isAttribute", eventListener->isAttribute());
+ value->setNumber("nodeId", pushNodePathToFrontend(node));
+ value->setString("listenerBody", eventListenerHandlerBody(node->document(), eventListener.get()));
String sourceName;
int lineNumber;
- if (eventListenerHandlerLocation(node->document(), m_frontend->scriptState(), eventListener.get(), sourceName, lineNumber)) {
- value.set("sourceName", sourceName);
- value.set("lineNumber", lineNumber);
+ if (eventListenerHandlerLocation(node->document(), eventListener.get(), sourceName, lineNumber)) {
+ value->setString("sourceName", sourceName);
+ value->setNumber("lineNumber", lineNumber);
}
- return value;
+ return value.release();
}
Node* InspectorDOMAgent::innerFirstChild(Node* node)
@@ -980,8 +975,8 @@ void InspectorDOMAgent::didInsertDOMNode(Node* node)
// Children have been requested -> return value of a new child.
Node* prevSibling = innerPreviousSibling(node);
long prevId = prevSibling ? m_documentNodeToIdMap.get(prevSibling) : 0;
- ScriptObject value = buildObjectForNode(node, 0, &m_documentNodeToIdMap);
- m_frontend->childNodeInserted(parentId, prevId, value);
+ RefPtr<InspectorObject> value = buildObjectForNode(node, 0, &m_documentNodeToIdMap);
+ m_frontend->childNodeInserted(parentId, prevId, value.release());
}
}
@@ -1019,62 +1014,61 @@ void InspectorDOMAgent::getStyles(long callId, long nodeId, bool authorOnly)
{
Node* node = nodeForId(nodeId);
if (!node || node->nodeType() != Node::ELEMENT_NODE) {
- m_frontend->didGetStyles(callId, ScriptValue::undefined());
+ m_frontend->didGetStyles(callId, InspectorValue::null());
return;
}
DOMWindow* defaultView = node->ownerDocument()->defaultView();
if (!defaultView) {
- m_frontend->didGetStyles(callId, ScriptValue::undefined());
+ m_frontend->didGetStyles(callId, InspectorValue::null());
return;
}
Element* element = static_cast<Element*>(node);
RefPtr<CSSComputedStyleDeclaration> computedStyleInfo = computedStyle(node, true); // Support the viewing of :visited information in computed style.
- ScriptObject result = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> result = InspectorObject::create();
if (element->style())
- result.set("inlineStyle", buildObjectForStyle(element->style(), true));
- result.set("computedStyle", buildObjectForStyle(computedStyleInfo.get(), false));
+ result->set("inlineStyle", buildObjectForStyle(element->style(), true));
+ result->set("computedStyle", buildObjectForStyle(computedStyleInfo.get(), false));
CSSStyleSelector* selector = element->ownerDocument()->styleSelector();
RefPtr<CSSRuleList> matchedRules = selector->styleRulesForElement(element, authorOnly);
- result.set("matchedCSSRules", buildArrayForCSSRules(node->ownerDocument(), matchedRules.get()));
+ result->set("matchedCSSRules", buildArrayForCSSRules(node->ownerDocument(), matchedRules.get()));
- result.set("styleAttributes", buildObjectForAttributeStyles(element));
- result.set("pseudoElements", buildArrayForPseudoElements(element, authorOnly));
+ result->set("styleAttributes", buildObjectForAttributeStyles(element));
+ result->set("pseudoElements", buildArrayForPseudoElements(element, authorOnly));
- ScriptObject currentStyle = result;
+ RefPtr<InspectorObject> currentStyle = result;
Element* parentElement = element->parentElement();
while (parentElement) {
- ScriptObject parentStyle = m_frontend->newScriptObject();
- currentStyle.set("parent", parentStyle);
+ RefPtr<InspectorObject> parentStyle = InspectorObject::create();
+ currentStyle->set("parent", parentStyle);
if (parentElement->style() && parentElement->style()->length())
- parentStyle.set("inlineStyle", buildObjectForStyle(parentElement->style(), true));
+ parentStyle->set("inlineStyle", buildObjectForStyle(parentElement->style(), true));
CSSStyleSelector* parentSelector = parentElement->ownerDocument()->styleSelector();
RefPtr<CSSRuleList> parentMatchedRules = parentSelector->styleRulesForElement(parentElement, authorOnly);
- parentStyle.set("matchedCSSRules", buildArrayForCSSRules(parentElement->ownerDocument(), parentMatchedRules.get()));
+ parentStyle->set("matchedCSSRules", buildArrayForCSSRules(parentElement->ownerDocument(), parentMatchedRules.get()));
parentElement = parentElement->parentElement();
currentStyle = parentStyle;
}
- m_frontend->didGetStyles(callId, result);
+ m_frontend->didGetStyles(callId, result.release());
}
void InspectorDOMAgent::getAllStyles(long callId)
{
- ScriptArray result = m_frontend->newScriptArray();
- unsigned counter = 0;
+ RefPtr<InspectorArray> result = InspectorArray::create();
for (ListHashSet<RefPtr<Document> >::iterator it = m_documents.begin(); it != m_documents.end(); ++it) {
StyleSheetList* list = (*it)->styleSheets();
for (unsigned i = 0; i < list->length(); ++i) {
StyleSheet* styleSheet = list->item(i);
if (styleSheet->isCSSStyleSheet())
- result.set(counter++, buildObjectForStyleSheet((*it).get(), static_cast<CSSStyleSheet*>(styleSheet)));
+ result->push(buildObjectForStyleSheet((*it).get(), static_cast<CSSStyleSheet*>(styleSheet)));
}
}
- m_frontend->didGetAllStyles(callId, result);
+ m_frontend->didGetAllStyles(callId, result.release());
}
void InspectorDOMAgent::getStyleSheet(long callId, long styleSheetId)
@@ -1083,7 +1077,7 @@ void InspectorDOMAgent::getStyleSheet(long callId, long styleSheetId)
if (styleSheet && styleSheet->doc())
m_frontend->didGetStyleSheet(callId, buildObjectForStyleSheet(styleSheet->doc(), styleSheet));
else
- m_frontend->didGetStyleSheet(callId, ScriptObject::undefined());
+ m_frontend->didGetStyleSheet(callId, InspectorObject::create());
}
void InspectorDOMAgent::getRuleRangesForStyleSheetId(long callId, long styleSheetId)
@@ -1092,30 +1086,30 @@ void InspectorDOMAgent::getRuleRangesForStyleSheetId(long callId, long styleShee
if (styleSheet && styleSheet->doc()) {
HashMap<long, SourceRange> ruleRanges = cssStore()->getRuleRangesForStyleSheet(styleSheet);
if (!ruleRanges.size()) {
- m_frontend->didGetStyleSheet(callId, ScriptObject::undefined());
+ m_frontend->didGetStyleSheet(callId, InspectorObject::create());
return;
}
- ScriptObject result = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> result = InspectorObject::create();
for (HashMap<long, SourceRange>::iterator it = ruleRanges.begin(); it != ruleRanges.end(); ++it) {
if (it->second.second) {
- ScriptObject ruleRange = m_frontend->newScriptObject();
- result.set(String::number(it->first).utf8().data(), ruleRange);
- ScriptObject bodyRange = m_frontend->newScriptObject();
- ruleRange.set("bodyRange", bodyRange);
- bodyRange.set("start", it->second.first);
- bodyRange.set("end", it->second.second);
+ RefPtr<InspectorObject> ruleRange = InspectorObject::create();
+ result->set(String::number(it->first).utf8().data(), ruleRange);
+ RefPtr<InspectorObject> bodyRange = InspectorObject::create();
+ ruleRange->set("bodyRange", bodyRange);
+ bodyRange->setNumber("start", it->second.first);
+ bodyRange->setNumber("end", it->second.second);
}
}
m_frontend->didGetStyleSheet(callId, result);
} else
- m_frontend->didGetStyleSheet(callId, ScriptObject::undefined());
+ m_frontend->didGetStyleSheet(callId, InspectorValue::null());
}
void InspectorDOMAgent::getInlineStyle(long callId, long nodeId)
{
Node* node = nodeForId(nodeId);
if (!node || node->nodeType() != Node::ELEMENT_NODE) {
- m_frontend->didGetInlineStyle(callId, ScriptValue::undefined());
+ m_frontend->didGetInlineStyle(callId, InspectorValue::null());
return;
}
Element* element = static_cast<Element*>(node);
@@ -1126,13 +1120,13 @@ void InspectorDOMAgent::getComputedStyle(long callId, long nodeId)
{
Node* node = nodeForId(nodeId);
if (!node || node->nodeType() != Node::ELEMENT_NODE) {
- m_frontend->didGetComputedStyle(callId, ScriptValue::undefined());
+ m_frontend->didGetComputedStyle(callId, InspectorValue::null());
return;
}
DOMWindow* defaultView = node->ownerDocument()->defaultView();
if (!defaultView) {
- m_frontend->didGetComputedStyle(callId, ScriptValue::undefined());
+ m_frontend->didGetComputedStyle(callId, InspectorValue::null());
return;
}
@@ -1141,56 +1135,54 @@ void InspectorDOMAgent::getComputedStyle(long callId, long nodeId)
m_frontend->didGetComputedStyle(callId, buildObjectForStyle(computedStyle.get(), false));
}
-ScriptObject InspectorDOMAgent::buildObjectForAttributeStyles(Element* element)
+PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForAttributeStyles(Element* element)
{
- ScriptObject styleAttributes = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> styleAttributes = InspectorObject::create();
NamedNodeMap* attributes = element->attributes();
for (unsigned i = 0; attributes && i < attributes->length(); ++i) {
Attribute* attribute = attributes->attributeItem(i);
if (attribute->style()) {
String attributeName = attribute->localName();
- styleAttributes.set(attributeName.utf8().data(), buildObjectForStyle(attribute->style(), true));
+ styleAttributes->set(attributeName.utf8().data(), buildObjectForStyle(attribute->style(), true));
}
}
return styleAttributes;
}
-ScriptArray InspectorDOMAgent::buildArrayForCSSRules(Document* ownerDocument, CSSRuleList* matchedRules)
+PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForCSSRules(Document* ownerDocument, CSSRuleList* matchedRules)
{
- ScriptArray matchedCSSRules = m_frontend->newScriptArray();
- unsigned counter = 0;
+ RefPtr<InspectorArray> matchedCSSRules = InspectorArray::create();
for (unsigned i = 0; matchedRules && i < matchedRules->length(); ++i) {
CSSRule* rule = matchedRules->item(i);
if (rule->type() == CSSRule::STYLE_RULE)
- matchedCSSRules.set(counter++, buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule)));
+ matchedCSSRules->push(buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule)));
}
- return matchedCSSRules;
+ return matchedCSSRules.release();
}
-ScriptArray InspectorDOMAgent::buildArrayForPseudoElements(Element* element, bool authorOnly)
+PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForPseudoElements(Element* element, bool authorOnly)
{
- ScriptArray result = m_frontend->newScriptArray();
+ RefPtr<InspectorArray> result = InspectorArray::create();
CSSStyleSelector* selector = element->ownerDocument()->styleSelector();
RefPtr<RenderStyle> renderStyle = element->styleForRenderer();
- unsigned counter = 0;
for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_INTERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) {
RefPtr<CSSRuleList> matchedRules = selector->pseudoStyleRulesForElement(element, pseudoId, authorOnly);
if (matchedRules && matchedRules->length()) {
- ScriptObject pseudoStyles = m_frontend->newScriptObject();
- pseudoStyles.set("pseudoId", static_cast<int>(pseudoId));
- pseudoStyles.set("rules", buildArrayForCSSRules(element->ownerDocument(), matchedRules.get()));
- result.set(counter++, pseudoStyles);
+ RefPtr<InspectorObject> pseudoStyles = InspectorObject::create();
+ pseudoStyles->setNumber("pseudoId", static_cast<int>(pseudoId));
+ pseudoStyles->set("rules", buildArrayForCSSRules(element->ownerDocument(), matchedRules.get()));
+ result->push(pseudoStyles.release());
}
}
- return result;
+ return result.release();
}
void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String& styleText, const String& propertyName)
{
CSSStyleDeclaration* style = cssStore()->styleForId(styleId);
if (!style) {
- m_frontend->didApplyStyleText(callId, false, ScriptValue::undefined(), m_frontend->newScriptArray());
+ m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create());
return;
}
@@ -1220,21 +1212,21 @@ void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String&
style->removeProperty(propertyName, ec);
if (ec) {
- m_frontend->didApplyStyleText(callId, false, ScriptValue::undefined(), m_frontend->newScriptArray());
+ m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create());
return;
}
}
// Notify caller that the property was successfully deleted.
if (!styleTextLength) {
- ScriptArray changedProperties = m_frontend->newScriptArray();
- changedProperties.set(0, propertyName);
- m_frontend->didApplyStyleText(callId, true, ScriptValue::undefined(), changedProperties);
+ RefPtr<InspectorArray> changedProperties = InspectorArray::create();
+ changedProperties->pushString(propertyName);
+ m_frontend->didApplyStyleText(callId, true, InspectorValue::null(), changedProperties.release());
return;
}
if (!tempStyle->length()) {
- m_frontend->didApplyStyleText(callId, false, ScriptValue::undefined(), m_frontend->newScriptArray());
+ m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create());
return;
}
@@ -1302,7 +1294,7 @@ void InspectorDOMAgent::toggleStyleEnabled(long callId, long styleId, const Stri
{
CSSStyleDeclaration* style = cssStore()->styleForId(styleId);
if (!style) {
- m_frontend->didToggleStyleEnabled(callId, ScriptValue::undefined());
+ m_frontend->didToggleStyleEnabled(callId, InspectorValue::null());
return;
}
@@ -1321,7 +1313,7 @@ void InspectorDOMAgent::toggleStyleEnabled(long callId, long styleId, const Stri
disabledStyle->remove(propertyName);
}
if (ec) {
- m_frontend->didToggleStyleEnabled(callId, ScriptValue::undefined());
+ m_frontend->didToggleStyleEnabled(callId, InspectorValue::null());
return;
}
m_frontend->didToggleStyleEnabled(callId, buildObjectForStyle(style, true));
@@ -1331,7 +1323,7 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String&
{
CSSStyleRule* rule = cssStore()->ruleForId(ruleId);
if (!rule) {
- m_frontend->didSetRuleSelector(callId, ScriptValue::undefined(), false);
+ m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false);
return;
}
@@ -1341,7 +1333,7 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String&
ExceptionCode ec = 0;
styleSheet->addRule(selector, rule->style()->cssText(), ec);
if (ec) {
- m_frontend->didSetRuleSelector(callId, ScriptValue::undefined(), false);
+ m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false);
return;
}
@@ -1354,7 +1346,7 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String&
}
if (ec) {
- m_frontend->didSetRuleSelector(callId, ScriptValue::undefined(), false);
+ m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false);
return;
}
@@ -1365,7 +1357,7 @@ void InspectorDOMAgent::addRule(long callId, const String& selector, long select
{
Node* node = nodeForId(selectedNodeId);
if (!node) {
- m_frontend->didAddRule(callId, ScriptValue::undefined(), false);
+ m_frontend->didAddRule(callId, InspectorValue::null(), false);
return;
}
@@ -1376,7 +1368,7 @@ void InspectorDOMAgent::addRule(long callId, const String& selector, long select
ExceptionCode ec = 0;
styleSheet->addRule(selector, "", ec);
if (ec) {
- m_frontend->didAddRule(callId, ScriptValue::undefined(), false);
+ m_frontend->didAddRule(callId, InspectorValue::null(), false);
return;
}
@@ -1384,115 +1376,114 @@ void InspectorDOMAgent::addRule(long callId, const String& selector, long select
m_frontend->didAddRule(callId, buildObjectForRule(node->ownerDocument(), newRule), ruleAffectsNode(newRule, node));
}
-ScriptObject InspectorDOMAgent::buildObjectForStyle(CSSStyleDeclaration* style, bool bind)
+PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForStyle(CSSStyleDeclaration* style, bool bind)
{
- ScriptObject result = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> result = InspectorObject::create();
if (bind) {
long styleId = cssStore()->bindStyle(style);
- result.set("id", styleId);
+ result->setNumber("id", styleId);
CSSStyleSheet* parentStyleSheet = getParentStyleSheet(style);
if (parentStyleSheet)
- result.set("parentStyleSheetId", cssStore()->bindStyleSheet(parentStyleSheet));
+ result->setNumber("parentStyleSheetId", cssStore()->bindStyleSheet(parentStyleSheet));
DisabledStyleDeclaration* disabledStyle = cssStore()->disabledStyleForId(styleId, false);
if (disabledStyle)
- result.set("disabled", buildArrayForDisabledStyleProperties(disabledStyle));
+ result->set("disabled", buildArrayForDisabledStyleProperties(disabledStyle));
}
- result.set("width", style->getPropertyValue("width"));
- result.set("height", style->getPropertyValue("height"));
- populateObjectWithStyleProperties(style, result);
- return result;
+ result->setString("width", style->getPropertyValue("width"));
+ result->setString("height", style->getPropertyValue("height"));
+ populateObjectWithStyleProperties(style, result.get());
+ return result.release();
}
-void InspectorDOMAgent::populateObjectWithStyleProperties(CSSStyleDeclaration* style, ScriptObject& result)
+void InspectorDOMAgent::populateObjectWithStyleProperties(CSSStyleDeclaration* style, InspectorObject* result)
{
- ScriptArray properties = m_frontend->newScriptArray();
- ScriptObject shorthandValues = m_frontend->newScriptObject();
- result.set("properties", properties);
- result.set("shorthandValues", shorthandValues);
+ RefPtr<InspectorArray> properties = InspectorArray::create();
+ RefPtr<InspectorObject> shorthandValues = InspectorObject::create();
HashSet<String> foundShorthands;
for (unsigned i = 0; i < style->length(); ++i) {
- ScriptObject property = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> property = InspectorObject::create();
String name = style->item(i);
- property.set("name", name);
- property.set("priority", style->getPropertyPriority(name));
- property.set("implicit", style->isPropertyImplicit(name));
+ property->setString("name", name);
+ property->setString("priority", style->getPropertyPriority(name));
+ property->setBool("implicit", style->isPropertyImplicit(name));
String shorthand = style->getPropertyShorthand(name);
- property.set("shorthand", shorthand);
+ property->setString("shorthand", shorthand);
if (!shorthand.isEmpty() && !foundShorthands.contains(shorthand)) {
foundShorthands.add(shorthand);
- shorthandValues.set(shorthand, shorthandValue(style, shorthand));
+ shorthandValues->setString(shorthand, shorthandValue(style, shorthand));
}
- property.set("value", style->getPropertyValue(name));
- properties.set(i, property);
+ property->setString("value", style->getPropertyValue(name));
+ properties->push(property.release());
}
+ result->set("properties", properties);
+ result->set("shorthandValues", shorthandValues);
}
-ScriptArray InspectorDOMAgent::buildArrayForDisabledStyleProperties(DisabledStyleDeclaration* declaration)
+PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForDisabledStyleProperties(DisabledStyleDeclaration* declaration)
{
- int counter = 0;
- ScriptArray properties = m_frontend->newScriptArray();
+ RefPtr<InspectorArray> properties = InspectorArray::create();
for (DisabledStyleDeclaration::iterator it = declaration->begin(); it != declaration->end(); ++it) {
- ScriptObject property = m_frontend->newScriptObject();
- property.set("name", it->first);
- property.set("value", it->second.first);
- property.set("priority", it->second.second);
- properties.set(counter++, property);
+ RefPtr<InspectorObject> property = InspectorObject::create();
+ property->setString("name", it->first);
+ property->setString("value", it->second.first);
+ property->setString("priority", it->second.second);
+ properties->push(property.release());
}
- return properties;
+ return properties.release();
}
-ScriptObject InspectorDOMAgent::buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet* styleSheet)
+PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet* styleSheet)
{
- ScriptObject result = m_frontend->newScriptObject();
+ RefPtr<InspectorObject> result = InspectorObject::create();
long id = cssStore()->bindStyleSheet(styleSheet);
- result.set("id", id);
- result.set("disabled", styleSheet->disabled());
- result.set("href", styleSheet->href());
- result.set("title", styleSheet->title());
- result.set("documentElementId", m_documentNodeToIdMap.get(styleSheet->doc()));
- ScriptArray cssRules = m_frontend->newScriptArray();
- result.set("cssRules", cssRules);
+ result->setNumber("id", id);
+ result->setBool("disabled", styleSheet->disabled());
+ result->setString("href", styleSheet->href());
+ result->setString("title", styleSheet->title());
+ result->setNumber("documentElementId", m_documentNodeToIdMap.get(styleSheet->doc()));
+ RefPtr<InspectorArray> cssRules = InspectorArray::create();
PassRefPtr<CSSRuleList> cssRuleList = CSSRuleList::create(styleSheet, true);
- if (!cssRuleList)
- return result;
- unsigned counter = 0;
- for (unsigned i = 0; i < cssRuleList->length(); ++i) {
- CSSRule* rule = cssRuleList->item(i);
- if (rule->isStyleRule())
- cssRules.set(counter++, buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule)));
+ if (cssRuleList) {
+ for (unsigned i = 0; i < cssRuleList->length(); ++i) {
+ CSSRule* rule = cssRuleList->item(i);
+ if (rule->isStyleRule())
+ cssRules->push(buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule)));
+ }
}
- return result;
+ result->set("cssRules", cssRules.release());
+ return result.release();
}
-ScriptObject InspectorDOMAgent::buildObjectForRule(Document* ownerDocument, CSSStyleRule* rule)
+PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForRule(Document* ownerDocument, CSSStyleRule* rule)
{
CSSStyleSheet* parentStyleSheet = rule->parentStyleSheet();
- ScriptObject result = m_frontend->newScriptObject();
- result.set("selectorText", rule->selectorText());
- result.set("cssText", rule->cssText());
- result.set("sourceLine", rule->sourceLine());
+ RefPtr<InspectorObject> result = InspectorObject::create();
+ result->setString("selectorText", rule->selectorText());
+ result->setString("cssText", rule->cssText());
+ result->setNumber("sourceLine", rule->sourceLine());
+ result->setString("documentURL", documentURLString(ownerDocument));
if (parentStyleSheet) {
- ScriptObject parentStyleSheetValue = m_frontend->newScriptObject();
- result.set("parentStyleSheet", parentStyleSheetValue);
- parentStyleSheetValue.set("href", parentStyleSheet->href());
- parentStyleSheetValue.set("id", cssStore()->bindStyleSheet(parentStyleSheet));
+ RefPtr<InspectorObject> parentStyleSheetValue = InspectorObject::create();
+ parentStyleSheetValue->setString("href", parentStyleSheet->href());
+ parentStyleSheetValue->setNumber("id", cssStore()->bindStyleSheet(parentStyleSheet));
+ result->set("parentStyleSheet", parentStyleSheetValue.release());
}
bool isUserAgent = parentStyleSheet && !parentStyleSheet->ownerNode() && parentStyleSheet->href().isEmpty();
bool isUser = parentStyleSheet && parentStyleSheet->ownerNode() && parentStyleSheet->ownerNode()->nodeName() == "#document";
- result.set("isUserAgent", isUserAgent);
- result.set("isUser", isUser);
- result.set("isViaInspector", rule->parentStyleSheet() == cssStore()->inspectorStyleSheet(ownerDocument, false, -1));
+ result->setBool("isUserAgent", isUserAgent);
+ result->setBool("isUser", isUser);
+ result->setBool("isViaInspector", rule->parentStyleSheet() == cssStore()->inspectorStyleSheet(ownerDocument, false, -1));
// Bind editable scripts only.
bool bind = !isUserAgent && !isUser;
- result.set("style", buildObjectForStyle(rule->style(), bind));
+ result->set("style", buildObjectForStyle(rule->style(), bind));
if (bind)
- result.set("id", cssStore()->bindRule(rule));
- return result;
+ result->setNumber("id", cssStore()->bindRule(rule));
+ return result.release();
}
Vector<String> InspectorDOMAgent::longhandProperties(CSSStyleDeclaration* style, const String& shorthandProperty)
@@ -1593,12 +1584,12 @@ Node* InspectorDOMAgent::nodeForPath(const String& path)
return node;
}
-ScriptArray InspectorDOMAgent::toArray(const Vector<String>& data)
+PassRefPtr<InspectorArray> InspectorDOMAgent::toArray(const Vector<String>& data)
{
- ScriptArray result = m_frontend->newScriptArray();
+ RefPtr<InspectorArray> result = InspectorArray::create();
for (unsigned i = 0; i < data.size(); ++i)
- result.set(i, data[i]);
- return result;
+ result->pushString(data[i]);
+ return result.release();
}
CSSStyleSheet* InspectorDOMAgent::getParentStyleSheet(CSSStyleDeclaration* style)
@@ -1634,15 +1625,14 @@ void InspectorDOMAgent::onMatchJobsTimer(Timer<InspectorDOMAgent>*)
void InspectorDOMAgent::reportNodesAsSearchResults(ListHashSet<Node*>& resultCollector)
{
- ScriptArray nodeIds = m_frontend->newScriptArray();
- int index = 0;
+ RefPtr<InspectorArray> nodeIds = InspectorArray::create();
for (ListHashSet<Node*>::iterator it = resultCollector.begin(); it != resultCollector.end(); ++it) {
if (m_searchResults.contains(*it))
continue;
m_searchResults.add(*it);
- nodeIds.set(index++, static_cast<long long>(pushNodePathToFrontend(*it)));
+ nodeIds->pushNumber(static_cast<long long>(pushNodePathToFrontend(*it)));
}
- m_frontend->addNodesToSearchResult(nodeIds);
+ m_frontend->addNodesToSearchResult(nodeIds.release());
}
} // namespace WebCore
diff --git a/WebCore/inspector/InspectorDOMAgent.h b/WebCore/inspector/InspectorDOMAgent.h
index 70d5b94..c00c133 100644
--- a/WebCore/inspector/InspectorDOMAgent.h
+++ b/WebCore/inspector/InspectorDOMAgent.h
@@ -35,9 +35,8 @@
#include "EventListener.h"
#include "EventTarget.h"
#include "InspectorCSSStore.h"
+#include "InspectorValues.h"
#include "NodeList.h"
-#include "ScriptArray.h"
-#include "ScriptObject.h"
#include "ScriptState.h"
#include "Timer.h"
@@ -57,7 +56,7 @@ namespace WebCore {
class CSSStyleSheet;
class Element;
class Event;
- class InspectorFrontend;
+ class InspectorFrontend2;
class MatchJob;
class NameNodeMap;
class Node;
@@ -78,7 +77,7 @@ namespace WebCore {
class InspectorDOMAgent : public EventListener {
public:
- static PassRefPtr<InspectorDOMAgent> create(InspectorCSSStore* cssStore, InspectorFrontend* frontend)
+ static PassRefPtr<InspectorDOMAgent> create(InspectorCSSStore* cssStore, InspectorFrontend2* frontend)
{
return adoptRef(new InspectorDOMAgent(cssStore, frontend));
}
@@ -90,7 +89,7 @@ namespace WebCore {
: 0;
}
- InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend* frontend);
+ InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend2* frontend);
~InspectorDOMAgent();
void reset();
@@ -153,14 +152,14 @@ namespace WebCore {
bool pushDocumentToFrontend();
- ScriptObject buildObjectForAttributeStyles(Element* element);
- ScriptArray buildArrayForCSSRules(Document* ownerDocument, CSSRuleList*);
- ScriptArray buildArrayForPseudoElements(Element* element, bool authorOnly);
+ PassRefPtr<InspectorObject> buildObjectForAttributeStyles(Element* element);
+ PassRefPtr<InspectorArray> buildArrayForCSSRules(Document* ownerDocument, CSSRuleList*);
+ PassRefPtr<InspectorArray> buildArrayForPseudoElements(Element* element, bool authorOnly);
- ScriptObject buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap);
- ScriptArray buildArrayForElementAttributes(Element* element);
- ScriptArray buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap);
- ScriptObject buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node);
+ PassRefPtr<InspectorObject> buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap);
+ PassRefPtr<InspectorArray> buildArrayForElementAttributes(Element* element);
+ PassRefPtr<InspectorArray> buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap);
+ PassRefPtr<InspectorObject> buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node);
// We represent embedded doms as a part of the same hierarchy. Hence we treat children of frame owners differently.
// We also skip whitespace text nodes conditionally. Following methods encapsulate these specifics.
@@ -178,22 +177,22 @@ namespace WebCore {
void onMatchJobsTimer(Timer<InspectorDOMAgent>*);
void reportNodesAsSearchResults(ListHashSet<Node*>& resultCollector);
- ScriptObject buildObjectForStyle(CSSStyleDeclaration*, bool bind);
- void populateObjectWithStyleProperties(CSSStyleDeclaration*, ScriptObject& result);
- ScriptArray buildArrayForDisabledStyleProperties(DisabledStyleDeclaration*);
- ScriptObject buildObjectForRule(Document* ownerDocument, CSSStyleRule*);
- ScriptObject buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet*);
+ PassRefPtr<InspectorObject> buildObjectForStyle(CSSStyleDeclaration*, bool bind);
+ void populateObjectWithStyleProperties(CSSStyleDeclaration*, InspectorObject* result);
+ PassRefPtr<InspectorArray> buildArrayForDisabledStyleProperties(DisabledStyleDeclaration*);
+ PassRefPtr<InspectorObject> buildObjectForRule(Document* ownerDocument, CSSStyleRule*);
+ PassRefPtr<InspectorObject> buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet*);
Vector<String> longhandProperties(CSSStyleDeclaration*, const String& shorthandProperty);
String shorthandValue(CSSStyleDeclaration*, const String& shorthandProperty);
String shorthandPriority(CSSStyleDeclaration*, const String& shorthandProperty);
bool ruleAffectsNode(CSSStyleRule*, Node*);
Node* nodeForPath(const String& path);
- ScriptArray toArray(const Vector<String>& data);
+ PassRefPtr<InspectorArray> toArray(const Vector<String>& data);
void discardBindings();
InspectorCSSStore* m_cssStore;
- InspectorFrontend* m_frontend;
+ InspectorFrontend2* m_frontend;
NodeToIdMap m_documentNodeToIdMap;
// Owns node mappings for dangling nodes.
Vector<NodeToIdMap*> m_danglingNodeToIdMaps;
diff --git a/WebCore/inspector/InspectorFrontend.cpp b/WebCore/inspector/InspectorFrontend.cpp
index fee4630..f9a29b6 100644
--- a/WebCore/inspector/InspectorFrontend.cpp
+++ b/WebCore/inspector/InspectorFrontend.cpp
@@ -297,14 +297,6 @@ void InspectorFrontend::timelineProfilerWasStopped()
callSimpleFunction("timelineProfilerWasStopped");
}
-void InspectorFrontend::addRecordToTimeline(const ScriptObject& record)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("addRecordToTimeline");
- function.appendArgument(record);
- function.call();
-}
-
#if ENABLE(JAVASCRIPT_DEBUGGER)
void InspectorFrontend::attachDebuggerWhenShown()
{
@@ -450,104 +442,6 @@ void InspectorFrontend::didGetProfile(long callId, const ScriptValue& profile)
}
#endif
-void InspectorFrontend::setDocument(const ScriptObject& root)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("setDocument");
- function.appendArgument(root);
- function.call();
-}
-
-void InspectorFrontend::setDetachedRoot(const ScriptObject& root)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("setDetachedRoot");
- function.appendArgument(root);
- function.call();
-}
-
-void InspectorFrontend::setChildNodes(long parentId, const ScriptArray& nodes)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("setChildNodes");
- function.appendArgument(parentId);
- function.appendArgument(nodes);
- function.call();
-}
-
-void InspectorFrontend::childNodeCountUpdated(long id, int newValue)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("childNodeCountUpdated");
- function.appendArgument(id);
- function.appendArgument(newValue);
- function.call();
-}
-
-void InspectorFrontend::childNodeInserted(long parentId, long prevId, const ScriptObject& node)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("childNodeInserted");
- function.appendArgument(parentId);
- function.appendArgument(prevId);
- function.appendArgument(node);
- function.call();
-}
-
-void InspectorFrontend::childNodeRemoved(long parentId, long id)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("childNodeRemoved");
- function.appendArgument(parentId);
- function.appendArgument(id);
- function.call();
-}
-
-void InspectorFrontend::attributesUpdated(long id, const ScriptArray& attributes)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("attributesUpdated");
- function.appendArgument(id);
- function.appendArgument(attributes);
- function.call();
-}
-
-void InspectorFrontend::didRemoveNode(long callId, long nodeId)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didRemoveNode");
- function.appendArgument(callId);
- function.appendArgument(nodeId);
- function.call();
-}
-
-void InspectorFrontend::didChangeTagName(long callId, long nodeId)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didChangeTagName");
- function.appendArgument(callId);
- function.appendArgument(nodeId);
- function.call();
-}
-
-void InspectorFrontend::didGetOuterHTML(long callId, const String& outerHTML)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetOuterHTML");
- function.appendArgument(callId);
- function.appendArgument(outerHTML);
- function.call();
-}
-
-void InspectorFrontend::didSetOuterHTML(long callId, long nodeId)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didSetOuterHTML");
- function.appendArgument(callId);
- function.appendArgument(nodeId);
- function.call();
-}
-
void InspectorFrontend::didPushNodeByPathToFrontend(long callId, long nodeId)
{
ScriptFunctionCall function(m_webInspector, "dispatch");
@@ -557,136 +451,6 @@ void InspectorFrontend::didPushNodeByPathToFrontend(long callId, long nodeId)
function.call();
}
-void InspectorFrontend::didGetChildNodes(long callId)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetChildNodes");
- function.appendArgument(callId);
- function.call();
-}
-
-void InspectorFrontend::didApplyDomChange(long callId, bool success)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didApplyDomChange");
- function.appendArgument(callId);
- function.appendArgument(success);
- function.call();
-}
-
-void InspectorFrontend::didGetEventListenersForNode(long callId, long nodeId, const ScriptArray& listenersArray)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetEventListenersForNode");
- function.appendArgument(callId);
- function.appendArgument(nodeId);
- function.appendArgument(listenersArray);
- function.call();
-}
-
-void InspectorFrontend::didGetStyles(long callId, const ScriptValue& styles)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetStyles");
- function.appendArgument(callId);
- function.appendArgument(styles);
- function.call();
-}
-
-void InspectorFrontend::didGetAllStyles(long callId, const ScriptArray& styles)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetAllStyles");
- function.appendArgument(callId);
- function.appendArgument(styles);
- function.call();
-}
-
-void InspectorFrontend::didGetStyleSheet(long callId, const ScriptValue& styleSheet)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetStyleSheet");
- function.appendArgument(callId);
- function.appendArgument(styleSheet);
- function.call();
-}
-
-void InspectorFrontend::didGetComputedStyle(long callId, const ScriptValue& style)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetComputedStyle");
- function.appendArgument(callId);
- function.appendArgument(style);
- function.call();
-}
-
-void InspectorFrontend::didGetInlineStyle(long callId, const ScriptValue& style)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didGetInlineStyle");
- function.appendArgument(callId);
- function.appendArgument(style);
- function.call();
-}
-
-void InspectorFrontend::didApplyStyleText(long callId, bool success, const ScriptValue& style, const ScriptArray& changedProperties)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didApplyStyleText");
- function.appendArgument(callId);
- function.appendArgument(success);
- function.appendArgument(style);
- function.appendArgument(changedProperties);
- function.call();
-}
-
-void InspectorFrontend::didSetStyleText(long callId, bool success)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didSetStyleText");
- function.appendArgument(callId);
- function.appendArgument(success);
- function.call();
-}
-
-void InspectorFrontend::didSetStyleProperty(long callId, bool success)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didSetStyleProperty");
- function.appendArgument(callId);
- function.appendArgument(success);
- function.call();
-}
-
-void InspectorFrontend::didToggleStyleEnabled(long callId, const ScriptValue& style)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didToggleStyleEnabled");
- function.appendArgument(callId);
- function.appendArgument(style);
- function.call();
-}
-
-void InspectorFrontend::didSetRuleSelector(long callId, const ScriptValue& rule, bool selectorAffectsNode)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didSetRuleSelector");
- function.appendArgument(callId);
- function.appendArgument(rule);
- function.appendArgument(selectorAffectsNode);
- function.call();
-}
-
-void InspectorFrontend::didAddRule(long callId, const ScriptValue& rule, bool selectorAffectsNode)
-{
- ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("didAddRule");
- function.appendArgument(callId);
- function.appendArgument(rule);
- function.appendArgument(selectorAffectsNode);
- function.call();
-}
-
#if ENABLE(WORKERS)
void InspectorFrontend::didCreateWorker(const InspectorWorkerResource& worker)
{
@@ -809,21 +573,40 @@ void InspectorFrontend::didRemoveDOMStorageItem(long callId, bool success)
void InspectorFrontend::updateDOMStorage(long storageId)
{
- ScriptFunctionCall function(m_webInspector, "dispatch");
+ ScriptFunctionCall function(m_webInspector, "dispatch");
function.appendArgument("updateDOMStorage");
function.appendArgument(storageId);
function.call();
}
#endif
-void InspectorFrontend::addNodesToSearchResult(const ScriptArray& nodeIds)
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+void InspectorFrontend::didGetApplicationCaches(long callId, const ScriptValue& applicationCaches)
+{
+ ScriptFunctionCall function(m_webInspector, "dispatch");
+ function.appendArgument("didGetApplicationCaches");
+ function.appendArgument(callId);
+ function.appendArgument(applicationCaches);
+ function.call();
+}
+
+void InspectorFrontend::updateApplicationCacheStatus(int status)
{
ScriptFunctionCall function(m_webInspector, "dispatch");
- function.appendArgument("addNodesToSearchResult");
- function.appendArgument(nodeIds);
+ function.appendArgument("updateApplicationCacheStatus");
+ function.appendArgument(status);
function.call();
}
+void InspectorFrontend::updateNetworkState(bool isNowOnline)
+{
+ ScriptFunctionCall function(m_webInspector, "dispatch");
+ function.appendArgument("updateNetworkState");
+ function.appendArgument(isNowOnline);
+ function.call();
+}
+#endif
+
void InspectorFrontend::contextMenuItemSelected(int itemId)
{
ScriptFunctionCall function(m_webInspector, "dispatch");
diff --git a/WebCore/inspector/InspectorFrontend.h b/WebCore/inspector/InspectorFrontend.h
index e02b661..e32f40c 100644
--- a/WebCore/inspector/InspectorFrontend.h
+++ b/WebCore/inspector/InspectorFrontend.h
@@ -135,37 +135,16 @@ namespace WebCore {
void updateDOMStorage(long storageId);
#endif
- void setDocument(const ScriptObject& root);
- void setDetachedRoot(const ScriptObject& root);
- void setChildNodes(long parentId, const ScriptArray& nodes);
- void childNodeCountUpdated(long id, int newValue);
- void childNodeInserted(long parentId, long prevId, const ScriptObject& node);
- void childNodeRemoved(long parentId, long id);
- void attributesUpdated(long id, const ScriptArray& attributes);
- void didGetChildNodes(long callId);
- void didApplyDomChange(long callId, bool success);
- void didGetEventListenersForNode(long callId, long nodeId, const ScriptArray& listenersArray);
- void didRemoveNode(long callId, long nodeId);
- void didChangeTagName(long callId, long nodeId);
- void didGetOuterHTML(long callId, const String& outerHTML);
- void didSetOuterHTML(long callId, long nodeId);
- void didPushNodeByPathToFrontend(long callId, long nodeId);
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ void updateApplicationCacheStatus(int status);
+ void updateNetworkState(bool isNowOnline);
+ void didGetApplicationCaches(long callId, const ScriptValue& applicationCaches);
+#endif
- void didGetStyles(long callId, const ScriptValue& styles);
- void didGetAllStyles(long callId, const ScriptArray& styles);
- void didGetInlineStyle(long callId, const ScriptValue& style);
- void didGetStyleSheet(long callId, const ScriptValue& styleSheet);
- void didGetComputedStyle(long callId, const ScriptValue& style);
- void didApplyStyleText(long callId, bool success, const ScriptValue& style, const ScriptArray& changedProperties);
- void didSetStyleText(long callId, bool success);
- void didSetStyleProperty(long callId, bool success);
- void didToggleStyleEnabled(long callId, const ScriptValue& style);
- void didSetRuleSelector(long callId, const ScriptValue& rule, bool selectorAffectsNode);
- void didAddRule(long callId, const ScriptValue& rule, bool selectorAffectsNode);
+ void didPushNodeByPathToFrontend(long callId, long nodeId);
void timelineProfilerWasStarted();
void timelineProfilerWasStopped();
- void addRecordToTimeline(const ScriptObject&);
#if ENABLE(WORKERS)
void didCreateWorker(const InspectorWorkerResource&);
@@ -175,14 +154,13 @@ namespace WebCore {
void didGetCookies(long callId, const ScriptArray& cookies, const String& cookiesString);
void didDispatchOnInjectedScript(long callId, SerializedScriptValue* result, bool isException);
- void addNodesToSearchResult(const ScriptArray& nodeIds);
-
void contextMenuItemSelected(int itemId);
void contextMenuCleared();
ScriptState* scriptState() const { return m_webInspector.scriptState(); }
void evaluateForTestInFrontend(long callId, const String& script);
+
private:
void callSimpleFunction(const String& functionName);
ScriptObject m_webInspector;
diff --git a/WebCore/inspector/InspectorFrontend2.idl b/WebCore/inspector/InspectorFrontend2.idl
new file mode 100644
index 0000000..b96d715
--- /dev/null
+++ b/WebCore/inspector/InspectorFrontend2.idl
@@ -0,0 +1,39 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module WebCore {
+
+ interface [Conditional=INSPECTOR, JS] InspectorFrontend2 {
+ // TimelineAgent
+ void addRecordToTimeline(in Object record);
+
+ // DOMAgent
+ void addNodesToSearchResult(in Array nodeIds);
+ void attributesUpdated(in long id, in Array attributes);
+ void childNodeCountUpdated(in long id, in int newValue);
+ void childNodeInserted(in long parentId, in long prevId, in Object node);
+ void childNodeRemoved(in long parentId, in long id);
+ void didAddRule(in long callId, in Value rule, in boolean selectorAffectsNode);
+ void didApplyDomChange(in long callId, in boolean success);
+ void didApplyStyleText(in long callId, in boolean success, in Value style, in Array changedProperties);
+ void didChangeTagName(in long callId, in long nodeId);
+ void didGetAllStyles(in long callId, in Array styles);
+ void didGetChildNodes(in long callId);
+ void didGetComputedStyle(in long callId, in Value style);
+ void didGetEventListenersForNode(in long callId, in long nodeId, in Array listenersArray);
+ void didGetInlineStyle(in long callId, in Value style);
+ void didGetOuterHTML(in long callId, in String outerHTML);
+ void didGetStyleSheet(in long callId, in Value styleSheet);
+ void didGetStyles(in long callId, in Value styles);
+ void didRemoveNode(in long callId, in long nodeId);
+ void didSetOuterHTML(in long callId, in long nodeId);
+ void didSetRuleSelector(in long callId, in Value rule, in boolean selectorAffectsNode);
+ void didSetStyleProperty(in long callId, in boolean success);
+ void didSetStyleText(in long callId, in boolean success);
+ void didToggleStyleEnabled(in long callId, in Value style);
+ void setChildNodes(in long parentId, in Array nodes);
+ void setDetachedRoot(in Object root);
+ void setDocument(in Value root);
+ };
+}
diff --git a/WebCore/inspector/InspectorResource.cpp b/WebCore/inspector/InspectorResource.cpp
index f0e391d..91a57e0 100644
--- a/WebCore/inspector/InspectorResource.cpp
+++ b/WebCore/inspector/InspectorResource.cpp
@@ -39,6 +39,7 @@
#include "DocumentLoader.h"
#include "Frame.h"
#include "InspectorFrontend.h"
+#include "ResourceLoadTiming.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include "TextEncoding.h"
@@ -62,6 +63,7 @@ InspectorResource::InspectorResource(unsigned long identifier, DocumentLoader* l
, m_endTime(-1.0)
, m_loadEventTime(-1.0)
, m_domContentEventTime(-1.0)
+ , m_connectionID(0)
, m_isMainResource(false)
{
}
@@ -128,6 +130,16 @@ void InspectorResource::updateResponse(const ResourceResponse& response)
m_responseStatusText = response.httpStatusText();
m_suggestedFilename = response.suggestedFilename();
+ m_connectionID = response.connectionID();
+ m_loadTiming = response.resourceLoadTiming();
+ m_cached = response.wasCached();
+
+ if (!m_cached && m_loadTiming && m_loadTiming->requestTime)
+ m_responseReceivedTime = m_loadTiming->requestTime + m_loadTiming->receiveHeadersEnd / 1000.0;
+ else
+ m_responseReceivedTime = currentTime();
+
+ m_changes.set(TimingChange);
m_changes.set(ResponseChange);
m_changes.set(TypeChange);
}
@@ -140,7 +152,6 @@ static void populateHeadersObject(ScriptObject* object, const HTTPHeaderMap& hea
}
}
-
void InspectorResource::updateScriptObject(InspectorFrontend* frontend)
{
if (m_changes.hasChange(NoChange))
@@ -160,7 +171,6 @@ void InspectorResource::updateScriptObject(InspectorFrontend* frontend)
jsonObject.set("requestMethod", m_requestMethod);
jsonObject.set("requestFormData", m_requestFormData);
jsonObject.set("didRequestChange", true);
- jsonObject.set("cached", m_cached);
}
if (m_changes.hasChange(ResponseChange)) {
@@ -172,6 +182,10 @@ void InspectorResource::updateScriptObject(InspectorFrontend* frontend)
ScriptObject responseHeaders = frontend->newScriptObject();
populateHeadersObject(&responseHeaders, m_responseHeaderFields);
jsonObject.set("responseHeaders", responseHeaders);
+ jsonObject.set("connectionID", m_connectionID);
+ jsonObject.set("cached", m_cached);
+ if (m_loadTiming && !m_cached)
+ jsonObject.set("timing", buildObjectForTiming(frontend, m_loadTiming.get()));
jsonObject.set("didResponseChange", true);
}
@@ -335,12 +349,6 @@ void InspectorResource::startTiming()
m_changes.set(TimingChange);
}
-void InspectorResource::markResponseReceivedTime()
-{
- m_responseReceivedTime = currentTime();
- m_changes.set(TimingChange);
-}
-
void InspectorResource::endTiming()
{
m_endTime = currentTime();
@@ -379,6 +387,19 @@ void InspectorResource::addLength(int lengthReceived)
m_changes.set(TimingChange);
}
+ScriptObject InspectorResource::buildObjectForTiming(InspectorFrontend* frontend, ResourceLoadTiming* timing)
+{
+ ScriptObject jsonObject = frontend->newScriptObject();
+ jsonObject.set("requestTime", timing->requestTime);
+ jsonObject.set("proxyDuration", timing->proxyStart == -1 ? -1 : (timing->proxyEnd - timing->proxyStart) / 1000.0);
+ jsonObject.set("dnsDuration", timing->dnsStart == -1 ? -1 : (timing->dnsEnd - timing->dnsStart) / 1000.0);
+ jsonObject.set("connectDuration", timing->connectStart == -1 ? -1 : (timing->connectEnd - timing->connectStart) / 1000.0);
+ jsonObject.set("sendDuration", (timing->sendEnd - timing->sendStart) / 1000.0);
+ jsonObject.set("waitDuration", (timing->receiveHeadersEnd - timing->sendEnd) / 1000.0);
+ jsonObject.set("sslDuration", (timing->sslEnd - timing->sslStart) / 1000.0);
+ return jsonObject;
+}
+
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
diff --git a/WebCore/inspector/InspectorResource.h b/WebCore/inspector/InspectorResource.h
index 9b91889..ed9ec37 100644
--- a/WebCore/inspector/InspectorResource.h
+++ b/WebCore/inspector/InspectorResource.h
@@ -49,9 +49,9 @@ namespace WebCore {
class DocumentLoader;
class InspectorFrontend;
class Frame;
- class ResourceResponse;
-
+ class ResourceLoadTiming;
class ResourceRequest;
+ class ResourceResponse;
class InspectorResource : public RefCounted<InspectorResource> {
public:
@@ -102,7 +102,6 @@ namespace WebCore {
String requestFormData() const { return m_requestFormData; }
void startTiming();
- void markResponseReceivedTime();
void markLoadEventTime();
void markDOMContentEventTime();
void endTiming();
@@ -152,6 +151,8 @@ namespace WebCore {
Type cachedResourceType() const;
CachedResource* cachedResource() const;
+ ScriptObject buildObjectForTiming(InspectorFrontend*, ResourceLoadTiming*);
+
unsigned long m_identifier;
RefPtr<DocumentLoader> m_loader;
RefPtr<Frame> m_frame;
@@ -172,6 +173,8 @@ namespace WebCore {
double m_endTime;
double m_loadEventTime;
double m_domContentEventTime;
+ unsigned m_connectionID;
+ RefPtr<ResourceLoadTiming> m_loadTiming;
ScriptString m_overrideContent;
Type m_overrideContentType;
Changes m_changes;
diff --git a/WebCore/inspector/InspectorTimelineAgent.cpp b/WebCore/inspector/InspectorTimelineAgent.cpp
index ab53319..31513d1 100644
--- a/WebCore/inspector/InspectorTimelineAgent.cpp
+++ b/WebCore/inspector/InspectorTimelineAgent.cpp
@@ -34,8 +34,8 @@
#if ENABLE(INSPECTOR)
#include "Event.h"
-#include "InspectorFrontend.h"
#include "IntRect.h"
+#include "RemoteInspectorFrontend2.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include "TimelineRecordFactory.h"
@@ -46,7 +46,7 @@ namespace WebCore {
int InspectorTimelineAgent::s_instanceCount = 0;
-InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend)
+InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend2* frontend)
: m_frontend(frontend)
{
++s_instanceCount;
@@ -62,10 +62,10 @@ void InspectorTimelineAgent::pushGCEventRecords()
GCEvents events = m_gcEvents;
m_gcEvents.clear();
for (GCEvents::iterator i = events.begin(); i != events.end(); ++i) {
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i->startTime);
- record.set("data", TimelineRecordFactory::createGCEventData(m_frontend, i->collectedBytes));
- record.set("endTime", i->endTime);
- addRecordToTimeline(record, GCEventTimelineRecordType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(i->startTime);
+ record->set("data", TimelineRecordFactory::createGCEventData(i->collectedBytes));
+ record->setNumber("endTime", i->endTime);
+ addRecordToTimeline(record.release(), GCEventTimelineRecordType);
}
}
@@ -83,7 +83,7 @@ InspectorTimelineAgent::~InspectorTimelineAgent()
void InspectorTimelineAgent::willCallFunction(const String& scriptName, int scriptLine)
{
- pushCurrentRecord(TimelineRecordFactory::createFunctionCallData(m_frontend, scriptName, scriptLine), FunctionCallTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createFunctionCallData(scriptName, scriptLine), FunctionCallTimelineRecordType);
}
void InspectorTimelineAgent::didCallFunction()
@@ -93,7 +93,7 @@ void InspectorTimelineAgent::didCallFunction()
void InspectorTimelineAgent::willDispatchEvent(const Event& event)
{
- pushCurrentRecord(TimelineRecordFactory::createEventDispatchData(m_frontend, event),
+ pushCurrentRecord(TimelineRecordFactory::createEventDispatchData(event),
EventDispatchTimelineRecordType);
}
@@ -104,7 +104,7 @@ void InspectorTimelineAgent::didDispatchEvent()
void InspectorTimelineAgent::willLayout()
{
- pushCurrentRecord(m_frontend->newScriptObject(), LayoutTimelineRecordType);
+ pushCurrentRecord(InspectorObject::create(), LayoutTimelineRecordType);
}
void InspectorTimelineAgent::didLayout()
@@ -114,7 +114,7 @@ void InspectorTimelineAgent::didLayout()
void InspectorTimelineAgent::willRecalculateStyle()
{
- pushCurrentRecord(m_frontend->newScriptObject(), RecalculateStylesTimelineRecordType);
+ pushCurrentRecord(InspectorObject::create(), RecalculateStylesTimelineRecordType);
}
void InspectorTimelineAgent::didRecalculateStyle()
@@ -124,7 +124,7 @@ void InspectorTimelineAgent::didRecalculateStyle()
void InspectorTimelineAgent::willPaint(const IntRect& rect)
{
- pushCurrentRecord(TimelineRecordFactory::createPaintData(m_frontend, rect), PaintTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createPaintData(rect), PaintTimelineRecordType);
}
void InspectorTimelineAgent::didPaint()
@@ -134,14 +134,14 @@ void InspectorTimelineAgent::didPaint()
void InspectorTimelineAgent::willWriteHTML(unsigned int length, unsigned int startLine)
{
- pushCurrentRecord(TimelineRecordFactory::createParseHTMLData(m_frontend, length, startLine), ParseHTMLTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createParseHTMLData(length, startLine), ParseHTMLTimelineRecordType);
}
void InspectorTimelineAgent::didWriteHTML(unsigned int endLine)
{
if (!m_recordStack.isEmpty()) {
TimelineRecordEntry entry = m_recordStack.last();
- entry.data.set("endLine", endLine);
+ entry.data->setNumber("endLine", endLine);
didCompleteCurrentRecord(ParseHTMLTimelineRecordType);
}
}
@@ -149,22 +149,22 @@ void InspectorTimelineAgent::didWriteHTML(unsigned int endLine)
void InspectorTimelineAgent::didInstallTimer(int timerId, int timeout, bool singleShot)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- record.set("data", TimelineRecordFactory::createTimerInstallData(m_frontend, timerId, timeout, singleShot));
- addRecordToTimeline(record, TimerInstallTimelineRecordType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->set("data", TimelineRecordFactory::createTimerInstallData(timerId, timeout, singleShot));
+ addRecordToTimeline(record.release(), TimerInstallTimelineRecordType);
}
void InspectorTimelineAgent::didRemoveTimer(int timerId)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- record.set("data", TimelineRecordFactory::createGenericTimerData(m_frontend, timerId));
- addRecordToTimeline(record, TimerRemoveTimelineRecordType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->set("data", TimelineRecordFactory::createGenericTimerData(timerId));
+ addRecordToTimeline(record.release(), TimerRemoveTimelineRecordType);
}
void InspectorTimelineAgent::willFireTimer(int timerId)
{
- pushCurrentRecord(TimelineRecordFactory::createGenericTimerData(m_frontend, timerId), TimerFireTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createGenericTimerData(timerId), TimerFireTimelineRecordType);
}
void InspectorTimelineAgent::didFireTimer()
@@ -174,7 +174,7 @@ void InspectorTimelineAgent::didFireTimer()
void InspectorTimelineAgent::willChangeXHRReadyState(const String& url, int readyState)
{
- pushCurrentRecord(TimelineRecordFactory::createXHRReadyStateChangeData(m_frontend, url, readyState), XHRReadyStateChangeRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createXHRReadyStateChangeData(url, readyState), XHRReadyStateChangeRecordType);
}
void InspectorTimelineAgent::didChangeXHRReadyState()
@@ -184,7 +184,7 @@ void InspectorTimelineAgent::didChangeXHRReadyState()
void InspectorTimelineAgent::willLoadXHR(const String& url)
{
- pushCurrentRecord(TimelineRecordFactory::createXHRLoadData(m_frontend, url), XHRLoadRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createXHRLoadData(url), XHRLoadRecordType);
}
void InspectorTimelineAgent::didLoadXHR()
@@ -194,7 +194,7 @@ void InspectorTimelineAgent::didLoadXHR()
void InspectorTimelineAgent::willEvaluateScript(const String& url, int lineNumber)
{
- pushCurrentRecord(TimelineRecordFactory::createEvaluateScriptData(m_frontend, url, lineNumber), EvaluateScriptTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createEvaluateScriptData(url, lineNumber), EvaluateScriptTimelineRecordType);
}
void InspectorTimelineAgent::didEvaluateScript()
@@ -205,26 +205,26 @@ void InspectorTimelineAgent::didEvaluateScript()
void InspectorTimelineAgent::didScheduleResourceRequest(const String& url)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- record.set("data", TimelineRecordFactory::createScheduleResourceRequestData(m_frontend, url));
- record.set("type", ScheduleResourceRequestTimelineRecordType);
- addRecordToTimeline(record, ScheduleResourceRequestTimelineRecordType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->set("data", TimelineRecordFactory::createScheduleResourceRequestData(url));
+ record->setNumber("type", ScheduleResourceRequestTimelineRecordType);
+ addRecordToTimeline(record.release(), ScheduleResourceRequestTimelineRecordType);
}
void InspectorTimelineAgent::willSendResourceRequest(unsigned long identifier, bool isMainResource,
const ResourceRequest& request)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- record.set("data", TimelineRecordFactory::createResourceSendRequestData(m_frontend, identifier, isMainResource, request));
- record.set("type", ResourceSendRequestTimelineRecordType);
- setHeapSizeStatistic(record);
- m_frontend->addRecordToTimeline(record);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->set("data", TimelineRecordFactory::createResourceSendRequestData(identifier, isMainResource, request));
+ record->setNumber("type", ResourceSendRequestTimelineRecordType);
+ setHeapSizeStatistic(record.get());
+ m_frontend->addRecordToTimeline(record.release());
}
void InspectorTimelineAgent::willReceiveResourceData(unsigned long identifier)
{
- pushCurrentRecord(TimelineRecordFactory::createReceiveResourceData(m_frontend, identifier), ReceiveResourceDataTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createReceiveResourceData(identifier), ReceiveResourceDataTimelineRecordType);
}
void InspectorTimelineAgent::didReceiveResourceData()
@@ -234,7 +234,7 @@ void InspectorTimelineAgent::didReceiveResourceData()
void InspectorTimelineAgent::willReceiveResourceResponse(unsigned long identifier, const ResourceResponse& response)
{
- pushCurrentRecord(TimelineRecordFactory::createResourceReceiveResponseData(m_frontend, identifier, response), ResourceReceiveResponseTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createResourceReceiveResponseData(identifier, response), ResourceReceiveResponseTimelineRecordType);
}
void InspectorTimelineAgent::didReceiveResourceResponse()
@@ -245,33 +245,33 @@ void InspectorTimelineAgent::didReceiveResourceResponse()
void InspectorTimelineAgent::didFinishLoadingResource(unsigned long identifier, bool didFail)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- record.set("data", TimelineRecordFactory::createResourceFinishData(m_frontend, identifier, didFail));
- record.set("type", ResourceFinishTimelineRecordType);
- setHeapSizeStatistic(record);
- m_frontend->addRecordToTimeline(record);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->set("data", TimelineRecordFactory::createResourceFinishData(identifier, didFail));
+ record->setNumber("type", ResourceFinishTimelineRecordType);
+ setHeapSizeStatistic(record.get());
+ m_frontend->addRecordToTimeline(record.release());
}
void InspectorTimelineAgent::didMarkTimeline(const String& message)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- record.set("data", TimelineRecordFactory::createMarkTimelineData(m_frontend, message));
- addRecordToTimeline(record, MarkTimelineRecordType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->set("data", TimelineRecordFactory::createMarkTimelineData(message));
+ addRecordToTimeline(record.release(), MarkTimelineRecordType);
}
void InspectorTimelineAgent::didMarkDOMContentEvent()
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- addRecordToTimeline(record, MarkDOMContentEventType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ addRecordToTimeline(record.release(), MarkDOMContentEventType);
}
void InspectorTimelineAgent::didMarkLoadEvent()
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- addRecordToTimeline(record, MarkLoadEventType);
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ addRecordToTimeline(record.release(), MarkLoadEventType);
}
void InspectorTimelineAgent::reset()
@@ -279,32 +279,33 @@ void InspectorTimelineAgent::reset()
m_recordStack.clear();
}
-void InspectorTimelineAgent::resetFrontendProxyObject(InspectorFrontend* frontend)
+void InspectorTimelineAgent::resetFrontendProxyObject(InspectorFrontend2* frontend)
{
ASSERT(frontend);
reset();
m_frontend = frontend;
}
-void InspectorTimelineAgent::addRecordToTimeline(ScriptObject record, TimelineRecordType type)
+void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<InspectorObject> prpRecord, TimelineRecordType type)
{
- record.set("type", type);
- setHeapSizeStatistic(record);
+ RefPtr<InspectorObject> record(prpRecord);
+ record->setNumber("type", type);
+ setHeapSizeStatistic(record.get());
if (m_recordStack.isEmpty())
- m_frontend->addRecordToTimeline(record);
+ m_frontend->addRecordToTimeline(record.release());
else {
TimelineRecordEntry parent = m_recordStack.last();
- parent.children.set(parent.children.length(), record);
+ parent.children->push(record.release());
}
}
-void InspectorTimelineAgent::setHeapSizeStatistic(ScriptObject record)
+void InspectorTimelineAgent::setHeapSizeStatistic(InspectorObject* record)
{
size_t usedHeapSize = 0;
size_t totalHeapSize = 0;
ScriptGCEvent::getHeapSize(usedHeapSize, totalHeapSize);
- record.set("usedHeapSize", usedHeapSize);
- record.set("totalHeapSize", totalHeapSize);
+ record->setNumber("usedHeapSize", usedHeapSize);
+ record->setNumber("totalHeapSize", totalHeapSize);
}
void InspectorTimelineAgent::didCompleteCurrentRecord(TimelineRecordType type)
@@ -316,18 +317,18 @@ void InspectorTimelineAgent::didCompleteCurrentRecord(TimelineRecordType type)
TimelineRecordEntry entry = m_recordStack.last();
m_recordStack.removeLast();
ASSERT(entry.type == type);
- entry.record.set("data", entry.data);
- entry.record.set("children", entry.children);
- entry.record.set("endTime", WTF::currentTimeMS());
+ entry.record->set("data", entry.data);
+ entry.record->set("children", entry.children);
+ entry.record->setNumber("endTime", WTF::currentTimeMS());
addRecordToTimeline(entry.record, type);
}
}
-void InspectorTimelineAgent::pushCurrentRecord(ScriptObject data, TimelineRecordType type)
+void InspectorTimelineAgent::pushCurrentRecord(PassRefPtr<InspectorObject> data, TimelineRecordType type)
{
pushGCEventRecords();
- ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
- m_recordStack.append(TimelineRecordEntry(record, data, m_frontend->newScriptArray(), type));
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ m_recordStack.append(TimelineRecordEntry(record.release(), data, InspectorArray::create(), type));
}
} // namespace WebCore
diff --git a/WebCore/inspector/InspectorTimelineAgent.h b/WebCore/inspector/InspectorTimelineAgent.h
index fe334be..9a5cb98 100644
--- a/WebCore/inspector/InspectorTimelineAgent.h
+++ b/WebCore/inspector/InspectorTimelineAgent.h
@@ -34,16 +34,15 @@
#if ENABLE(INSPECTOR)
#include "Document.h"
+#include "InspectorValues.h"
#include "ScriptExecutionContext.h"
#include "ScriptGCEvent.h"
#include "ScriptGCEventListener.h"
-#include "ScriptObject.h"
-#include "ScriptArray.h"
#include <wtf/Vector.h>
namespace WebCore {
class Event;
-class InspectorFrontend;
+class InspectorFrontend2;
class IntRect;
class ResourceRequest;
class ResourceResponse;
@@ -75,11 +74,11 @@ enum TimelineRecordType {
class InspectorTimelineAgent : ScriptGCEventListener, public Noncopyable {
public:
- InspectorTimelineAgent(InspectorFrontend* frontend);
+ InspectorTimelineAgent(InspectorFrontend2* frontend);
~InspectorTimelineAgent();
void reset();
- void resetFrontendProxyObject(InspectorFrontend*);
+ void resetFrontendProxyObject(InspectorFrontend2*);
// Methods called from WebCore.
void willCallFunction(const String& scriptName, int scriptLine);
@@ -134,26 +133,26 @@ public:
private:
struct TimelineRecordEntry {
- TimelineRecordEntry(ScriptObject record, ScriptObject data, ScriptArray children, TimelineRecordType type)
+ TimelineRecordEntry(PassRefPtr<InspectorObject> record, PassRefPtr<InspectorObject> data, PassRefPtr<InspectorArray> children, TimelineRecordType type)
: record(record), data(data), children(children), type(type)
{
}
- ScriptObject record;
- ScriptObject data;
- ScriptArray children;
+ RefPtr<InspectorObject> record;
+ RefPtr<InspectorObject> data;
+ RefPtr<InspectorArray> children;
TimelineRecordType type;
};
- void pushCurrentRecord(ScriptObject, TimelineRecordType);
- void setHeapSizeStatistic(ScriptObject record);
+ void pushCurrentRecord(PassRefPtr<InspectorObject>, TimelineRecordType);
+ void setHeapSizeStatistic(InspectorObject* record);
void didCompleteCurrentRecord(TimelineRecordType);
- void addRecordToTimeline(ScriptObject, TimelineRecordType);
+ void addRecordToTimeline(PassRefPtr<InspectorObject>, TimelineRecordType);
void pushGCEventRecords();
- InspectorFrontend* m_frontend;
+ InspectorFrontend2* m_frontend;
Vector<TimelineRecordEntry> m_recordStack;
static int s_instanceCount;
diff --git a/WebCore/inspector/TimelineRecordFactory.cpp b/WebCore/inspector/TimelineRecordFactory.cpp
index bdb5f3d..8b4a97f 100644
--- a/WebCore/inspector/TimelineRecordFactory.cpp
+++ b/WebCore/inspector/TimelineRecordFactory.cpp
@@ -35,152 +35,152 @@
#include "Event.h"
#include "InspectorFrontend.h"
+#include "InspectorValues.h"
#include "IntRect.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include "ScriptArray.h"
#include "ScriptCallStack.h"
-#include "ScriptObject.h"
namespace WebCore {
-ScriptObject TimelineRecordFactory::createGenericRecord(InspectorFrontend* frontend, double startTime)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createGenericRecord(double startTime)
{
- ScriptObject record = frontend->newScriptObject();
- record.set("startTime", startTime);
+ RefPtr<InspectorObject> record = InspectorObject::create();
+ record->setNumber("startTime", startTime);
- ScriptArray stackTrace;
- if (ScriptCallStack::stackTrace(5, frontend->scriptState(), stackTrace))
- record.set("stackTrace", stackTrace);
- return record;
+ RefPtr<InspectorArray> stackTrace = InspectorArray::create();
+ if (ScriptCallStack::stackTrace(5, stackTrace))
+ record->set("stackTrace", stackTrace);
+ return record.release();
}
-ScriptObject TimelineRecordFactory::createGCEventData(InspectorFrontend* frontend, const size_t usedHeapSizeDelta)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createGCEventData(const size_t usedHeapSizeDelta)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("usedHeapSizeDelta", usedHeapSizeDelta);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("usedHeapSizeDelta", usedHeapSizeDelta);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createFunctionCallData(InspectorFrontend* frontend, const String& scriptName, int scriptLine)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createFunctionCallData(const String& scriptName, int scriptLine)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("scriptName", scriptName);
- data.set("scriptLine", scriptLine);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("scriptName", scriptName);
+ data->setNumber("scriptLine", scriptLine);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createEventDispatchData(InspectorFrontend* frontend, const Event& event)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createEventDispatchData(const Event& event)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("type", event.type().string());
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("type", event.type().string());
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createGenericTimerData(InspectorFrontend* frontend, int timerId)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createGenericTimerData(int timerId)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("timerId", timerId);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("timerId", timerId);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createTimerInstallData(InspectorFrontend* frontend, int timerId, int timeout, bool singleShot)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createTimerInstallData(int timerId, int timeout, bool singleShot)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("timerId", timerId);
- data.set("timeout", timeout);
- data.set("singleShot", singleShot);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("timerId", timerId);
+ data->setNumber("timeout", timeout);
+ data->setBool("singleShot", singleShot);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createXHRReadyStateChangeData(InspectorFrontend* frontend, const String& url, int readyState)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createXHRReadyStateChangeData(const String& url, int readyState)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("url", url);
- data.set("readyState", readyState);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("url", url);
+ data->setNumber("readyState", readyState);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createXHRLoadData(InspectorFrontend* frontend, const String& url)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createXHRLoadData(const String& url)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("url", url);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("url", url);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createEvaluateScriptData(InspectorFrontend* frontend, const String& url, double lineNumber)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createEvaluateScriptData(const String& url, double lineNumber)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("url", url);
- data.set("lineNumber", lineNumber);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("url", url);
+ data->setNumber("lineNumber", lineNumber);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createMarkTimelineData(InspectorFrontend* frontend, const String& message)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createMarkTimelineData(const String& message)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("message", message);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("message", message);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createScheduleResourceRequestData(InspectorFrontend* frontend, const String& url)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createScheduleResourceRequestData(const String& url)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("url", url);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setString("url", url);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createResourceSendRequestData(InspectorFrontend* frontend, unsigned long identifier, bool isMainResource, const ResourceRequest& request)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceSendRequestData(unsigned long identifier, bool isMainResource, const ResourceRequest& request)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("identifier", identifier);
- data.set("url", request.url().string());
- data.set("requestMethod", request.httpMethod());
- data.set("isMainResource", isMainResource);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("identifier", identifier);
+ data->setString("url", request.url().string());
+ data->setString("requestMethod", request.httpMethod());
+ data->setBool("isMainResource", isMainResource);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createResourceReceiveResponseData(InspectorFrontend* frontend, unsigned long identifier, const ResourceResponse& response)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceReceiveResponseData(unsigned long identifier, const ResourceResponse& response)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("identifier", identifier);
- data.set("statusCode", response.httpStatusCode());
- data.set("mimeType", response.mimeType());
- data.set("expectedContentLength", response.expectedContentLength());
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("identifier", identifier);
+ data->setNumber("statusCode", response.httpStatusCode());
+ data->setString("mimeType", response.mimeType());
+ data->setNumber("expectedContentLength", response.expectedContentLength());
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createResourceFinishData(InspectorFrontend* frontend, unsigned long identifier, bool didFail)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceFinishData(unsigned long identifier, bool didFail)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("identifier", identifier);
- data.set("didFail", didFail);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("identifier", identifier);
+ data->setBool("didFail", didFail);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createReceiveResourceData(InspectorFrontend* frontend, unsigned long identifier)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createReceiveResourceData(unsigned long identifier)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("identifier", identifier);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("identifier", identifier);
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createPaintData(InspectorFrontend* frontend, const IntRect& rect)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createPaintData(const IntRect& rect)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("x", rect.x());
- data.set("y", rect.y());
- data.set("width", rect.width());
- data.set("height", rect.height());
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("x", rect.x());
+ data->setNumber("y", rect.y());
+ data->setNumber("width", rect.width());
+ data->setNumber("height", rect.height());
+ return data.release();
}
-ScriptObject TimelineRecordFactory::createParseHTMLData(InspectorFrontend* frontend, unsigned int length, unsigned int startLine)
+PassRefPtr<InspectorObject> TimelineRecordFactory::createParseHTMLData(unsigned int length, unsigned int startLine)
{
- ScriptObject data = frontend->newScriptObject();
- data.set("length", length);
- data.set("startLine", startLine);
- return data;
+ RefPtr<InspectorObject> data = InspectorObject::create();
+ data->setNumber("length", length);
+ data->setNumber("startLine", startLine);
+ return data.release();
}
} // namespace WebCore
diff --git a/WebCore/inspector/TimelineRecordFactory.h b/WebCore/inspector/TimelineRecordFactory.h
index f905ecc..52dda25 100644
--- a/WebCore/inspector/TimelineRecordFactory.h
+++ b/WebCore/inspector/TimelineRecordFactory.h
@@ -37,47 +37,47 @@ namespace WebCore {
class Event;
class InspectorFrontend;
+ class InspectorObject;
class IntRect;
class ResourceRequest;
class ResourceResponse;
- class ScriptObject;
class TimelineRecordFactory {
public:
- static ScriptObject createGenericRecord(InspectorFrontend*, double startTime);
+ static PassRefPtr<InspectorObject> createGenericRecord(double startTime);
- static ScriptObject createGCEventData(InspectorFrontend* frontend, const size_t usedHeapSizeDelta);
+ static PassRefPtr<InspectorObject> createGCEventData(const size_t usedHeapSizeDelta);
- static ScriptObject createFunctionCallData(InspectorFrontend*, const String& scriptName, int scriptLine);
+ static PassRefPtr<InspectorObject> createFunctionCallData(const String& scriptName, int scriptLine);
- static ScriptObject createEventDispatchData(InspectorFrontend*, const Event&);
+ static PassRefPtr<InspectorObject> createEventDispatchData(const Event&);
- static ScriptObject createGenericTimerData(InspectorFrontend*, int timerId);
+ static PassRefPtr<InspectorObject> createGenericTimerData(int timerId);
- static ScriptObject createTimerInstallData(InspectorFrontend*, int timerId, int timeout, bool singleShot);
+ static PassRefPtr<InspectorObject> createTimerInstallData(int timerId, int timeout, bool singleShot);
- static ScriptObject createXHRReadyStateChangeData(InspectorFrontend*, const String& url, int readyState);
+ static PassRefPtr<InspectorObject> createXHRReadyStateChangeData(const String& url, int readyState);
- static ScriptObject createXHRLoadData(InspectorFrontend*, const String& url);
+ static PassRefPtr<InspectorObject> createXHRLoadData(const String& url);
- static ScriptObject createEvaluateScriptData(InspectorFrontend*, const String&, double lineNumber);
+ static PassRefPtr<InspectorObject> createEvaluateScriptData(const String&, double lineNumber);
- static ScriptObject createMarkTimelineData(InspectorFrontend*, const String&);
+ static PassRefPtr<InspectorObject> createMarkTimelineData(const String&);
- static ScriptObject createResourceSendRequestData(InspectorFrontend*, unsigned long identifier,
+ static PassRefPtr<InspectorObject> createResourceSendRequestData(unsigned long identifier,
bool isMainResource, const ResourceRequest&);
- static ScriptObject createScheduleResourceRequestData(InspectorFrontend*, const String&);
+ static PassRefPtr<InspectorObject> createScheduleResourceRequestData(const String&);
- static ScriptObject createResourceReceiveResponseData(InspectorFrontend*, unsigned long identifier, const ResourceResponse&);
+ static PassRefPtr<InspectorObject> createResourceReceiveResponseData(unsigned long identifier, const ResourceResponse&);
- static ScriptObject createReceiveResourceData(InspectorFrontend*, unsigned long identifier);
+ static PassRefPtr<InspectorObject> createReceiveResourceData(unsigned long identifier);
- static ScriptObject createResourceFinishData(InspectorFrontend*, unsigned long identifier, bool didFail);
+ static PassRefPtr<InspectorObject> createResourceFinishData(unsigned long identifier, bool didFail);
- static ScriptObject createPaintData(InspectorFrontend*, const IntRect&);
+ static PassRefPtr<InspectorObject> createPaintData(const IntRect&);
- static ScriptObject createParseHTMLData(InspectorFrontend*, unsigned int length, unsigned int startLine);
+ static PassRefPtr<InspectorObject> createParseHTMLData(unsigned int length, unsigned int startLine);
private:
TimelineRecordFactory() { }
diff --git a/WebCore/inspector/front-end/AbstractTimelinePanel.js b/WebCore/inspector/front-end/AbstractTimelinePanel.js
index eb9ea88..1b5f6ce 100644
--- a/WebCore/inspector/front-end/AbstractTimelinePanel.js
+++ b/WebCore/inspector/front-end/AbstractTimelinePanel.js
@@ -28,9 +28,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.AbstractTimelinePanel = function()
+WebInspector.AbstractTimelinePanel = function(name)
{
- WebInspector.Panel.call(this);
+ WebInspector.Panel.call(this, name);
this._items = [];
this._staleItems = [];
}
diff --git a/WebCore/inspector/front-end/ApplicationCacheItemsView.js b/WebCore/inspector/front-end/ApplicationCacheItemsView.js
new file mode 100644
index 0000000..029f83b
--- /dev/null
+++ b/WebCore/inspector/front-end/ApplicationCacheItemsView.js
@@ -0,0 +1,259 @@
+/*
+ * 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.
+ */
+
+WebInspector.ApplicationCacheItemsView = function(treeElement, appcacheDomain)
+{
+ WebInspector.View.call(this);
+
+ this.element.addStyleClass("storage-view");
+ this.element.addStyleClass("table");
+
+ // FIXME: Delete Button semantics are not yet defined.
+ // FIXME: Needs better tooltip. (Localized)
+ this.deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item");
+ this.deleteButton.visible = false;
+ this.deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false);
+
+ // FIXME: Refresh Button semantics are not yet defined.
+ // FIXME: Needs better tooltip. (Localized)
+ this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
+ this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
+
+ this.connectivityIcon = document.createElement("img");
+ this.connectivityIcon.className = "storage-application-cache-connectivity-icon";
+ this.connectivityIcon.src = "";
+ this.connectivityMessage = document.createElement("span");
+ this.connectivityMessage.className = "storage-application-cache-connectivity";
+ this.connectivityMessage.textContent = "";
+
+ this.divider = document.createElement("span");
+ this.divider.className = "status-bar-item status-bar-divider";
+
+ this.statusIcon = document.createElement("img");
+ this.statusIcon.className = "storage-application-cache-status-icon";
+ this.statusIcon.src = "";
+ this.statusMessage = document.createElement("span");
+ this.statusMessage.className = "storage-application-cache-status";
+ this.statusMessage.textContent = "";
+
+ this._treeElement = treeElement;
+ this._appcacheDomain = appcacheDomain;
+
+ this._emptyMsgElement = document.createElement("div");
+ this._emptyMsgElement.className = "storage-table-empty";
+ this._emptyMsgElement.textContent = WebInspector.UIString("No Application Cache information available.");
+ this.element.appendChild(this._emptyMsgElement);
+
+ this.updateStatus(applicationCache.UNCACHED);
+}
+
+WebInspector.ApplicationCacheItemsView.prototype = {
+ get statusBarItems()
+ {
+ return [
+ this.refreshButton.element, this.deleteButton.element,
+ this.connectivityIcon, this.connectivityMessage, this.divider,
+ this.statusIcon, this.statusMessage
+ ];
+ },
+
+ show: function(parentElement)
+ {
+ WebInspector.View.prototype.show.call(this, parentElement);
+ this.updateNetworkState(navigator.onLine);
+ this._update();
+ },
+
+ hide: function()
+ {
+ WebInspector.View.prototype.hide.call(this);
+ this.deleteButton.visible = false;
+ },
+
+ updateStatus: function(status)
+ {
+ var statusInformation = {};
+ statusInformation[applicationCache.UNCACHED] = { src: "Images/warningOrangeDot.png", text: "UNCACHED" };
+ statusInformation[applicationCache.IDLE] = { src: "Images/warningOrangeDot.png", text: "IDLE" };
+ statusInformation[applicationCache.CHECKING] = { src: "Images/successGreenDot.png", text: "CHECKING" };
+ statusInformation[applicationCache.DOWNLOADING] = { src: "Images/successGreenDot.png", text: "DOWNLOADING" };
+ statusInformation[applicationCache.UPDATEREADY] = { src: "Images/successGreenDot.png", text: "UPDATEREADY" };
+ statusInformation[applicationCache.OBSOLETE] = { src: "Images/errorRedDot.png", text: "OBSOLETE" };
+
+ var info = statusInformation[status];
+ if (!info) {
+ console.error("Unknown Application Cache Status was Not Handled: %d", status);
+ return;
+ }
+
+ this.statusIcon.src = info.src;
+ this.statusMessage.textContent = info.text;
+ },
+
+ updateNetworkState: function(isNowOnline)
+ {
+ if (isNowOnline) {
+ this.connectivityIcon.src = "Images/successGreenDot.png";
+ this.connectivityMessage.textContent = WebInspector.UIString("Online");
+ } else {
+ this.connectivityIcon.src = "Images/errorRedDot.png";
+ this.connectivityMessage.textContent = WebInspector.UIString("Offline");
+ }
+ },
+
+ _update: function()
+ {
+ WebInspector.ApplicationCache.getApplicationCachesAsync(this._updateCallback.bind(this));
+ },
+
+ _updateCallback: function(applicationCaches)
+ {
+ // FIXME: applicationCaches is just one cache.
+ // FIXME: are these variables needed anywhere else?
+ this._manifest = applicationCaches.manifest;
+ this._creationTime = applicationCaches.creationTime;
+ this._updateTime = applicationCaches.updateTime;
+ this._size = applicationCaches.size;
+ this._resources = applicationCaches.resources;
+ var lastPathComponent = applicationCaches.lastPathComponent;
+
+ if (!this._manifest) {
+ this._emptyMsgElement.removeStyleClass("hidden");
+ this.deleteButton.visible = false;
+ if (this._dataGrid)
+ this._dataGrid.element.addStyleClass("hidden");
+ return;
+ }
+
+ if (!this._dataGrid)
+ this._createDataGrid();
+
+ this._populateDataGrid();
+ this._dataGrid.autoSizeColumns(20, 80);
+ this._dataGrid.element.removeStyleClass("hidden");
+ this._emptyMsgElement.addStyleClass("hidden");
+ this.deleteButton.visible = true;
+
+ var totalSizeString = Number.bytesToString(this._size, WebInspector.UIString);
+ this._treeElement.subtitle = WebInspector.UIString("%s (%s)", lastPathComponent, totalSizeString);
+
+ // FIXME: For Chrome, put creationTime and updateTime somewhere.
+ // NOTE: localizedString has not yet been added.
+ // WebInspector.UIString("(%s) Created: %s Updated: %s", this._size, this._creationTime, this._updateTime);
+ },
+
+ _createDataGrid: function()
+ {
+ var columns = { 0: {}, 1: {}, 2: {} };
+ columns[0].title = WebInspector.UIString("Resource");
+ columns[0].sort = "ascending";
+ columns[0].sortable = true;
+ columns[1].title = WebInspector.UIString("Type");
+ columns[1].sortable = true;
+ columns[2].title = WebInspector.UIString("Size");
+ columns[2].aligned = "right";
+ columns[2].sortable = true;
+ this._dataGrid = new WebInspector.DataGrid(columns);
+ this.element.appendChild(this._dataGrid.element);
+ this._dataGrid.addEventListener("sorting changed", this._populateDataGrid, this);
+ this._dataGrid.updateWidths();
+ },
+
+ _populateDataGrid: function()
+ {
+ var selectedResource = this._dataGrid.selectedNode ? this._dataGrid.selectedNode.resource : null;
+ var sortDirection = this._dataGrid.sortOrder === "ascending" ? 1 : -1;
+
+ function numberCompare(field, resource1, resource2)
+ {
+ return sortDirection * (resource1[field] - resource2[field]);
+ }
+ function localeCompare(field, resource1, resource2)
+ {
+ return sortDirection * (resource1[field] + "").localeCompare(resource2[field] + "")
+ }
+
+ var comparator;
+ switch (parseInt(this._dataGrid.sortColumnIdentifier)) {
+ case 0: comparator = localeCompare.bind(this, "name"); break;
+ case 1: comparator = localeCompare.bind(this, "type"); break;
+ case 2: comparator = numberCompare.bind(this, "size"); break;
+ default: localeCompare.bind(this, "resource"); // FIXME: comparator = ?
+ }
+
+ this._resources.sort(comparator);
+ this._dataGrid.removeChildren();
+
+ var nodeToSelect;
+ for (var i = 0; i < this._resources.length; ++i) {
+ var data = {};
+ var resource = this._resources[i];
+ data[0] = resource.name;
+ data[1] = resource.type;
+ data[2] = Number.bytesToString(resource.size, WebInspector.UIString);
+ var node = new WebInspector.DataGridNode(data);
+ node.resource = resource;
+ node.selectable = true;
+ this._dataGrid.appendChild(node);
+ if (resource === selectedResource) {
+ nodeToSelect = node;
+ nodeToSelect.selected = true;
+ }
+ }
+
+ if (!nodeToSelect)
+ this._dataGrid.children[0].selected = true;
+ },
+
+ resize: function()
+ {
+ if (this._dataGrid)
+ this._dataGrid.updateWidths();
+ },
+
+ _deleteButtonClicked: function(event)
+ {
+ if (!this._dataGrid || !this._dataGrid.selectedNode)
+ return;
+
+ // FIXME: Delete Button semantics are not yet defined. (Delete a single, or all?)
+ this._deleteCallback(this._dataGrid.selectedNode);
+ },
+
+ _deleteCallback: function(node)
+ {
+ // FIXME: Should we delete a single (selected) resource or all resources?
+ // InspectorBackend.deleteCachedResource(...)
+ // this._update();
+ },
+
+ _refreshButtonClicked: function(event)
+ {
+ // FIXME: Is this a refresh button or a re-fetch manifest button?
+ // this._update();
+ }
+}
+
+WebInspector.ApplicationCacheItemsView.prototype.__proto__ = WebInspector.View.prototype;
diff --git a/WebCore/inspector/front-end/AuditsPanel.js b/WebCore/inspector/front-end/AuditsPanel.js
index 481df80..bc7f3b3 100644
--- a/WebCore/inspector/front-end/AuditsPanel.js
+++ b/WebCore/inspector/front-end/AuditsPanel.js
@@ -30,7 +30,7 @@
WebInspector.AuditsPanel = function()
{
- WebInspector.Panel.call(this);
+ WebInspector.Panel.call(this, "audits");
this._constructCategories();
@@ -47,8 +47,6 @@ WebInspector.AuditsPanel = function()
this.sidebarTree.appendChild(this.auditResultsTreeElement);
this.auditResultsTreeElement.expand();
- this.element.addStyleClass("audits");
-
this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear audit results."), "clear-status-bar-item");
this.clearResultsButton.addEventListener("click", this._clearButtonClicked.bind(this), false);
@@ -60,8 +58,6 @@ WebInspector.AuditsPanel = function()
}
WebInspector.AuditsPanel.prototype = {
- toolbarItemClass: "audits",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Audits");
diff --git a/WebCore/inspector/front-end/CallStackSidebarPane.js b/WebCore/inspector/front-end/CallStackSidebarPane.js
index fc96d74..60eee34 100644
--- a/WebCore/inspector/front-end/CallStackSidebarPane.js
+++ b/WebCore/inspector/front-end/CallStackSidebarPane.js
@@ -61,7 +61,10 @@ WebInspector.CallStackSidebarPane.prototype = {
}
scriptOrResource = sourceIDMap[callFrame.sourceID];
- subtitle = WebInspector.displayNameForURL(scriptOrResource.sourceURL || scriptOrResource.url);
+ if (scriptOrResource)
+ subtitle = WebInspector.displayNameForURL(scriptOrResource.sourceURL || scriptOrResource.url);
+ else
+ subtitle = WebInspector.UIString("(internal script)");
if (callFrame.line > 0) {
if (subtitle)
diff --git a/WebCore/inspector/front-end/ConsolePanel.js b/WebCore/inspector/front-end/ConsolePanel.js
index 6dbc558..5a0c2e7 100644
--- a/WebCore/inspector/front-end/ConsolePanel.js
+++ b/WebCore/inspector/front-end/ConsolePanel.js
@@ -28,12 +28,10 @@
WebInspector.ConsolePanel = function()
{
- WebInspector.Panel.call(this);
+ WebInspector.Panel.call(this, "console");
}
WebInspector.ConsolePanel.prototype = {
- toolbarItemClass: "console",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Console");
diff --git a/WebCore/inspector/front-end/DOMAgent.js b/WebCore/inspector/front-end/DOMAgent.js
index ee85d1c..07b16b1 100644
--- a/WebCore/inspector/front-end/DOMAgent.js
+++ b/WebCore/inspector/front-end/DOMAgent.js
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
@@ -86,7 +86,8 @@ WebInspector.DOMNode.prototype = {
return this.attributes.length > 0;
},
- hasChildNodes: function() {
+ hasChildNodes: function()
+ {
return this._childNodeCount > 0;
},
@@ -350,7 +351,8 @@ WebInspector.DOMAgent.prototype = {
this.document._fireDomEvent("DOMAttrModified", event);
},
- nodeForId: function(nodeId) {
+ nodeForId: function(nodeId)
+ {
return this._idToDOMNode[nodeId];
},
@@ -420,16 +422,33 @@ WebInspector.DOMAgent.prototype = {
}
}
+WebInspector.ApplicationCache = {}
+
+WebInspector.ApplicationCache.getApplicationCachesAsync = function(callback)
+{
+ function mycallback(applicationCaches)
+ {
+ // FIXME: Currently, this list only returns a single application cache.
+ if (applicationCaches)
+ callback(applicationCaches);
+ }
+
+ var callId = WebInspector.Callback.wrap(mycallback);
+ InspectorBackend.getApplicationCaches(callId);
+}
+
WebInspector.Cookies = {}
WebInspector.Cookies.getCookiesAsync = function(callback)
{
- function mycallback(cookies, cookiesString) {
+ function mycallback(cookies, cookiesString)
+ {
if (cookiesString)
callback(WebInspector.Cookies.buildCookiesFromString(cookiesString), false);
else
callback(cookies, true);
}
+
var callId = WebInspector.Callback.wrap(mycallback);
InspectorBackend.getCookies(callId);
}
@@ -543,6 +562,7 @@ WebInspector.CSSStyleDeclaration.parseRule = function(payload)
rule.isUser = payload.isUser;
rule.isViaInspector = payload.isViaInspector;
rule.sourceLine = payload.sourceLine;
+ rule.documentURL = payload.documentURL;
if (payload.parentStyleSheet)
rule.parentStyleSheet = { href: payload.parentStyleSheet.href };
@@ -661,6 +681,7 @@ WebInspector.childNodeRemoved = function()
this.domAgent._childNodeRemoved.apply(this.domAgent, arguments);
}
+WebInspector.didGetApplicationCaches = WebInspector.Callback.processCallback;
WebInspector.didGetCookies = WebInspector.Callback.processCallback;
WebInspector.didGetChildNodes = WebInspector.Callback.processCallback;
WebInspector.didPerformSearch = WebInspector.Callback.processCallback;
diff --git a/WebCore/inspector/front-end/ElementsPanel.js b/WebCore/inspector/front-end/ElementsPanel.js
index e176112..cd7cbd2 100644
--- a/WebCore/inspector/front-end/ElementsPanel.js
+++ b/WebCore/inspector/front-end/ElementsPanel.js
@@ -30,9 +30,7 @@
WebInspector.ElementsPanel = function()
{
- WebInspector.Panel.call(this);
-
- this.element.addStyleClass("elements");
+ WebInspector.Panel.call(this, "elements");
this.contentElement = document.createElement("div");
this.contentElement.id = "elements-content";
@@ -114,8 +112,6 @@ WebInspector.ElementsPanel = function()
}
WebInspector.ElementsPanel.prototype = {
- toolbarItemClass: "elements",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Elements");
@@ -1121,20 +1117,23 @@ WebInspector.ElementsPanel.prototype = {
rightSidebarResizerDragEnd: function(event)
{
WebInspector.elementDragEnd(event);
+ this.saveSidebarWidth();
},
rightSidebarResizerDrag: function(event)
{
var x = event.pageX;
var newWidth = Number.constrain(window.innerWidth - x, Preferences.minElementsSidebarWidth, window.innerWidth * 0.66);
+ this.setSidebarWidth(newWidth);
+ event.preventDefault();
+ },
+ setSidebarWidth: function(newWidth)
+ {
this.sidebarElement.style.width = newWidth + "px";
this.contentElement.style.right = newWidth + "px";
this.sidebarResizeElement.style.right = (newWidth - 3) + "px";
-
this.treeOutline.updateSelection();
-
- event.preventDefault();
},
_nodeSearchButtonClicked: function(event)
diff --git a/WebCore/inspector/front-end/Images/applicationCache.png b/WebCore/inspector/front-end/Images/applicationCache.png
new file mode 100644
index 0000000..50bad87
--- /dev/null
+++ b/WebCore/inspector/front-end/Images/applicationCache.png
Binary files differ
diff --git a/WebCore/inspector/front-end/Panel.js b/WebCore/inspector/front-end/Panel.js
index 9fd0a60..2fa0d34 100644
--- a/WebCore/inspector/front-end/Panel.js
+++ b/WebCore/inspector/front-end/Panel.js
@@ -26,11 +26,15 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.Panel = function()
+WebInspector.Panel = function(name)
{
WebInspector.View.call(this);
this.element.addStyleClass("panel");
+ this.element.addStyleClass(name);
+ this._panelName = name;
+
+ WebInspector.applicationSettings.installSetting(this._sidebarWidthSettingName(), this._panelName + "-sidebar-width", undefined);
}
// Should by in sync with style declarations.
@@ -52,8 +56,7 @@ WebInspector.Panel.prototype = {
this._toolbarItem.className = "toolbar-item toggleable";
this._toolbarItem.panel = this;
- if ("toolbarItemClass" in this)
- this._toolbarItem.addStyleClass(this.toolbarItemClass);
+ this._toolbarItem.addStyleClass(this._panelName);
var iconElement = document.createElement("div");
iconElement.className = "toolbar-icon";
@@ -86,7 +89,7 @@ WebInspector.Panel.prototype = {
WebInspector.currentFocusElement = this.defaultFocusedElement;
- this.updateSidebarWidth();
+ this.restoreSidebarWidth();
this._restoreScrollPositions();
},
@@ -291,7 +294,7 @@ WebInspector.Panel.prototype = {
createSidebar: function(parentElement, resizerParentElement)
{
- if (this.hasSidebar)
+ if (this.sidebarElement)
return;
if (!parentElement)
@@ -300,8 +303,6 @@ WebInspector.Panel.prototype = {
if (!resizerParentElement)
resizerParentElement = parentElement;
- this.hasSidebar = true;
-
this.sidebarElement = document.createElement("div");
this.sidebarElement.className = "sidebar";
parentElement.appendChild(this.sidebarElement);
@@ -319,6 +320,11 @@ WebInspector.Panel.prototype = {
this.sidebarTree.panel = this;
},
+ _sidebarWidthSettingName: function()
+ {
+ return this._panelName + "SidebarWidth";
+ },
+
_startSidebarDragging: function(event)
{
WebInspector.elementDragStart(this.sidebarResizeElement, this._sidebarDragging.bind(this), this._endSidebarDragging.bind(this), event, "col-resize");
@@ -334,11 +340,12 @@ WebInspector.Panel.prototype = {
_endSidebarDragging: function(event)
{
WebInspector.elementDragEnd(event);
+ this.saveSidebarWidth();
},
updateSidebarWidth: function(width)
{
- if (!this.hasSidebar)
+ if (!this.sidebarElement)
return;
if (this.sidebarElement.offsetWidth <= 0) {
@@ -367,6 +374,19 @@ WebInspector.Panel.prototype = {
this.sidebarResizeElement.style.left = (width - 3) + "px";
},
+ restoreSidebarWidth: function()
+ {
+ var sidebarWidth = WebInspector.applicationSettings[this._sidebarWidthSettingName()];
+ this.updateSidebarWidth(sidebarWidth);
+ },
+
+ saveSidebarWidth: function()
+ {
+ if (!this.sidebarElement)
+ return;
+ WebInspector.applicationSettings[this._sidebarWidthSettingName()] = this.sidebarElement.offsetWidth;
+ },
+
updateMainViewWidth: function(width)
{
// Should be implemented by ancestors.
diff --git a/WebCore/inspector/front-end/ProfilesPanel.js b/WebCore/inspector/front-end/ProfilesPanel.js
index b5122af..911b1da 100644
--- a/WebCore/inspector/front-end/ProfilesPanel.js
+++ b/WebCore/inspector/front-end/ProfilesPanel.js
@@ -90,11 +90,10 @@ WebInspector.ProfileType.prototype = {
WebInspector.ProfilesPanel = function()
{
- WebInspector.Panel.call(this);
+ WebInspector.Panel.call(this, "profiles");
this.createSidebar();
- this.element.addStyleClass("profiles");
this._profileTypesByIdMap = {};
this._profileTypeButtonsByIdMap = {};
@@ -128,8 +127,6 @@ WebInspector.ProfilesPanel = function()
}
WebInspector.ProfilesPanel.prototype = {
- toolbarItemClass: "profiles",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Profiles");
diff --git a/WebCore/inspector/front-end/ResourcesPanel.js b/WebCore/inspector/front-end/ResourcesPanel.js
index ef6aa26..8af1505 100644
--- a/WebCore/inspector/front-end/ResourcesPanel.js
+++ b/WebCore/inspector/front-end/ResourcesPanel.js
@@ -29,9 +29,7 @@
WebInspector.ResourcesPanel = function()
{
- WebInspector.AbstractTimelinePanel.call(this);
-
- this.element.addStyleClass("resources");
+ WebInspector.AbstractTimelinePanel.call(this, "resources");
this._createPanelEnabler();
@@ -43,6 +41,7 @@ WebInspector.ResourcesPanel = function()
this.createInterface();
this._createStatusbarButtons();
+ this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), true);
this.reset();
this.filter(this.filterAllElement, false);
@@ -51,8 +50,6 @@ WebInspector.ResourcesPanel = function()
}
WebInspector.ResourcesPanel.prototype = {
- toolbarItemClass: "resources",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Resources");
@@ -319,6 +316,7 @@ WebInspector.ResourcesPanel.prototype = {
{
this._resourceTrackingEnabled = true;
this.reset();
+ this.restoreSidebarWidth();
},
resourceTrackingWasDisabled: function()
@@ -329,6 +327,7 @@ WebInspector.ResourcesPanel.prototype = {
reset: function()
{
+ this._popoverHelper.hidePopup();
this.closeVisibleResource();
delete this.currentQuery;
@@ -477,6 +476,8 @@ WebInspector.ResourcesPanel.prototype = {
if (!resource)
return;
+ this._popoverHelper.hidePopup();
+
this.containerElement.addStyleClass("viewing-resource");
if (this.visibleResource && this.visibleResource._resourcesView)
@@ -735,6 +736,52 @@ WebInspector.ResourcesPanel.prototype = {
elementsToRestoreScrollPositionsFor: function()
{
return [ this.containerElement ];
+ },
+
+ _getPopoverAnchor: function(element)
+ {
+ var anchor = element.enclosingNodeOrSelfWithClass("resources-graph-bar") || element.enclosingNodeOrSelfWithClass("resources-graph-label");
+ if (!anchor)
+ return null;
+ var resource = anchor.parentElement.resource;
+ return resource && resource.timing ? anchor : null;
+ },
+
+ _showPopover: function(anchor)
+ {
+ var tableElement = document.createElement("table");
+ var resource = anchor.parentElement.resource;
+ var data = [WebInspector.UIString("Blocking"), resource.timing.requestTime === 0 ? "?" : Number.secondsToString(Math.max(resource.timing.requestTime - resource.startTime, 0)),
+ WebInspector.UIString("Proxy"), resource.timing.proxyDuration == -1 ? WebInspector.UIString("(none)") : Number.secondsToString(resource.timing.proxyDuration),
+ WebInspector.UIString("DNS Lookup"), resource.timing.dnsDuration == -1 ? WebInspector.UIString("(reused)") : Number.secondsToString(resource.timing.dnsDuration),
+ WebInspector.UIString("Connecting"), resource.timing.connectDuration == -1 ? WebInspector.UIString("(reused)") : Number.secondsToString(resource.timing.connectDuration),
+ WebInspector.UIString("Sending"), Number.secondsToString(resource.timing.sendDuration),
+ WebInspector.UIString("Waiting"), Number.secondsToString(resource.timing.waitDuration),
+ WebInspector.UIString("Receiving"), Number.secondsToString(resource.endTime - resource.responseReceivedTime)];
+
+ for (var i = 0; i < data.length; i += 2) {
+ var tr = document.createElement("tr");
+ tableElement.appendChild(tr);
+
+ var td = document.createElement("td");
+ td.textContent = data[i];
+ tr.appendChild(td);
+
+ td = document.createElement("td");
+ td.align = "right";
+ td.textContent = data[i + 1];
+ tr.appendChild(td);
+ }
+
+ var popover = new WebInspector.Popover(tableElement);
+ popover.show(anchor);
+ return popover;
+ },
+
+ hide: function()
+ {
+ WebInspector.Panel.prototype.hide.call(this);
+ this._popoverHelper.hidePopup();
}
}
@@ -858,6 +905,9 @@ WebInspector.ResourceTimeCalculator.prototype = {
else
var leftLabel = rightLabel;
+ if (resource.timing)
+ return {left: leftLabel, right: rightLabel};
+
if (hasLatency && rightLabel) {
var total = this.formatValue(resource.duration);
var tooltip = WebInspector.UIString("%s latency, %s download (%s total)", leftLabel, rightLabel, total);
@@ -868,7 +918,6 @@ WebInspector.ResourceTimeCalculator.prototype = {
if (resource.cached)
tooltip = WebInspector.UIString("%s (from cache)", tooltip);
-
return {left: leftLabel, right: rightLabel, tooltip: tooltip};
},
@@ -1208,6 +1257,7 @@ WebInspector.ResourceGraph = function(resource)
this._barAreaElement = document.createElement("div");
this._barAreaElement.className = "resources-graph-bar-area hidden";
+ this._barAreaElement.resource = resource;
this._graphElement.appendChild(this._barAreaElement);
this._barLeftElement = document.createElement("div");
diff --git a/WebCore/inspector/front-end/ScriptsPanel.js b/WebCore/inspector/front-end/ScriptsPanel.js
index 5563b93..3c4a0be 100644
--- a/WebCore/inspector/front-end/ScriptsPanel.js
+++ b/WebCore/inspector/front-end/ScriptsPanel.js
@@ -25,9 +25,7 @@
WebInspector.ScriptsPanel = function()
{
- WebInspector.Panel.call(this);
-
- this.element.addStyleClass("scripts");
+ WebInspector.Panel.call(this, "scripts");
this.topStatusBar = document.createElement("div");
this.topStatusBar.className = "status-bar";
@@ -184,8 +182,6 @@ WebInspector.ScriptsPanel.PauseOnExceptionsState = {
};
WebInspector.ScriptsPanel.prototype = {
- toolbarItemClass: "scripts",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Scripts");
@@ -794,15 +790,20 @@ WebInspector.ScriptsPanel.prototype = {
_endSidebarResizeDrag: function(event)
{
WebInspector.elementDragEnd(event);
-
delete this._dragOffset;
+ this.saveSidebarWidth();
},
_sidebarResizeDrag: function(event)
{
var x = event.pageX + this._dragOffset;
var newWidth = Number.constrain(window.innerWidth - x, Preferences.minScriptsSidebarWidth, window.innerWidth * 0.66);
+ this.setSidebarWidth(newWidth);
+ event.preventDefault();
+ },
+ setSidebarWidth: function(newWidth)
+ {
this.sidebarElement.style.width = newWidth + "px";
this.sidebarButtonsElement.style.width = newWidth + "px";
this.viewsContainerElement.style.right = newWidth + "px";
@@ -810,7 +811,6 @@ WebInspector.ScriptsPanel.prototype = {
this.sidebarResizeElement.style.right = (newWidth - 3) + "px";
this.resize();
- event.preventDefault();
},
updatePauseOnExceptionsState: function(pauseOnExceptionsState)
diff --git a/WebCore/inspector/front-end/Settings.js b/WebCore/inspector/front-end/Settings.js
index c7fc5a9..11f456c 100644
--- a/WebCore/inspector/front-end/Settings.js
+++ b/WebCore/inspector/front-end/Settings.js
@@ -48,15 +48,16 @@ var Preferences = {
WebInspector.populateApplicationSettings = function(settingsString)
{
WebInspector.applicationSettings._load(settingsString);
- WebInspector.applicationSettings._installSetting("eventListenersFilter", "event-listeners-filter", "all");
- WebInspector.applicationSettings._installSetting("colorFormat", "color-format", "hex");
- WebInspector.applicationSettings._installSetting("resourcesLargeRows", "resources-large-rows", true);
- WebInspector.applicationSettings._installSetting("watchExpressions", "watch-expressions", []);
- WebInspector.applicationSettings._installSetting("lastViewedScriptFile", "last-viewed-script-file");
- WebInspector.applicationSettings._installSetting("showInheritedComputedStyleProperties", "show-inherited-computed-style-properties", false);
- WebInspector.applicationSettings._installSetting("showUserAgentStyles", "show-user-agent-styles", true);
- WebInspector.applicationSettings._installSetting("resourceViewTab", "resource-view-tab", "content");
- WebInspector.applicationSettings._installSetting("consoleHistory", "console-history", []);
+ WebInspector.applicationSettings.installSetting("eventListenersFilter", "event-listeners-filter", "all");
+ WebInspector.applicationSettings.installSetting("colorFormat", "color-format", "hex");
+ WebInspector.applicationSettings.installSetting("resourcesLargeRows", "resources-large-rows", true);
+ WebInspector.applicationSettings.installSetting("watchExpressions", "watch-expressions", []);
+ WebInspector.applicationSettings.installSetting("lastViewedScriptFile", "last-viewed-script-file");
+ WebInspector.applicationSettings.installSetting("showInheritedComputedStyleProperties", "show-inherited-computed-style-properties", false);
+ WebInspector.applicationSettings.installSetting("showUserAgentStyles", "show-user-agent-styles", true);
+ WebInspector.applicationSettings.installSetting("resourceViewTab", "resource-view-tab", "content");
+ WebInspector.applicationSettings.installSetting("consoleHistory", "console-history", []);
+
WebInspector.applicationSettings.dispatchEventToListeners("loaded");
}
@@ -69,6 +70,7 @@ WebInspector.populateSessionSettings = function(settingsString)
WebInspector.Settings = function(sessionScope)
{
this._sessionScope = sessionScope;
+ this._defaultValues = {};
}
WebInspector.Settings.prototype = {
@@ -88,18 +90,18 @@ WebInspector.Settings.prototype = {
}
},
- _installSetting: function(name, propertyName, defaultValue)
+ installSetting: function(name, propertyName, defaultValue)
{
this.__defineGetter__(name, this._get.bind(this, propertyName));
this.__defineSetter__(name, this._set.bind(this, propertyName));
- if (!(propertyName in this._store)) {
- this._store[propertyName] = defaultValue;
- }
+ this._defaultValues[propertyName] = defaultValue;
},
_get: function(propertyName)
{
- return this._store[propertyName];
+ if (propertyName in this._store)
+ return this._store[propertyName];
+ return this._defaultValues[propertyName];
},
_set: function(propertyName, newValue)
diff --git a/WebCore/inspector/front-end/SourceCSSTokenizer.js b/WebCore/inspector/front-end/SourceCSSTokenizer.js
index f7d7d51..1d8a784 100644
--- a/WebCore/inspector/front-end/SourceCSSTokenizer.js
+++ b/WebCore/inspector/front-end/SourceCSSTokenizer.js
@@ -81,13 +81,13 @@ WebInspector.SourceCSSTokenizer = function()
"-webkit-column-gap", "-webkit-column-rule", "-webkit-column-rule-color", "-webkit-column-rule-style",
"-webkit-column-rule-width", "-webkit-column-width", "-webkit-columns", "-webkit-font-size-delta",
"-webkit-font-smoothing", "-webkit-highlight", "-webkit-line-break", "-webkit-line-clamp",
- "-webkit-margin-bottom-collapse", "-webkit-margin-collapse", "-webkit-margin-start", "-webkit-margin-top-collapse",
+ "-webkit-margin-bottom-collapse", "-webkit-margin-collapse", "-webkit-margin-end", "-webkit-margin-start", "-webkit-margin-top-collapse",
"-webkit-marquee", "-webkit-marquee-direction", "-webkit-marquee-increment", "-webkit-marquee-repetition",
"-webkit-marquee-speed", "-webkit-marquee-style", "-webkit-mask", "-webkit-mask-attachment",
"-webkit-mask-box-image", "-webkit-mask-clip", "-webkit-mask-composite", "-webkit-mask-image",
"-webkit-mask-origin", "-webkit-mask-position", "-webkit-mask-position-x", "-webkit-mask-position-y",
"-webkit-mask-repeat", "-webkit-mask-repeat-x", "-webkit-mask-repeat-y", "-webkit-mask-size",
- "-webkit-match-nearest-mail-blockquote-color", "-webkit-nbsp-mode", "-webkit-padding-start",
+ "-webkit-match-nearest-mail-blockquote-color", "-webkit-nbsp-mode", "-webkit-padding-end", "-webkit-padding-start",
"-webkit-perspective", "-webkit-perspective-origin", "-webkit-perspective-origin-x", "-webkit-perspective-origin-y",
"-webkit-rtl-ordering", "-webkit-text-decorations-in-effect", "-webkit-text-fill-color", "-webkit-text-security",
"-webkit-text-size-adjust", "-webkit-text-stroke", "-webkit-text-stroke-color", "-webkit-text-stroke-width",
diff --git a/WebCore/inspector/front-end/StoragePanel.js b/WebCore/inspector/front-end/StoragePanel.js
index fef7802..2733907 100644
--- a/WebCore/inspector/front-end/StoragePanel.js
+++ b/WebCore/inspector/front-end/StoragePanel.js
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
@@ -29,7 +29,7 @@
WebInspector.StoragePanel = function(database)
{
- WebInspector.Panel.call(this);
+ WebInspector.Panel.call(this, "storage");
this.createSidebar();
@@ -49,6 +49,10 @@ WebInspector.StoragePanel = function(database)
this.sidebarTree.appendChild(this.cookieListTreeElement);
this.cookieListTreeElement.expand();
+ this.applicationCacheListTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("APPLICATION CACHE"), {}, true);
+ this.sidebarTree.appendChild(this.applicationCacheListTreeElement);
+ this.applicationCacheListTreeElement.expand();
+
this.storageViews = document.createElement("div");
this.storageViews.id = "storage-views";
this.element.appendChild(this.storageViews);
@@ -60,8 +64,6 @@ WebInspector.StoragePanel = function(database)
}
WebInspector.StoragePanel.prototype = {
- toolbarItemClass: "storage",
-
get toolbarItemLabel()
{
return WebInspector.UIString("Storage");
@@ -99,12 +101,16 @@ WebInspector.StoragePanel.prototype = {
this._cookieViews = {};
+ this._applicationCacheView = null;
+ delete this._cachedApplicationCacheViewStatus;
+
this.databasesListTreeElement.removeChildren();
this.localStorageListTreeElement.removeChildren();
this.sessionStorageListTreeElement.removeChildren();
this.cookieListTreeElement.removeChildren();
+ this.applicationCacheListTreeElement.removeChildren();
- this.storageViews.removeChildren();
+ this.storageViews.removeChildren();
this.storageViewStatusBarItemsContainer.removeChildren();
@@ -138,6 +144,12 @@ WebInspector.StoragePanel.prototype = {
this.sessionStorageListTreeElement.appendChild(domStorageTreeElement);
},
+ addApplicationCache: function(domain)
+ {
+ var applicationCacheTreeElement = new WebInspector.ApplicationCacheSidebarTreeElement(domain);
+ this.applicationCacheListTreeElement.appendChild(applicationCacheTreeElement);
+ },
+
selectDatabase: function(databaseId)
{
var database;
@@ -185,14 +197,7 @@ WebInspector.StoragePanel.prototype = {
}
}
- view.show(this.storageViews);
-
- this.visibleView = view;
-
- this.storageViewStatusBarItemsContainer.removeChildren();
- var statusBarItems = view.statusBarItems || [];
- for (var i = 0; i < statusBarItems.length; ++i)
- this.storageViewStatusBarItemsContainer.appendChild(statusBarItems[i].element);
+ this._genericViewSetup(view);
},
showDOMStorage: function(domStorage)
@@ -210,14 +215,7 @@ WebInspector.StoragePanel.prototype = {
domStorage._domStorageView = view;
}
- view.show(this.storageViews);
-
- this.visibleView = view;
-
- this.storageViewStatusBarItemsContainer.removeChildren();
- var statusBarItems = view.statusBarItems;
- for (var i = 0; i < statusBarItems.length; ++i)
- this.storageViewStatusBarItemsContainer.appendChild(statusBarItems[i]);
+ this._genericViewSetup(view);
},
showCookies: function(treeElement, cookieDomain)
@@ -231,12 +229,33 @@ WebInspector.StoragePanel.prototype = {
this._cookieViews[cookieDomain] = view;
}
- view.show(this.storageViews);
+ this._genericViewSetup(view);
+ },
+
+ showApplicationCache: function(treeElement, appcacheDomain)
+ {
+ if (this.visibleView)
+ this.visibleView.hide();
+
+ var view = this._applicationCacheView;
+ if (!view) {
+ view = new WebInspector.ApplicationCacheItemsView(treeElement, appcacheDomain);
+ this._applicationCacheView = view;
+ }
+ this._genericViewSetup(view);
+
+ if ("_cachedApplicationCacheViewStatus" in this)
+ this._applicationCacheView.updateStatus(this._cachedApplicationCacheViewStatus);
+ },
+
+ _genericViewSetup: function(view)
+ {
+ view.show(this.storageViews);
this.visibleView = view;
this.storageViewStatusBarItemsContainer.removeChildren();
- var statusBarItems = view.statusBarItems;
+ var statusBarItems = view.statusBarItems || [];
for (var i = 0; i < statusBarItems.length; ++i)
this.storageViewStatusBarItemsContainer.appendChild(statusBarItems[i]);
},
@@ -364,6 +383,25 @@ WebInspector.StoragePanel.prototype = {
domStorage._domStorageView.update();
},
+ updateApplicationCacheStatus: function(status)
+ {
+ this._cachedApplicationCacheViewStatus = status;
+ if (this._applicationCacheView && this._applicationCacheView === this.visibleView)
+ this._applicationCacheView.updateStatus(status);
+ },
+
+ updateNetworkState: function(isNowOnline)
+ {
+ if (this._applicationCacheView && this._applicationCacheView === this.visibleView)
+ this._applicationCacheView.updateNetworkState(isNowOnline);
+ },
+
+ updateManifest: function(manifest)
+ {
+ if (this._applicationCacheView && this._applicationCacheView === this.visibleView)
+ this._applicationCacheView.updateManifest(manifest);
+ },
+
_domStorageForId: function(storageId)
{
if (!this._domStorage)
@@ -540,3 +578,43 @@ WebInspector.CookieSidebarTreeElement.prototype = {
}
WebInspector.CookieSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype;
+
+WebInspector.ApplicationCacheSidebarTreeElement = function(appcacheDomain)
+{
+ WebInspector.SidebarTreeElement.call(this, "application-cache-sidebar-tree-item", appcacheDomain, "", null, false);
+ this._appcacheDomain = appcacheDomain;
+ this._subtitle = "";
+ this._mainTitle = this._appcacheDomain;
+ this.refreshTitles();
+}
+
+WebInspector.ApplicationCacheSidebarTreeElement.prototype = {
+ onselect: function()
+ {
+ WebInspector.panels.storage.showApplicationCache(this, this._appcacheDomain);
+ },
+
+ get mainTitle()
+ {
+ return this._mainTitle;
+ },
+
+ set mainTitle(x)
+ {
+ this._mainTitle = x;
+ this.refreshTitles();
+ },
+
+ get subtitle()
+ {
+ return this._subtitle;
+ },
+
+ set subtitle(x)
+ {
+ this._subtitle = x;
+ this.refreshTitles();
+ }
+}
+
+WebInspector.ApplicationCacheSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype;
diff --git a/WebCore/inspector/front-end/StylesSidebarPane.js b/WebCore/inspector/front-end/StylesSidebarPane.js
index 649b9d0..5f5a5ad 100644
--- a/WebCore/inspector/front-end/StylesSidebarPane.js
+++ b/WebCore/inspector/front-end/StylesSidebarPane.js
@@ -649,20 +649,24 @@ WebInspector.StylePropertiesSection = function(styleRule, subtitle, computedStyl
this.headerElement.addStyleClass("hidden");
} else {
if (!subtitle) {
- if (this.styleRule.parentStyleSheet && this.styleRule.parentStyleSheet.href) {
- var url = this.styleRule.parentStyleSheet.href;
- var link = WebInspector.linkifyResourceAsNode(url, "resources", this.rule.sourceLine + 1);
+ function linkifyUncopyable(url, line)
+ {
+ var link = WebInspector.linkifyResourceAsNode(url, "resources", line + 1);
link.setAttribute("data-uncopyable", link.textContent);
link.textContent = "";
- this.subtitleElement.appendChild(link);
- } else if (isUserAgent)
+ return link;
+ }
+
+ if (this.styleRule.parentStyleSheet && this.styleRule.parentStyleSheet.href)
+ this.subtitleElement.appendChild(linkifyUncopyable(this.styleRule.parentStyleSheet.href, this.rule.sourceLine));
+ else if (isUserAgent)
subtitle = WebInspector.UIString("user agent stylesheet");
else if (isUser)
subtitle = WebInspector.UIString("user stylesheet");
else if (isViaInspector)
subtitle = WebInspector.UIString("via inspector");
else
- subtitle = WebInspector.UIString("inline stylesheet");
+ this.subtitleElement.appendChild(linkifyUncopyable(this.rule.documentURL, this.rule.sourceLine));
}
if (isInherited)
this.element.addStyleClass("show-inherited"); // This one is related to inherited rules, not compted style.
diff --git a/WebCore/inspector/front-end/TimelinePanel.js b/WebCore/inspector/front-end/TimelinePanel.js
index 29efd79..1f12625 100644
--- a/WebCore/inspector/front-end/TimelinePanel.js
+++ b/WebCore/inspector/front-end/TimelinePanel.js
@@ -30,8 +30,7 @@
WebInspector.TimelinePanel = function()
{
- WebInspector.Panel.call(this);
- this.element.addStyleClass("timeline");
+ WebInspector.Panel.call(this, "timeline");
this.element.appendChild(this._createTopPane());
this.element.tabIndex = 0;
@@ -106,8 +105,6 @@ WebInspector.TimelinePanel.rowHeight = 18;
WebInspector.TimelinePanel.shortRecordThreshold = 0.015;
WebInspector.TimelinePanel.prototype = {
- toolbarItemClass: "timeline",
-
_createTopPane: function() {
var topPaneElement = document.createElement("div");
topPaneElement.id = "timeline-overview-panel";
diff --git a/WebCore/inspector/front-end/WebKit.qrc b/WebCore/inspector/front-end/WebKit.qrc
index add50e1..42ad915 100644
--- a/WebCore/inspector/front-end/WebKit.qrc
+++ b/WebCore/inspector/front-end/WebKit.qrc
@@ -2,6 +2,7 @@
<qresource prefix="/webkit/inspector">
<file>inspector.html</file>
<file>AbstractTimelinePanel.js</file>
+ <file>ApplicationCacheItemsView.js</file>
<file>AuditCategories.js</file>
<file>AuditLauncherView.js</file>
<file>AuditResultView.js</file>
@@ -103,6 +104,7 @@
<file>inspectorSyntaxHighlight.css</file>
<file>popover.css</file>
<file>textViewer.css</file>
+ <file>Images/applicationCache.png</file>
<file>Images/auditsIcon.png</file>
<file>Images/back.png</file>
<file>Images/breakpointBorder.png</file>
diff --git a/WebCore/inspector/front-end/inspector.css b/WebCore/inspector/front-end/inspector.css
index b92672a..d8e29e8 100644
--- a/WebCore/inspector/front-end/inspector.css
+++ b/WebCore/inspector/front-end/inspector.css
@@ -1826,6 +1826,10 @@ body.inactive .sidebar {
content: url(Images/cookie.png);
}
+.application-cache-sidebar-tree-item .icon {
+ content: url(Images/applicationCache.png);
+}
+
#storage-views {
position: absolute;
top: 0;
@@ -3702,7 +3706,7 @@ body.inactive .sidebar-tree-item.selected .bubble.search-matches {
background-color: rgb(66, 129, 235) !important;
}
-.timeline-records-counter {
+.timeline-records-counter, .storage-application-cache-status, .storage-application-cache-connectivity {
font-size: 11px;
text-shadow: white 0 1px 0;
}
@@ -3718,6 +3722,22 @@ body.inactive .sidebar-tree-item.selected .bubble.search-matches {
margin-top: -2px;
}
+.storage-application-cache-status-icon, .storage-application-cache-connectivity-icon {
+ margin-bottom: -3px;
+ margin-left: 5px;
+ vertical-align: middle;
+}
+
+.status-bar-divider {
+ margin-left: 7px;
+ border-right: 1px solid #CCC;
+}
+
+.storage-application-cache-status, .storage-application-cache-connectivity {
+ position: relative;
+ top: 4px;
+}
+
/* Profiler Style */
#profile-views {
diff --git a/WebCore/inspector/front-end/inspector.html b/WebCore/inspector/front-end/inspector.html
index 8a8b7d5..c829195 100644
--- a/WebCore/inspector/front-end/inspector.html
+++ b/WebCore/inspector/front-end/inspector.html
@@ -64,6 +64,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="DOMStorageItemsView.js"></script>
<script type="text/javascript" src="DataGrid.js"></script>
<script type="text/javascript" src="CookieItemsView.js"></script>
+ <script type="text/javascript" src="ApplicationCacheItemsView.js"></script>
<script type="text/javascript" src="Script.js"></script>
<script type="text/javascript" src="BreakpointManager.js"></script>
<script type="text/javascript" src="SidebarPane.js"></script>
diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
index 3bb4180..89d1ae0 100644
--- a/WebCore/inspector/front-end/inspector.js
+++ b/WebCore/inspector/front-end/inspector.js
@@ -53,6 +53,7 @@ var WebInspector = {
resources: {},
resourceURLMap: {},
cookieDomains: {},
+ applicationCacheDomains: {},
missingLocalizedStrings: {},
pendingDispatches: 0,
@@ -566,6 +567,11 @@ WebInspector.dispatch = function() {
// This is important to LayoutTests.
function delayDispatch()
{
+ if (!(methodName in WebInspector)) {
+ console.error("Attempted to dispatch unimplemented WebInspector method: %s", methodName);
+ return;
+ }
+
WebInspector[methodName].apply(WebInspector, parameters);
WebInspector.pendingDispatches--;
}
@@ -575,8 +581,7 @@ WebInspector.dispatch = function() {
WebInspector.dispatchMessageFromBackend = function(arguments)
{
- var methodName = arguments.shift();
- WebInspector[methodName].apply(this, arguments);
+ WebInspector.dispatch.apply(this, arguments);
}
@@ -716,11 +721,12 @@ WebInspector._registerShortcuts = function()
WebInspector.documentKeyDown = function(event)
{
+ var isInputElement = event.target.nodeName === "INPUT";
var isInEditMode = event.target.enclosingNodeOrSelfWithClass("text-prompt") || WebInspector.isEditingAnyField();
const helpKey = WebInspector.isMac() ? "U+003F" : "U+00BF"; // "?" for both platforms
if (event.keyIdentifier === "F1" ||
- (event.keyIdentifier === helpKey && event.shiftKey && (!isInEditMode || event.metaKey))) {
+ (event.keyIdentifier === helpKey && event.shiftKey && (!isInEditMode && !isInputElement || event.metaKey))) {
WebInspector.shortcutsHelp.show();
event.stopPropagation();
event.preventDefault();
@@ -1163,6 +1169,7 @@ WebInspector.updateResource = function(identifier, payload)
if (match) {
var protocol = match[1].toLowerCase();
this._addCookieDomain(match[2]);
+ this._addAppCacheDomain(match[2]);
}
}
@@ -1174,6 +1181,8 @@ WebInspector.updateResource = function(identifier, payload)
resource.statusText = payload.statusText;
resource.suggestedFilename = payload.suggestedFilename;
resource.responseHeaders = payload.responseHeaders;
+ resource.connectionID = payload.connectionID;
+ resource.timing = payload.timing;
}
if (payload.didTypeChange) {
@@ -1258,6 +1267,18 @@ WebInspector._addCookieDomain = function(domain)
this.panels.storage.addCookieDomain(domain);
}
+WebInspector._addAppCacheDomain = function(domain)
+{
+ // Eliminate duplicate domains from the list.
+ if (domain in this.applicationCacheDomains)
+ return;
+ this.applicationCacheDomains[domain] = true;
+
+ if (!this.panels.storage)
+ return;
+ this.panels.storage.addApplicationCache(domain);
+}
+
WebInspector.addDOMStorage = function(payload)
{
if (!this.panels.storage)
@@ -1271,11 +1292,19 @@ WebInspector.addDOMStorage = function(payload)
WebInspector.updateDOMStorage = function(storageId)
{
- if (!this.panels.storage)
- return;
this.panels.storage.updateDOMStorage(storageId);
}
+WebInspector.updateApplicationCacheStatus = function(status)
+{
+ this.panels.storage.updateApplicationCacheStatus(status);
+}
+
+WebInspector.updateNetworkState = function(isNowOnline)
+{
+ this.panels.storage.updateNetworkState(isNowOnline);
+}
+
WebInspector.resourceTrackingWasEnabled = function()
{
this.panels.resources.resourceTrackingWasEnabled();
@@ -1286,7 +1315,6 @@ WebInspector.resourceTrackingWasDisabled = function()
this.panels.resources.resourceTrackingWasDisabled();
}
-
WebInspector.searchingForNodeWasEnabled = function()
{
this.panels.elements.searchingForNodeWasEnabled();
@@ -1388,6 +1416,7 @@ WebInspector.reset = function()
this.resources = {};
this.resourceURLMap = {};
this.cookieDomains = {};
+ this.applicationCacheDomains = {};
this.hoveredDOMNode = null;
delete this.mainResource;
diff --git a/WebCore/loader/CachedResource.cpp b/WebCore/loader/CachedResource.cpp
index 75037ba..bde5da5 100644
--- a/WebCore/loader/CachedResource.cpp
+++ b/WebCore/loader/CachedResource.cpp
@@ -485,9 +485,9 @@ bool CachedResource::makePurgeable(bool purgeable)
return false;
if (m_data->hasPurgeableBuffer()) {
- m_purgeableData.set(m_data->releasePurgeableBuffer());
+ m_purgeableData = m_data->releasePurgeableBuffer();
} else {
- m_purgeableData.set(PurgeableBuffer::create(m_data->data(), m_data->size()));
+ m_purgeableData = PurgeableBuffer::create(m_data->data(), m_data->size());
if (!m_purgeableData)
return false;
}
diff --git a/WebCore/loader/CrossOriginAccessControl.cpp b/WebCore/loader/CrossOriginAccessControl.cpp
index 01596e2..f019f28 100644
--- a/WebCore/loader/CrossOriginAccessControl.cpp
+++ b/WebCore/loader/CrossOriginAccessControl.cpp
@@ -92,7 +92,7 @@ bool isOnAccessControlResponseHeaderWhitelist(const String& name)
return allowedCrossOriginResponseHeaders->contains(name);
}
-bool passesAccessControlCheck(const ResourceResponse& response, bool includeCredentials, SecurityOrigin* securityOrigin)
+bool passesAccessControlCheck(const ResourceResponse& response, bool includeCredentials, SecurityOrigin* securityOrigin, String& errorDescription)
{
// A wildcard Access-Control-Allow-Origin can not be used if credentials are to be sent,
// even with Access-Control-Allow-Credentials set to true.
@@ -100,17 +100,25 @@ bool passesAccessControlCheck(const ResourceResponse& response, bool includeCred
if (accessControlOriginString == "*" && !includeCredentials)
return true;
- if (securityOrigin->isUnique())
+ if (securityOrigin->isUnique()) {
+ errorDescription = "Cannot make any requests from " + securityOrigin->toString() + ".";
return false;
+ }
+ // FIXME: Access-Control-Allow-Origin can contain a list of origins.
RefPtr<SecurityOrigin> accessControlOrigin = SecurityOrigin::createFromString(accessControlOriginString);
- if (!accessControlOrigin->isSameSchemeHostPort(securityOrigin))
+ if (!accessControlOrigin->isSameSchemeHostPort(securityOrigin)) {
+ errorDescription = (accessControlOriginString == "*") ? "Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true."
+ : "Origin " + securityOrigin->toString() + " is not allowed by Access-Control-Allow-Origin.";
return false;
+ }
if (includeCredentials) {
const String& accessControlCredentialsString = response.httpHeaderField("Access-Control-Allow-Credentials");
- if (accessControlCredentialsString != "true")
+ if (accessControlCredentialsString != "true") {
+ errorDescription = "Credentials flag is true, but Access-Control-Allow-Credentials is not \"true\".";
return false;
+ }
}
return true;
diff --git a/WebCore/loader/CrossOriginAccessControl.h b/WebCore/loader/CrossOriginAccessControl.h
index 267646f..4a904d6 100644
--- a/WebCore/loader/CrossOriginAccessControl.h
+++ b/WebCore/loader/CrossOriginAccessControl.h
@@ -36,6 +36,6 @@ namespace WebCore {
bool isOnAccessControlSimpleRequestHeaderWhitelist(const String& name, const String& value);
bool isOnAccessControlResponseHeaderWhitelist(const String&);
- bool passesAccessControlCheck(const ResourceResponse&, bool includeCredentials, SecurityOrigin*);
+ bool passesAccessControlCheck(const ResourceResponse&, bool includeCredentials, SecurityOrigin*, String& errorDescription);
} // namespace WebCore
diff --git a/WebCore/loader/CrossOriginPreflightResultCache.cpp b/WebCore/loader/CrossOriginPreflightResultCache.cpp
index cea66b1..f0211af 100644
--- a/WebCore/loader/CrossOriginPreflightResultCache.cpp
+++ b/WebCore/loader/CrossOriginPreflightResultCache.cpp
@@ -35,6 +35,8 @@
namespace WebCore {
+using namespace std;
+
// These values are at the discretion of the user agent.
static const unsigned defaultPreflightCacheTimeoutSeconds = 5;
static const unsigned maxPreflightCacheTimeoutSeconds = 600; // Should be short enough to minimize the risk of using a poisoned cache after switching to a secure network.
@@ -87,15 +89,19 @@ static bool parseAccessControlAllowList(const String& string, HashSet<String, Ha
return true;
}
-bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response)
+bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response, String& errorDescription)
{
m_methods.clear();
- if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Methods"), m_methods))
+ if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Methods"), m_methods)) {
+ errorDescription = "Cannot parse Access-Control-Allow-Methods response header field.";
return false;
+ }
m_headers.clear();
- if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Headers"), m_headers))
+ if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Headers"), m_headers)) {
+ errorDescription = "Cannot parse Access-Control-Allow-Headers response header field.";
return false;
+ }
unsigned expiryDelta;
if (parseAccessControlMaxAge(response.httpHeaderField("Access-Control-Max-Age"), expiryDelta)) {
@@ -108,30 +114,37 @@ bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response
return true;
}
-bool CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod(const String& method) const
+bool CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod(const String& method, String& errorDescription) const
{
- return m_methods.contains(method) || isOnAccessControlSimpleRequestMethodWhitelist(method);
+ if (m_methods.contains(method) || isOnAccessControlSimpleRequestMethodWhitelist(method))
+ return true;
+
+ errorDescription = "Method " + method + " is not allowed by Access-Control-Allow-Methods.";
+ return false;
}
-bool CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders(const HTTPHeaderMap& requestHeaders) const
+bool CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders(const HTTPHeaderMap& requestHeaders, String& errorDescription) const
{
HTTPHeaderMap::const_iterator end = requestHeaders.end();
for (HTTPHeaderMap::const_iterator it = requestHeaders.begin(); it != end; ++it) {
- if (!m_headers.contains(it->first) && !isOnAccessControlSimpleRequestHeaderWhitelist(it->first, it->second))
+ if (!m_headers.contains(it->first) && !isOnAccessControlSimpleRequestHeaderWhitelist(it->first, it->second)) {
+ errorDescription = "Request header field " + it->first + " is not allowed by Access-Control-Allow-Headers.";
return false;
+ }
}
return true;
}
bool CrossOriginPreflightResultCacheItem::allowsRequest(bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders) const
{
+ String ignoredExplanation;
if (m_absoluteExpiryTime < currentTime())
return false;
if (includeCredentials && !m_credentials)
return false;
- if (!allowsCrossOriginMethod(method))
+ if (!allowsCrossOriginMethod(method, ignoredExplanation))
return false;
- if (!allowsCrossOriginHeaders(requestHeaders))
+ if (!allowsCrossOriginHeaders(requestHeaders, ignoredExplanation))
return false;
return true;
}
@@ -143,10 +156,15 @@ CrossOriginPreflightResultCache& CrossOriginPreflightResultCache::shared()
return cache;
}
-void CrossOriginPreflightResultCache::appendEntry(const String& origin, const KURL& url, CrossOriginPreflightResultCacheItem* preflightResult)
+void CrossOriginPreflightResultCache::appendEntry(const String& origin, const KURL& url, PassOwnPtr<CrossOriginPreflightResultCacheItem> preflightResult)
{
ASSERT(isMainThread());
- m_preflightHashMap.set(std::make_pair(origin, url), preflightResult);
+ CrossOriginPreflightResultCacheItem* resultPtr = preflightResult.leakPtr();
+ pair<CrossOriginPreflightResultHashMap::iterator, bool> addResult = m_preflightHashMap.add(make_pair(origin, url), resultPtr);
+ if (!addResult.second) {
+ // FIXME: We need to delete the old value before replacing with the new one.
+ addResult.first->second = resultPtr;
+ }
}
bool CrossOriginPreflightResultCache::canSkipPreflight(const String& origin, const KURL& url, bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders)
diff --git a/WebCore/loader/CrossOriginPreflightResultCache.h b/WebCore/loader/CrossOriginPreflightResultCache.h
index 8e5b239..0f3e356 100644
--- a/WebCore/loader/CrossOriginPreflightResultCache.h
+++ b/WebCore/loader/CrossOriginPreflightResultCache.h
@@ -31,6 +31,7 @@
#include "StringHash.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
+#include <wtf/PassOwnPtr.h>
namespace WebCore {
@@ -45,9 +46,9 @@ namespace WebCore {
{
}
- bool parse(const ResourceResponse&);
- bool allowsCrossOriginMethod(const String&) const;
- bool allowsCrossOriginHeaders(const HTTPHeaderMap&) const;
+ bool parse(const ResourceResponse&, String& errorDescription);
+ bool allowsCrossOriginMethod(const String&, String& errorDescription) const;
+ bool allowsCrossOriginHeaders(const HTTPHeaderMap&, String& errorDescription) const;
bool allowsRequest(bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders) const;
private:
@@ -66,7 +67,7 @@ namespace WebCore {
public:
static CrossOriginPreflightResultCache& shared();
- void appendEntry(const String& origin, const KURL&, CrossOriginPreflightResultCacheItem*);
+ void appendEntry(const String& origin, const KURL&, PassOwnPtr<CrossOriginPreflightResultCacheItem>);
bool canSkipPreflight(const String& origin, const KURL&, bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders);
void empty();
diff --git a/WebCore/loader/DocumentThreadableLoader.cpp b/WebCore/loader/DocumentThreadableLoader.cpp
index ee926b1..4a7a88b 100644
--- a/WebCore/loader/DocumentThreadableLoader.cpp
+++ b/WebCore/loader/DocumentThreadableLoader.cpp
@@ -75,7 +75,7 @@ DocumentThreadableLoader::DocumentThreadableLoader(Document* document, Threadabl
}
if (m_options.crossOriginRequestPolicy == DenyCrossOriginRequests) {
- m_client->didFail(ResourceError());
+ m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, request.url().string(), "Cross origin requests are not supported."));
return;
}
@@ -88,7 +88,7 @@ DocumentThreadableLoader::DocumentThreadableLoader(Document* document, Threadabl
if (!m_options.forcePreflight && isSimpleCrossOriginAccessRequest(crossOriginRequest->httpMethod(), crossOriginRequest->httpHeaderFields()))
makeSimpleCrossOriginAccessRequest(*crossOriginRequest);
else {
- m_actualRequest.set(crossOriginRequest.release());
+ m_actualRequest = crossOriginRequest.release();
if (CrossOriginPreflightResultCache::shared().canSkipPreflight(document->securityOrigin()->toString(), m_actualRequest->url(), m_options.allowCredentials, m_actualRequest->httpMethod(), m_actualRequest->httpHeaderFields()))
preflightSuccess();
@@ -103,7 +103,7 @@ void DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest(const Resource
// Cross-origin requests are only defined for HTTP. We would catch this when checking response headers later, but there is no reason to send a request that's guaranteed to be denied.
if (!request.url().protocolInHTTPFamily()) {
- m_client->didFail(ResourceError());
+ m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, request.url().string(), "Cross origin requests are only supported for HTTP."));
return;
}
@@ -186,25 +186,26 @@ void DocumentThreadableLoader::didReceiveResponse(SubresourceLoader* loader, con
ASSERT(m_client);
ASSERT_UNUSED(loader, loader == m_loader);
+ String accessControlErrorDescription;
if (m_actualRequest) {
- if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin())) {
- preflightFailure();
+ if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin(), accessControlErrorDescription)) {
+ preflightFailure(response.url(), accessControlErrorDescription);
return;
}
OwnPtr<CrossOriginPreflightResultCacheItem> preflightResult(new CrossOriginPreflightResultCacheItem(m_options.allowCredentials));
- if (!preflightResult->parse(response)
- || !preflightResult->allowsCrossOriginMethod(m_actualRequest->httpMethod())
- || !preflightResult->allowsCrossOriginHeaders(m_actualRequest->httpHeaderFields())) {
- preflightFailure();
+ if (!preflightResult->parse(response, accessControlErrorDescription)
+ || !preflightResult->allowsCrossOriginMethod(m_actualRequest->httpMethod(), accessControlErrorDescription)
+ || !preflightResult->allowsCrossOriginHeaders(m_actualRequest->httpHeaderFields(), accessControlErrorDescription)) {
+ preflightFailure(response.url(), accessControlErrorDescription);
return;
}
CrossOriginPreflightResultCache::shared().appendEntry(m_document->securityOrigin()->toString(), m_actualRequest->url(), preflightResult.release());
} else {
if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessControl) {
- if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin())) {
- m_client->didFail(ResourceError());
+ if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin(), accessControlErrorDescription)) {
+ m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, response.url().string(), accessControlErrorDescription));
return;
}
}
@@ -290,10 +291,10 @@ void DocumentThreadableLoader::preflightSuccess()
loadRequest(*actualRequest, SkipSecurityCheck);
}
-void DocumentThreadableLoader::preflightFailure()
+void DocumentThreadableLoader::preflightFailure(const String& url, const String& errorDescription)
{
m_actualRequest = 0; // Prevent didFinishLoading() from bypassing access check.
- m_client->didFail(ResourceError());
+ m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, url, errorDescription));
}
void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, SecurityCheckPolicy securityCheck)
diff --git a/WebCore/loader/DocumentThreadableLoader.h b/WebCore/loader/DocumentThreadableLoader.h
index 48d1551..9800b9a 100644
--- a/WebCore/loader/DocumentThreadableLoader.h
+++ b/WebCore/loader/DocumentThreadableLoader.h
@@ -43,6 +43,7 @@ namespace WebCore {
class Document;
class KURL;
class ResourceRequest;
+ class String;
class ThreadableLoaderClient;
class DocumentThreadableLoader : public RefCounted<DocumentThreadableLoader>, public ThreadableLoader, private SubresourceLoaderClient {
@@ -84,7 +85,7 @@ namespace WebCore {
void makeSimpleCrossOriginAccessRequest(const ResourceRequest& request);
void makeCrossOriginAccessRequestWithPreflight(const ResourceRequest& request);
void preflightSuccess();
- void preflightFailure();
+ void preflightFailure(const String& url, const String& errorDescription);
void loadRequest(const ResourceRequest&, SecurityCheckPolicy);
bool isAllowedRedirect(const KURL&);
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index bdf7298..7b7487f 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -462,6 +462,7 @@ void FrameLoader::stopLoading(UnloadEventPolicy unloadEventPolicy, DatabasePolic
m_frame->domWindow()->dispatchEvent(PageTransitionEvent::create(eventNames().pagehideEvent, m_frame->document()->inPageCache()), m_frame->document());
if (!m_frame->document()->inPageCache())
m_frame->domWindow()->dispatchEvent(Event::create(eventNames().unloadEvent, false, false), m_frame->domWindow()->document());
+ m_frameLoadTimeline.unloadEventEnd = currentTime();
}
m_pageDismissalEventBeingDispatched = false;
if (m_frame->document())
@@ -826,7 +827,7 @@ void FrameLoader::startIconLoader()
// This is either a reload or the icon database said "yes, load the icon", so kick off the load!
if (!m_iconLoader)
- m_iconLoader.set(IconLoader::create(m_frame).release());
+ m_iconLoader = IconLoader::create(m_frame);
m_iconLoader->startLoading();
}
@@ -1530,6 +1531,9 @@ void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType t
if (m_pageDismissalEventBeingDispatched)
return;
+ m_frameLoadTimeline = FrameLoadTimeline();
+ m_frameLoadTimeline.navigationStart = currentTime();
+
policyChecker()->setLoadType(type);
RefPtr<FormState> formState = prpFormState;
bool isFormSubmission = formState;
@@ -2644,6 +2648,9 @@ String FrameLoader::userAgent(const KURL& url) const
void FrameLoader::handledOnloadEvents()
{
m_client->dispatchDidHandleOnloadEvents();
+
+ m_loadType = FrameLoadTypeStandard;
+
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
if (documentLoader())
documentLoader()->applicationCacheHost()->stopDeferringEvents();
@@ -2716,6 +2723,13 @@ void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp
applyUserAgent(request);
+ // If we inherit cache policy from a main resource, we use the DocumentLoader's
+ // original request cache policy for two reasons:
+ // 1. For POST requests, we mutate the cache policy for the main resource,
+ // but we do not want this to apply to subresources
+ // 2. Delegates that modify the cache policy using willSendRequest: should
+ // not affect any other resources. Such changes need to be done
+ // per request.
if (loadType == FrameLoadTypeReload) {
request.setCachePolicy(ReloadIgnoringCacheData);
request.setHTTPHeaderField("Cache-Control", "max-age=0");
@@ -2723,8 +2737,12 @@ void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp
request.setCachePolicy(ReloadIgnoringCacheData);
request.setHTTPHeaderField("Cache-Control", "no-cache");
request.setHTTPHeaderField("Pragma", "no-cache");
- } else if (isBackForwardLoadType(loadType) && !request.url().protocolIs("https"))
+ } else if (request.isConditional())
+ request.setCachePolicy(ReloadIgnoringCacheData);
+ else if (isBackForwardLoadType(loadType) && !request.url().protocolIs("https"))
request.setCachePolicy(ReturnCacheDataElseLoad);
+ else if (!mainResource && documentLoader()->isLoadingInAPISense())
+ request.setCachePolicy(documentLoader()->originalRequest().cachePolicy());
if (mainResource)
request.setHTTPAccept(defaultAcceptHeader);
@@ -2823,17 +2841,6 @@ unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest& requ
ResourceRequest initialRequest = request;
initialRequest.setTimeoutInterval(10);
- // Use the original request's cache policy for two reasons:
- // 1. For POST requests, we mutate the cache policy for the main resource,
- // but we do not want this to apply to subresources
- // 2. Delegates that modify the cache policy using willSendRequest: should
- // not affect any other resources. Such changes need to be done
- // per request.
- if (initialRequest.isConditional())
- initialRequest.setCachePolicy(ReloadIgnoringCacheData);
- else
- initialRequest.setCachePolicy(originalRequest().cachePolicy());
-
if (!referrer.isEmpty())
initialRequest.setHTTPReferrer(referrer);
addHTTPOriginIfNeeded(initialRequest, outgoingOrigin());
@@ -2841,6 +2848,8 @@ unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest& requ
if (Page* page = m_frame->page())
initialRequest.setFirstPartyForCookies(page->mainFrame()->loader()->documentLoader()->request().url());
initialRequest.setHTTPUserAgent(client()->userAgent(request.url()));
+
+ addExtraFieldsToSubresourceRequest(initialRequest);
unsigned long identifier = 0;
ResourceRequest newRequest(initialRequest);
diff --git a/WebCore/loader/FrameLoader.h b/WebCore/loader/FrameLoader.h
index e157850..491e6ef 100644
--- a/WebCore/loader/FrameLoader.h
+++ b/WebCore/loader/FrameLoader.h
@@ -197,6 +197,8 @@ public:
void didChangeIcons(DocumentLoader*);
FrameLoadType loadType() const;
+ FrameLoadTimeline* frameLoadTimeline() { return &m_frameLoadTimeline; }
+
CachePolicy subresourceCachePolicy() const;
void didFirstLayout();
@@ -448,6 +450,7 @@ private:
FrameState m_state;
FrameLoadType m_loadType;
+ FrameLoadTimeline m_frameLoadTimeline;
// Document loaders for the three phases of frame loading. Note that while
// a new request is being loaded, the old document loader may still be referenced.
diff --git a/WebCore/loader/FrameLoaderTypes.h b/WebCore/loader/FrameLoaderTypes.h
index 016de19..b1388a5 100644
--- a/WebCore/loader/FrameLoaderTypes.h
+++ b/WebCore/loader/FrameLoaderTypes.h
@@ -60,6 +60,21 @@ namespace WebCore {
FrameLoadTypeBackWMLDeckNotAccessible
};
+ struct FrameLoadTimeline {
+ FrameLoadTimeline()
+ : navigationStart(0)
+ , unloadEventEnd(0)
+ , loadEventStart(0)
+ , loadEventEnd(0)
+ {
+ }
+
+ double navigationStart;
+ double unloadEventEnd;
+ double loadEventStart;
+ double loadEventEnd;
+ };
+
enum NavigationType {
NavigationTypeLinkClicked,
NavigationTypeFormSubmitted,
diff --git a/WebCore/loader/ImageLoader.cpp b/WebCore/loader/ImageLoader.cpp
index a95d35a..d169d3e 100644
--- a/WebCore/loader/ImageLoader.cpp
+++ b/WebCore/loader/ImageLoader.cpp
@@ -27,6 +27,8 @@
#include "DocLoader.h"
#include "Document.h"
#include "Element.h"
+#include "HTMLNames.h"
+#include "HTMLObjectElement.h"
#include "RenderImage.h"
#if !ASSERT_DISABLED
@@ -255,6 +257,9 @@ void ImageLoader::dispatchPendingBeforeLoadEvent()
m_image = 0;
}
loadEventSender().cancelEvent(this);
+
+ if (m_element->hasTagName(HTMLNames::objectTag))
+ static_cast<HTMLObjectElement*>(m_element)->renderFallbackContent();
}
void ImageLoader::dispatchPendingLoadEvent()
diff --git a/WebCore/loader/SubresourceLoader.cpp b/WebCore/loader/SubresourceLoader.cpp
index 9c2959b..7aef353 100644
--- a/WebCore/loader/SubresourceLoader.cpp
+++ b/WebCore/loader/SubresourceLoader.cpp
@@ -84,17 +84,6 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc
newRequest.setHTTPReferrer(fl->outgoingReferrer());
FrameLoader::addHTTPOriginIfNeeded(newRequest, fl->outgoingOrigin());
- // Use the original request's cache policy for two reasons:
- // 1. For POST requests, we mutate the cache policy for the main resource,
- // but we do not want this to apply to subresources
- // 2. Delegates that modify the cache policy using willSendRequest: should
- // not affect any other resources. Such changes need to be done
- // per request.
- if (newRequest.isConditional())
- newRequest.setCachePolicy(ReloadIgnoringCacheData);
- else
- newRequest.setCachePolicy(fl->originalRequest().cachePolicy());
-
fl->addExtraFieldsToSubresourceRequest(newRequest);
RefPtr<SubresourceLoader> subloader(adoptRef(new SubresourceLoader(frame, client, sendResourceLoadCallbacks, shouldContentSniff)));
diff --git a/WebCore/loader/TextResourceDecoder.cpp b/WebCore/loader/TextResourceDecoder.cpp
index e4fd855..6d43d77 100644
--- a/WebCore/loader/TextResourceDecoder.cpp
+++ b/WebCore/loader/TextResourceDecoder.cpp
@@ -812,7 +812,7 @@ String TextResourceDecoder::decode(const char* data, size_t len)
ASSERT(m_encoding.isValid());
if (!m_codec)
- m_codec.set(newTextCodec(m_encoding).release());
+ m_codec = newTextCodec(m_encoding);
if (m_buffer.isEmpty())
return m_codec->decode(data + lengthOfBOM, len - lengthOfBOM, false, m_contentType == XML, m_sawError);
@@ -842,7 +842,7 @@ String TextResourceDecoder::flush()
}
if (!m_codec)
- m_codec.set(newTextCodec(m_encoding).release());
+ m_codec = newTextCodec(m_encoding);
String result = m_codec->decode(m_buffer.data(), m_buffer.size(), true, m_contentType == XML && !m_useLenientXMLDecoding, m_sawError);
m_buffer.clear();
diff --git a/WebCore/loader/appcache/ApplicationCacheGroup.cpp b/WebCore/loader/appcache/ApplicationCacheGroup.cpp
index 526043b..3d1199d 100644
--- a/WebCore/loader/appcache/ApplicationCacheGroup.cpp
+++ b/WebCore/loader/appcache/ApplicationCacheGroup.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
+ * Copyright (C) 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
@@ -45,12 +45,20 @@
#include "Settings.h"
#include <wtf/HashMap.h>
+#if ENABLE(INSPECTOR)
+#include "InspectorApplicationCacheAgent.h"
+#include "InspectorController.h"
+#include "ProgressTracker.h"
+#endif
+
namespace WebCore {
ApplicationCacheGroup::ApplicationCacheGroup(const KURL& manifestURL, bool isCopy)
: m_manifestURL(manifestURL)
, m_updateStatus(Idle)
, m_downloadingPendingMasterResourceLoadersCount(0)
+ , m_progressTotal(0)
+ , m_progressDone(0)
, m_frame(0)
, m_storageID(0)
, m_isObsolete(false)
@@ -368,12 +376,30 @@ void ApplicationCacheGroup::cacheDestroyed(ApplicationCache* cache)
}
}
+#if ENABLE(INSPECTOR)
+static void inspectorUpdateApplicationCacheStatus(Frame* frame)
+{
+ if (!frame)
+ return;
+
+ if (Page *page = frame->page()) {
+ if (InspectorApplicationCacheAgent* applicationCacheAgent = page->inspectorController()->applicationCacheAgent()) {
+ ApplicationCacheHost::Status status = frame->loader()->documentLoader()->applicationCacheHost()->status();
+ applicationCacheAgent->updateApplicationCacheStatus(status);
+ }
+ }
+}
+#endif
+
void ApplicationCacheGroup::setNewestCache(PassRefPtr<ApplicationCache> newestCache)
{
m_newestCache = newestCache;
m_caches.add(m_newestCache.get());
m_newestCache->setGroup(this);
+#if ENABLE(INSPECTOR)
+ inspectorUpdateApplicationCacheStatus(m_frame);
+#endif
}
void ApplicationCacheGroup::makeObsolete()
@@ -384,6 +410,9 @@ void ApplicationCacheGroup::makeObsolete()
m_isObsolete = true;
cacheStorage().cacheGroupMadeObsolete(this);
ASSERT(!m_storageID);
+#if ENABLE(INSPECTOR)
+ inspectorUpdateApplicationCacheStatus(m_frame);
+#endif
}
void ApplicationCacheGroup::update(Frame* frame, ApplicationCacheUpdateOption updateOption)
@@ -410,7 +439,7 @@ void ApplicationCacheGroup::update(Frame* frame, ApplicationCacheUpdateOption up
ASSERT(!m_frame);
m_frame = frame;
- m_updateStatus = Checking;
+ setUpdateStatus(Checking);
postListenerTask(ApplicationCacheHost::CHECKING_EVENT, m_associatedDocumentLoaders);
if (!m_newestCache) {
@@ -442,12 +471,43 @@ PassRefPtr<ResourceHandle> ApplicationCacheGroup::createResourceHandle(const KUR
request.setHTTPHeaderField("If-None-Match", eTag);
}
}
-
- return ResourceHandle::create(request, this, m_frame, false, true);
+
+ RefPtr<ResourceHandle> handle = ResourceHandle::create(request, this, m_frame, false, true);
+#if ENABLE(INSPECTOR)
+ // Because willSendRequest only gets called during redirects, we initialize
+ // the identifier and the first willSendRequest here.
+ m_currentResourceIdentifier = m_frame->page()->progress()->createUniqueIdentifier();
+ if (Page* page = m_frame->page()) {
+ InspectorController* inspectorController = page->inspectorController();
+ inspectorController->identifierForInitialRequest(m_currentResourceIdentifier, m_frame->loader()->documentLoader(), handle->request());
+ ResourceResponse redirectResponse = ResourceResponse();
+ inspectorController->willSendRequest(m_currentResourceIdentifier, request, redirectResponse);
+ }
+#endif
+ return handle;
+}
+
+#if ENABLE(INSPECTOR)
+void ApplicationCacheGroup::willSendRequest(ResourceHandle*, ResourceRequest& request, const ResourceResponse& redirectResponse)
+{
+ // This only gets called by ResourceHandleMac if there is a redirect.
+ if (Page* page = m_frame->page())
+ page->inspectorController()->willSendRequest(m_currentResourceIdentifier, request, redirectResponse);
}
+#endif
void ApplicationCacheGroup::didReceiveResponse(ResourceHandle* handle, const ResourceResponse& response)
{
+#if ENABLE(INSPECTOR)
+ if (Page* page = m_frame->page()) {
+ if (handle == m_manifestHandle) {
+ if (InspectorApplicationCacheAgent* applicationCacheAgent = page->inspectorController()->applicationCacheAgent())
+ applicationCacheAgent->didReceiveManifestResponse(m_currentResourceIdentifier, response);
+ } else
+ page->inspectorController()->didReceiveResponse(m_currentResourceIdentifier, response);
+ }
+#endif
+
if (handle == m_manifestHandle) {
didReceiveManifestResponse(response);
return;
@@ -512,8 +572,15 @@ void ApplicationCacheGroup::didReceiveResponse(ResourceHandle* handle, const Res
m_currentResource = ApplicationCacheResource::create(url, response, type);
}
-void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* data, int length, int)
+void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* data, int length, int lengthReceived)
{
+#if ENABLE(INSPECTOR)
+ if (Page* page = m_frame->page())
+ page->inspectorController()->didReceiveContentLength(m_currentResourceIdentifier, lengthReceived);
+#else
+ UNUSED_PARAM(lengthReceived);
+#endif
+
if (handle == m_manifestHandle) {
didReceiveManifestData(data, length);
return;
@@ -527,6 +594,11 @@ void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* d
void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle)
{
+#if ENABLE(INSPECTOR)
+ if (Page* page = m_frame->page())
+ page->inspectorController()->didFinishLoading(m_currentResourceIdentifier);
+#endif
+
if (handle == m_manifestHandle) {
didFinishLoadingManifest();
return;
@@ -546,8 +618,15 @@ void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle)
startLoadingEntry();
}
-void ApplicationCacheGroup::didFail(ResourceHandle* handle, const ResourceError&)
+void ApplicationCacheGroup::didFail(ResourceHandle* handle, const ResourceError& error)
{
+#if ENABLE(INSPECTOR)
+ if (Page* page = m_frame->page())
+ page->inspectorController()->didFailLoading(m_currentResourceIdentifier, error);
+#else
+ UNUSED_PARAM(error);
+#endif
+
if (handle == m_manifestHandle) {
cacheUpdateFailed();
return;
@@ -648,7 +727,7 @@ void ApplicationCacheGroup::didFinishLoadingManifest()
associateDocumentLoaderWithCache(*iter, m_cacheBeingUpdated.get());
// We have the manifest, now download the resources.
- m_updateStatus = Downloading;
+ setUpdateStatus(Downloading);
postListenerTask(ApplicationCacheHost::DOWNLOADING_EVENT, m_associatedDocumentLoaders);
@@ -674,7 +753,10 @@ void ApplicationCacheGroup::didFinishLoadingManifest()
m_cacheBeingUpdated->setOnlineWhitelist(manifest.onlineWhitelistedURLs);
m_cacheBeingUpdated->setFallbackURLs(manifest.fallbackURLs);
m_cacheBeingUpdated->setAllowsAllNetworkRequests(manifest.allowAllNetworkRequests);
-
+
+ m_progressTotal = m_pendingEntries.size();
+ m_progressDone = 0;
+
startLoadingEntry();
}
@@ -719,7 +801,7 @@ void ApplicationCacheGroup::manifestNotFound()
}
m_downloadingPendingMasterResourceLoadersCount = 0;
- m_updateStatus = Idle;
+ setUpdateStatus(Idle);
m_frame = 0;
if (m_caches.isEmpty()) {
@@ -782,7 +864,12 @@ void ApplicationCacheGroup::checkIfLoadIsComplete()
// New cache stored, now remove the old cache.
if (oldNewestCache)
cacheStorage().remove(oldNewestCache.get());
- // Fire the success events.
+
+ // Fire the final progress event.
+ ASSERT(m_progressDone == m_progressTotal);
+ postListenerTask(ApplicationCacheHost::PROGRESS_EVENT, m_progressTotal, m_progressDone, m_associatedDocumentLoaders);
+
+ // Fire the success event.
postListenerTask(isUpgradeAttempt ? ApplicationCacheHost::UPDATEREADY_EVENT : ApplicationCacheHost::CACHED_EVENT, m_associatedDocumentLoaders);
} else {
if (cacheStorage().isMaximumSizeReached() && !m_calledReachedMaxAppCacheSize) {
@@ -832,7 +919,7 @@ void ApplicationCacheGroup::checkIfLoadIsComplete()
// Empty cache group's list of pending master entries.
m_pendingMasterResourceLoaders.clear();
m_completionType = None;
- m_updateStatus = Idle;
+ setUpdateStatus(Idle);
m_frame = 0;
m_calledReachedMaxAppCacheSize = false;
}
@@ -849,7 +936,8 @@ void ApplicationCacheGroup::startLoadingEntry()
EntryMap::const_iterator it = m_pendingEntries.begin();
- postListenerTask(ApplicationCacheHost::PROGRESS_EVENT, m_associatedDocumentLoaders);
+ postListenerTask(ApplicationCacheHost::PROGRESS_EVENT, m_progressTotal, m_progressDone, m_associatedDocumentLoaders);
+ m_progressDone++;
ASSERT(!m_currentHandle);
@@ -948,9 +1036,9 @@ void ApplicationCacheGroup::scheduleReachedMaxAppCacheSizeCallback()
class CallCacheListenerTask : public ScriptExecutionContext::Task {
public:
- static PassOwnPtr<CallCacheListenerTask> create(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID)
+ static PassOwnPtr<CallCacheListenerTask> create(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone)
{
- return new CallCacheListenerTask(loader, eventID);
+ return adoptPtr(new CallCacheListenerTask(loader, eventID, progressTotal, progressDone));
}
virtual void performTask(ScriptExecutionContext* context)
@@ -963,28 +1051,32 @@ public:
ASSERT(frame->loader()->documentLoader() == m_documentLoader.get());
- m_documentLoader->applicationCacheHost()->notifyDOMApplicationCache(m_eventID);
+ m_documentLoader->applicationCacheHost()->notifyDOMApplicationCache(m_eventID, m_progressTotal, m_progressDone);
}
private:
- CallCacheListenerTask(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID)
+ CallCacheListenerTask(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone)
: m_documentLoader(loader)
, m_eventID(eventID)
+ , m_progressTotal(progressTotal)
+ , m_progressDone(progressDone)
{
}
RefPtr<DocumentLoader> m_documentLoader;
ApplicationCacheHost::EventID m_eventID;
+ int m_progressTotal;
+ int m_progressDone;
};
-void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, const HashSet<DocumentLoader*>& loaderSet)
+void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone, const HashSet<DocumentLoader*>& loaderSet)
{
HashSet<DocumentLoader*>::const_iterator loaderSetEnd = loaderSet.end();
for (HashSet<DocumentLoader*>::const_iterator iter = loaderSet.begin(); iter != loaderSetEnd; ++iter)
- postListenerTask(eventID, *iter);
+ postListenerTask(eventID, progressTotal, progressDone, *iter);
}
-void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, DocumentLoader* loader)
+void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone, DocumentLoader* loader)
{
Frame* frame = loader->frame();
if (!frame)
@@ -992,7 +1084,15 @@ void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID event
ASSERT(frame->loader()->documentLoader() == loader);
- frame->document()->postTask(CallCacheListenerTask::create(loader, eventID));
+ frame->document()->postTask(CallCacheListenerTask::create(loader, eventID, progressTotal, progressDone));
+}
+
+void ApplicationCacheGroup::setUpdateStatus(UpdateStatus status)
+{
+ m_updateStatus = status;
+#if ENABLE(INSPECTOR)
+ inspectorUpdateApplicationCacheStatus(m_frame);
+#endif
}
void ApplicationCacheGroup::clearStorageID()
diff --git a/WebCore/loader/appcache/ApplicationCacheGroup.h b/WebCore/loader/appcache/ApplicationCacheGroup.h
index 8df52cc..9b8a6ab 100644
--- a/WebCore/loader/appcache/ApplicationCacheGroup.h
+++ b/WebCore/loader/appcache/ApplicationCacheGroup.h
@@ -67,12 +67,13 @@ public:
const KURL& manifestURL() const { return m_manifestURL; }
UpdateStatus updateStatus() const { return m_updateStatus; }
+ void setUpdateStatus(UpdateStatus status);
void setStorageID(unsigned storageID) { m_storageID = storageID; }
unsigned storageID() const { return m_storageID; }
void clearStorageID();
- void update(Frame*, ApplicationCacheUpdateOption); // FIXME: Frame should not bee needed when updating witout browsing context.
+ void update(Frame*, ApplicationCacheUpdateOption); // FIXME: Frame should not be needed when updating without browsing context.
void cacheDestroyed(ApplicationCache*);
bool cacheIsBeingUpdated(const ApplicationCache* cache) const { return cache == m_cacheBeingUpdated; }
@@ -91,8 +92,11 @@ public:
bool isCopy() const { return m_isCopy; }
private:
- static void postListenerTask(ApplicationCacheHost::EventID, const HashSet<DocumentLoader*>&);
- static void postListenerTask(ApplicationCacheHost::EventID, DocumentLoader*);
+ static void postListenerTask(ApplicationCacheHost::EventID id, const HashSet<DocumentLoader*>& set) { postListenerTask(id, 0, 0, set); }
+ static void postListenerTask(ApplicationCacheHost::EventID id, DocumentLoader* loader) { postListenerTask(id, 0, 0, loader); }
+ static void postListenerTask(ApplicationCacheHost::EventID, int progressTotal, int progressDone, const HashSet<DocumentLoader*>&);
+ static void postListenerTask(ApplicationCacheHost::EventID, int progressTotal, int progressDone, DocumentLoader*);
+
void scheduleReachedMaxAppCacheSizeCallback();
PassRefPtr<ResourceHandle> createResourceHandle(const KURL&, ApplicationCacheResource* newestCachedResource);
@@ -101,8 +105,11 @@ private:
// the existing client callback cannot be used, so assume that any client that enables application cache also wants it to use credential storage.
virtual bool shouldUseCredentialStorage(ResourceHandle*) { return true; }
+#if ENABLE(INSPECTOR)
+ virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&);
+#endif
virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
- virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
+ virtual void didReceiveData(ResourceHandle*, const char*, int length, int lengthReceived);
virtual void didFinishLoading(ResourceHandle*);
virtual void didFail(ResourceHandle*, const ResourceError&);
@@ -147,6 +154,10 @@ private:
// The URLs and types of pending cache entries.
typedef HashMap<String, unsigned> EntryMap;
EntryMap m_pendingEntries;
+
+ // The total number of items to be processed to update the cache group and the number that have been done.
+ int m_progressTotal;
+ int m_progressDone;
// Frame used for fetching resources when updating.
// FIXME: An update started by a particular frame should not stop if it is destroyed, but there are other frames associated with the same cache group.
@@ -175,7 +186,11 @@ private:
RefPtr<ResourceHandle> m_currentHandle;
RefPtr<ApplicationCacheResource> m_currentResource;
-
+
+#if ENABLE(INSPECTOR)
+ unsigned long m_currentResourceIdentifier;
+#endif
+
RefPtr<ApplicationCacheResource> m_manifestResource;
RefPtr<ResourceHandle> m_manifestHandle;
diff --git a/WebCore/loader/appcache/ApplicationCacheHost.cpp b/WebCore/loader/appcache/ApplicationCacheHost.cpp
index fc98746..f63de55 100644
--- a/WebCore/loader/appcache/ApplicationCacheHost.cpp
+++ b/WebCore/loader/appcache/ApplicationCacheHost.cpp
@@ -37,6 +37,7 @@
#include "FrameLoader.h"
#include "FrameLoaderClient.h"
#include "MainResourceLoader.h"
+#include "ProgressEvent.h"
#include "ResourceLoader.h"
#include "ResourceRequest.h"
#include "Settings.h"
@@ -228,35 +229,42 @@ void ApplicationCacheHost::setDOMApplicationCache(DOMApplicationCache* domApplic
m_domApplicationCache = domApplicationCache;
}
-void ApplicationCacheHost::notifyDOMApplicationCache(EventID id)
+void ApplicationCacheHost::notifyDOMApplicationCache(EventID id, int total, int done)
{
if (m_defersEvents) {
- // Events are deferred until document.onload has fired.
- m_deferredEvents.append(id);
+ // Event dispatching is deferred until document.onload has fired.
+ m_deferredEvents.append(DeferredEvent(id, total, done));
return;
}
- if (m_domApplicationCache) {
- ExceptionCode ec = 0;
- m_domApplicationCache->dispatchEvent(Event::create(DOMApplicationCache::toEventType(id), false, false), ec);
- ASSERT(!ec);
- }
+ dispatchDOMEvent(id, total, done);
}
void ApplicationCacheHost::stopDeferringEvents()
{
RefPtr<DocumentLoader> protect(documentLoader());
for (unsigned i = 0; i < m_deferredEvents.size(); ++i) {
- EventID id = m_deferredEvents[i];
- if (m_domApplicationCache) {
- ExceptionCode ec = 0;
- m_domApplicationCache->dispatchEvent(Event::create(DOMApplicationCache::toEventType(id), false, false), ec);
- ASSERT(!ec);
- }
+ const DeferredEvent& deferred = m_deferredEvents[i];
+ dispatchDOMEvent(deferred.eventID, deferred.progressTotal, deferred.progressDone);
}
m_deferredEvents.clear();
m_defersEvents = false;
}
+void ApplicationCacheHost::dispatchDOMEvent(EventID id, int total, int done)
+{
+ if (m_domApplicationCache) {
+ const AtomicString& eventType = DOMApplicationCache::toEventType(id);
+ ExceptionCode ec = 0;
+ RefPtr<Event> event;
+ if (id == PROGRESS_EVENT)
+ event = ProgressEvent::create(eventType, true, done, total);
+ else
+ event = Event::create(eventType, false, false);
+ m_domApplicationCache->dispatchEvent(event, ec);
+ ASSERT(!ec);
+ }
+}
+
void ApplicationCacheHost::setCandidateApplicationCacheGroup(ApplicationCacheGroup* group)
{
ASSERT(!m_applicationCache);
diff --git a/WebCore/loader/appcache/ApplicationCacheHost.h b/WebCore/loader/appcache/ApplicationCacheHost.h
index 52d4d40..a5b55e9 100644
--- a/WebCore/loader/appcache/ApplicationCacheHost.h
+++ b/WebCore/loader/appcache/ApplicationCacheHost.h
@@ -40,7 +40,7 @@
#include <wtf/Vector.h>
namespace WebCore {
-
+ class ApplicationCache;
class DOMApplicationCache;
class DocumentLoader;
class KURL;
@@ -52,7 +52,6 @@ namespace WebCore {
#if PLATFORM(CHROMIUM)
class ApplicationCacheHostInternal;
#else
- class ApplicationCache;
class ApplicationCacheGroup;
class ApplicationCacheResource;
class ApplicationCacheStorage;
@@ -108,23 +107,35 @@ namespace WebCore {
bool update();
bool swapCache();
- void setDOMApplicationCache(DOMApplicationCache* domApplicationCache);
- void notifyDOMApplicationCache(EventID id);
+ void setDOMApplicationCache(DOMApplicationCache*);
+ void notifyDOMApplicationCache(EventID, int progressTotal, int progressDone);
void stopDeferringEvents(); // Also raises the events that have been queued up.
+ ApplicationCache* applicationCacheForInspector() const { return applicationCache(); }
+
private:
bool isApplicationCacheEnabled();
- DocumentLoader* documentLoader() { return m_documentLoader; }
+ DocumentLoader* documentLoader() const { return m_documentLoader; }
+
+ struct DeferredEvent {
+ EventID eventID;
+ int progressTotal;
+ int progressDone;
+ DeferredEvent(EventID id, int total, int done) : eventID(id), progressTotal(total), progressDone(done) { }
+ };
DOMApplicationCache* m_domApplicationCache;
DocumentLoader* m_documentLoader;
bool m_defersEvents; // Events are deferred until after document onload.
- Vector<EventID> m_deferredEvents;
+ Vector<DeferredEvent> m_deferredEvents;
+
+ void dispatchDOMEvent(EventID, int progressTotal, int progressDone);
#if PLATFORM(CHROMIUM)
friend class ApplicationCacheHostInternal;
OwnPtr<ApplicationCacheHostInternal> m_internal;
+ ApplicationCache* applicationCache() const { return 0; } // FIXME: Implement for Chromium Web Inspector Support.
#else
friend class ApplicationCacheGroup;
friend class ApplicationCacheStorage;
diff --git a/WebCore/loader/appcache/ApplicationCacheStorage.cpp b/WebCore/loader/appcache/ApplicationCacheStorage.cpp
index 59232a5..9a11307 100644
--- a/WebCore/loader/appcache/ApplicationCacheStorage.cpp
+++ b/WebCore/loader/appcache/ApplicationCacheStorage.cpp
@@ -999,7 +999,7 @@ bool ApplicationCacheStorage::storeCopyOfCache(const String& cacheDirectory, App
}
// Now create a new cache group.
- OwnPtr<ApplicationCacheGroup> groupCopy(new ApplicationCacheGroup(cache->group()->manifestURL(), true));
+ OwnPtr<ApplicationCacheGroup> groupCopy(adoptPtr(new ApplicationCacheGroup(cache->group()->manifestURL(), true)));
groupCopy->setNewestCache(cacheCopy);
diff --git a/WebCore/make-export-file-generator b/WebCore/make-export-file-generator
new file mode 100755
index 0000000..7ee14c9
--- /dev/null
+++ b/WebCore/make-export-file-generator
@@ -0,0 +1,57 @@
+#!/usr/bin/env ruby
+
+# 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.
+
+input_file = ARGV[0]
+output_file = ARGV[1]
+
+require 'erb'
+
+def line_for_output line
+ return line.chomp if line =~ /#/
+ " printf(\"#{line.chomp}\\n\");"
+end
+
+TEMPLATE = <<-EOF
+#include "config.h"
+#include <stdio.h>
+
+int main(int, char**)
+{
+<%- input.each_line do |line| -%>
+<%= line_for_output line %>
+<%- end -%>
+
+ return 0;
+}
+EOF
+
+File.open(output_file, "w") do |output|
+ File.open(input_file) do |input|
+ renderer = ERB.new(TEMPLATE, 0, "-")
+ output << renderer.result(binding)
+ end
+end
+
+STDERR.puts "Wrote output to #{output_file}"
diff --git a/WebCore/mathml/MathMLElement.cpp b/WebCore/mathml/MathMLElement.cpp
index b93ff9f..30d02da 100644
--- a/WebCore/mathml/MathMLElement.cpp
+++ b/WebCore/mathml/MathMLElement.cpp
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved.
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 François Sausset (sausset@gmail.com). All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -46,6 +47,30 @@ PassRefPtr<MathMLElement> MathMLElement::create(const QualifiedName& tagName, Do
{
return adoptRef(new MathMLElement(tagName, document));
}
+
+bool MathMLElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const
+{
+ if (attrName == MathMLNames::mathcolorAttr || attrName == MathMLNames::mathbackgroundAttr) {
+ result = eMathML;
+ return false;
+ }
+ return StyledElement::mapToEntry(attrName, result);
+}
+
+void MathMLElement::parseMappedAttribute(Attribute* attr)
+{
+ if (attr->name() == MathMLNames::mathbackgroundAttr)
+ addCSSProperty(attr, CSSPropertyBackgroundColor, attr->value());
+ else if (attr->name() == MathMLNames::mathcolorAttr)
+ addCSSProperty(attr, CSSPropertyColor, attr->value());
+ else if (attr->name() == MathMLNames::mathsizeAttr) {
+ // The following three values of mathsize are handled in WebCore/css/mathml.css
+ if (attr->value() != "normal" && attr->value() != "small" && attr->value() != "big")
+ addCSSProperty(attr, CSSPropertyFontSize, attr->value());
+ }
+ else
+ StyledElement::parseMappedAttribute(attr);
+}
}
diff --git a/WebCore/mathml/MathMLElement.h b/WebCore/mathml/MathMLElement.h
index 46cd7fd..7678f26 100644
--- a/WebCore/mathml/MathMLElement.h
+++ b/WebCore/mathml/MathMLElement.h
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved.
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 François Sausset (sausset@gmail.com). All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -41,6 +42,8 @@ protected:
private:
virtual bool isMathMLElement() const { return true; }
+ virtual bool mapToEntry(const QualifiedName&, MappedAttributeEntry&) const;
+ virtual void parseMappedAttribute(Attribute*);
};
}
diff --git a/WebCore/mathml/RenderMathMLFraction.cpp b/WebCore/mathml/RenderMathMLFraction.cpp
index 811c230..cd0681d 100644
--- a/WebCore/mathml/RenderMathMLFraction.cpp
+++ b/WebCore/mathml/RenderMathMLFraction.cpp
@@ -168,7 +168,7 @@ void RenderMathMLFraction::paint(PaintInfo& info, int tx, int ty)
info.context->setStrokeThickness(static_cast<float>(m_lineThickness));
info.context->setStrokeStyle(SolidStroke);
- info.context->setStrokeColor(Color(0, 0, 0), sRGBColorSpace);
+ info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), sRGBColorSpace);
info.context->drawLine(IntPoint(tx, ty), IntPoint(tx + offsetWidth(), ty));
diff --git a/WebCore/mathml/RenderMathMLSquareRoot.cpp b/WebCore/mathml/RenderMathMLSquareRoot.cpp
index 6802176..be62f57 100644
--- a/WebCore/mathml/RenderMathMLSquareRoot.cpp
+++ b/WebCore/mathml/RenderMathMLSquareRoot.cpp
@@ -117,7 +117,7 @@ void RenderMathMLSquareRoot::paint(PaintInfo& info, int tx, int ty)
info.context->setStrokeThickness(gRadicalLineThickness * style()->fontSize());
info.context->setStrokeStyle(SolidStroke);
- info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), sRGBColorSpace);
+ info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), DeviceColorSpace);
info.context->setLineJoin(MiterJoin);
info.context->setMiterLimit(style()->fontSize());
diff --git a/WebCore/mathml/mathattrs.in b/WebCore/mathml/mathattrs.in
index df2329a..55a25ed 100644
--- a/WebCore/mathml/mathattrs.in
+++ b/WebCore/mathml/mathattrs.in
@@ -6,6 +6,8 @@ attrsNullNamespace
close
denomalign
linethickness
+mathbackground
+mathcolor
mathsize
numalign
open
diff --git a/WebCore/mathml/mathtags.in b/WebCore/mathml/mathtags.in
index e9cc4ad..5bb369a 100644
--- a/WebCore/mathml/mathtags.in
+++ b/WebCore/mathml/mathtags.in
@@ -18,3 +18,10 @@ mo interfaceName=MathMLTextElement
mtext interfaceName=MathMLTextElement
msub interfaceName=MathMLElement
msup interfaceName=MathMLElement
+
+#if 0 // Curently only for MathMLNames used by HTMLTreeBuilder.
+ms
+mglyph
+malignmark
+annotation-xml
+#endif
diff --git a/WebCore/notifications/Notification.cpp b/WebCore/notifications/Notification.cpp
index 3684245..c1edab4 100644
--- a/WebCore/notifications/Notification.cpp
+++ b/WebCore/notifications/Notification.cpp
@@ -52,7 +52,7 @@ Notification::Notification(const KURL& url, ScriptExecutionContext* context, Exc
, m_presenter(provider)
{
ASSERT(m_presenter);
- if (m_presenter->checkPermission(context->url()) != NotificationPresenter::PermissionAllowed) {
+ if (m_presenter->checkPermission(context) != NotificationPresenter::PermissionAllowed) {
ec = SECURITY_ERR;
return;
}
@@ -73,7 +73,7 @@ Notification::Notification(const NotificationContents& contents, ScriptExecution
, m_presenter(provider)
{
ASSERT(m_presenter);
- if (m_presenter->checkPermission(context->url()) != NotificationPresenter::PermissionAllowed) {
+ if (m_presenter->checkPermission(context) != NotificationPresenter::PermissionAllowed) {
ec = SECURITY_ERR;
return;
}
diff --git a/WebCore/notifications/NotificationCenter.cpp b/WebCore/notifications/NotificationCenter.cpp
index 8089d87..f9672ad 100644
--- a/WebCore/notifications/NotificationCenter.cpp
+++ b/WebCore/notifications/NotificationCenter.cpp
@@ -49,14 +49,20 @@ int NotificationCenter::checkPermission()
{
if (!presenter())
return NotificationPresenter::PermissionDenied;
- return m_notificationPresenter->checkPermission(m_scriptExecutionContext->url());
+ return m_notificationPresenter->checkPermission(m_scriptExecutionContext);
}
void NotificationCenter::requestPermission(PassRefPtr<VoidCallback> callback)
{
if (!presenter())
return;
- m_notificationPresenter->requestPermission(m_scriptExecutionContext->securityOrigin(), callback);
+ m_notificationPresenter->requestPermission(m_scriptExecutionContext, callback);
+}
+
+void NotificationCenter::disconnectFrame()
+{
+ m_notificationPresenter->cancelRequestsForPermission(m_scriptExecutionContext);
+ m_notificationPresenter = 0;
}
} // namespace WebCore
diff --git a/WebCore/notifications/NotificationCenter.h b/WebCore/notifications/NotificationCenter.h
index ce20630..349e8a4 100644
--- a/WebCore/notifications/NotificationCenter.h
+++ b/WebCore/notifications/NotificationCenter.h
@@ -77,7 +77,7 @@ namespace WebCore {
int checkPermission();
void requestPermission(PassRefPtr<VoidCallback> callback);
- void disconnectFrame() { m_notificationPresenter = 0; }
+ void disconnectFrame();
private:
NotificationCenter(ScriptExecutionContext*, NotificationPresenter*);
diff --git a/WebCore/notifications/NotificationPresenter.h b/WebCore/notifications/NotificationPresenter.h
index 193eb2b..e3e7ee2 100644
--- a/WebCore/notifications/NotificationPresenter.h
+++ b/WebCore/notifications/NotificationPresenter.h
@@ -41,7 +41,7 @@ namespace WebCore {
class Document;
class Notification;
class KURL;
- class SecurityOrigin;
+ class ScriptExecutionContext;
class String;
class NotificationPresenter {
@@ -67,12 +67,15 @@ namespace WebCore {
virtual void notificationObjectDestroyed(Notification*) = 0;
// Requests user permission to show desktop notifications from a particular
- // origin. The callback parameter should be run when the user has
+ // script context. The callback parameter should be run when the user has
// made a decision.
- virtual void requestPermission(SecurityOrigin*, PassRefPtr<VoidCallback>) = 0;
+ virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>) = 0;
+
+ // Cancel all outstanding requests for the ScriptExecutionContext
+ virtual void cancelRequestsForPermission(ScriptExecutionContext*) = 0;
// Checks the current level of permission.
- virtual Permission checkPermission(const KURL&) = 0;
+ virtual Permission checkPermission(ScriptExecutionContext*) = 0;
};
} // namespace WebCore
diff --git a/WebCore/page/Chrome.cpp b/WebCore/page/Chrome.cpp
index 0124211..f2e1d9d 100644
--- a/WebCore/page/Chrome.cpp
+++ b/WebCore/page/Chrome.cpp
@@ -318,16 +318,6 @@ bool Chrome::shouldInterruptJavaScript()
return m_client->shouldInterruptJavaScript();
}
-void Chrome::registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title)
-{
- m_client->registerProtocolHandler(scheme, baseURL, url, title);
-}
-
-void Chrome::registerContentHandler(const String& mimeType, const String& baseURL, const String& url, const String& title)
-{
- m_client->registerContentHandler(mimeType, baseURL, url, title);
-}
-
IntRect Chrome::windowResizerRect() const
{
return m_client->windowResizerRect();
diff --git a/WebCore/page/Chrome.h b/WebCore/page/Chrome.h
index 88035a5..27bde83 100644
--- a/WebCore/page/Chrome.h
+++ b/WebCore/page/Chrome.h
@@ -121,9 +121,6 @@ namespace WebCore {
void setStatusbarText(Frame*, const String&);
bool shouldInterruptJavaScript();
- void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title);
- void registerContentHandler(const String& mimeType, const String& baseURL, const String& url, const String& title);
-
IntRect windowResizerRect() const;
void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
diff --git a/WebCore/page/ChromeClient.h b/WebCore/page/ChromeClient.h
index 64b9f26..8101c52 100644
--- a/WebCore/page/ChromeClient.h
+++ b/WebCore/page/ChromeClient.h
@@ -125,9 +125,6 @@ namespace WebCore {
virtual bool shouldInterruptJavaScript() = 0;
virtual bool tabsToLinks() const = 0;
- virtual void registerProtocolHandler(const String&, const String&, const String&, const String&) { }
- virtual void registerContentHandler(const String&, const String&, const String&, const String&) { }
-
virtual IntRect windowResizerRect() const = 0;
// Methods used by HostWindow.
@@ -143,6 +140,7 @@ namespace WebCore {
// End methods used by HostWindow.
virtual void scrollbarsModeDidChange() const = 0;
+ virtual bool shouldMissingPluginMessageBeButton() const { return false; }
virtual void missingPluginButtonClicked(Element*) const { }
virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags) = 0;
diff --git a/WebCore/page/DOMTimer.cpp b/WebCore/page/DOMTimer.cpp
index eb7f84e..f9178c9 100644
--- a/WebCore/page/DOMTimer.cpp
+++ b/WebCore/page/DOMTimer.cpp
@@ -136,17 +136,18 @@ void DOMTimer::fired()
}
// Delete timer before executing the action for one-shot timers.
- ScheduledAction* action = m_action.release();
+ OwnPtr<ScheduledAction> action = m_action.release();
// No access to member variables after this point.
delete this;
action->execute(context);
+
#if ENABLE(INSPECTOR)
if (InspectorTimelineAgent* timelineAgent = InspectorTimelineAgent::retrieve(context))
timelineAgent->didFireTimer();
#endif
- delete action;
+
timerNestingLevel = 0;
}
diff --git a/WebCore/page/DOMWindow.cpp b/WebCore/page/DOMWindow.cpp
index 6ecde3c..18eef41 100644
--- a/WebCore/page/DOMWindow.cpp
+++ b/WebCore/page/DOMWindow.cpp
@@ -78,8 +78,9 @@
#include "SuddenTermination.h"
#include "WebKitPoint.h"
#include <algorithm>
-#include <wtf/text/CString.h>
+#include <wtf/CurrentTime.h>
#include <wtf/MathExtras.h>
+#include <wtf/text/CString.h>
using std::min;
using std::max;
@@ -1444,7 +1445,11 @@ bool DOMWindow::removeEventListener(const AtomicString& eventType, EventListener
void DOMWindow::dispatchLoadEvent()
{
+ if (m_frame)
+ m_frame->loader()->frameLoadTimeline()->loadEventStart = currentTime();
dispatchEvent(Event::create(eventNames().loadEvent, false, false), document());
+ if (m_frame)
+ m_frame->loader()->frameLoadTimeline()->loadEventEnd = currentTime();
// For load events, send a separate load event to the enclosing frame only.
// This is a DOM extension and is independent of bubbling/capturing rules of
diff --git a/WebCore/page/DOMWindow.idl b/WebCore/page/DOMWindow.idl
index 20eab8b..f3cf9fe 100644
--- a/WebCore/page/DOMWindow.idl
+++ b/WebCore/page/DOMWindow.idl
@@ -305,6 +305,7 @@ module window {
attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchend;
attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchcancel;
+ attribute [Conditional=DEVICE_ORIENTATION] DeviceOrientationEventConstructor DeviceOrientationEvent;
attribute [Conditional=DEVICE_ORIENTATION] EventListener ondeviceorientation;
// EventTarget interface
@@ -552,11 +553,11 @@ module window {
attribute [JSCCustomGetter,EnabledAtRuntime] WebSocketConstructor WebSocket; // Usable with the new operator
#endif
- attribute PluginConstructor Plugin;
- attribute PluginArrayConstructor PluginArray;
+ attribute DOMPluginConstructor Plugin;
+ attribute DOMPluginArrayConstructor PluginArray;
- attribute MimeTypeConstructor MimeType;
- attribute MimeTypeArrayConstructor MimeTypeArray;
+ attribute DOMMimeTypeConstructor MimeType;
+ attribute DOMMimeTypeArrayConstructor MimeTypeArray;
attribute ClientRectConstructor ClientRect;
attribute ClientRectListConstructor ClientRectList;
@@ -571,6 +572,7 @@ module window {
attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLMediaElementConstructor HTMLMediaElement;
attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLVideoElementConstructor HTMLVideoElement;
attribute [Conditional=VIDEO, EnabledAtRuntime] MediaErrorConstructor MediaError;
+ attribute [Conditional=VIDEO, EnabledAtRuntime] TimeRangesConstructor TimeRanges;
#if defined(ENABLE_XPATH) && ENABLE_XPATH
attribute XPathEvaluatorConstructor XPathEvaluator;
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 9fde92f..08b8257 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -266,7 +266,7 @@ void EventHandler::selectClosestWordFromMouseEvent(const MouseEventWithHitTestRe
}
if (m_frame->shouldChangeSelection(newSelection))
- m_frame->selection()->setSelection(newSelection, granularity);
+ m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection);
}
}
@@ -291,7 +291,7 @@ void EventHandler::selectClosestWordOrLinkFromMouseEvent(const MouseEventWithHit
}
if (m_frame->shouldChangeSelection(newSelection))
- m_frame->selection()->setSelection(newSelection, granularity);
+ m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection);
}
}
@@ -336,7 +336,7 @@ bool EventHandler::handleMousePressEventTripleClick(const MouseEventWithHitTestR
}
if (m_frame->shouldChangeSelection(newSelection))
- m_frame->selection()->setSelection(newSelection, granularity);
+ m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection);
return true;
}
@@ -403,7 +403,7 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR
newSelection = VisibleSelection(visiblePos);
if (m_frame->shouldChangeSelection(newSelection))
- m_frame->selection()->setSelection(newSelection, granularity);
+ m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection);
return true;
}
@@ -640,7 +640,7 @@ void EventHandler::updateSelectionForMouseDrag(Node* targetNode, const IntPoint&
if (m_frame->shouldChangeSelection(newSelection)) {
m_frame->selection()->setIsDirectional(false);
- m_frame->selection()->setSelection(newSelection, m_frame->selectionGranularity());
+ m_frame->selection()->setSelection(newSelection, m_frame->selectionGranularity(), MakeNonDirectionalSelection);
}
}
#endif // ENABLE(DRAG_SUPPORT)
@@ -2052,7 +2052,7 @@ bool EventHandler::sendContextMenuEventForKey()
static const int kContextMenuMargin = 1;
-#if OS(WINDOWS)
+#if OS(WINDOWS) && !OS(WINCE)
int rightAligned = ::GetSystemMetrics(SM_MENUDROPALIGNMENT);
#else
int rightAligned = 0;
@@ -2800,7 +2800,7 @@ void EventHandler::sendResizeEvent()
void EventHandler::sendScrollEvent()
{
setFrameWasScrolledByUser();
- if (m_frame->view())
+ if (m_frame->view() && m_frame->document())
m_frame->document()->dispatchEvent(Event::create(eventNames().scrollEvent, true, false));
}
diff --git a/WebCore/page/EventSource.cpp b/WebCore/page/EventSource.cpp
index 9ccccd7..01af087 100644
--- a/WebCore/page/EventSource.cpp
+++ b/WebCore/page/EventSource.cpp
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2009 Ericsson AB
* All rights reserved.
+ * 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
@@ -53,30 +54,45 @@ namespace WebCore {
const unsigned long long EventSource::defaultReconnectDelay = 3000;
-EventSource::EventSource(const String& url, ScriptExecutionContext* context, ExceptionCode& ec)
+inline EventSource::EventSource(const KURL& url, ScriptExecutionContext* context)
: ActiveDOMObject(context, this)
+ , m_url(url)
, m_state(CONNECTING)
+ , m_decoder(TextResourceDecoder::create("text/plain", "UTF-8"))
, m_reconnectTimer(this, &EventSource::reconnectTimerFired)
, m_discardTrailingNewline(false)
, m_failSilently(false)
, m_requestInFlight(false)
, m_reconnectDelay(defaultReconnectDelay)
+ , m_origin(context->securityOrigin()->toString())
{
- if (url.isEmpty() || !(m_url = context->completeURL(url)).isValid()) {
+}
+
+PassRefPtr<EventSource> EventSource::create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec)
+{
+ if (url.isEmpty()) {
ec = SYNTAX_ERR;
- return;
+ return 0;
}
- // FIXME: should support cross-origin requests
- if (!scriptExecutionContext()->securityOrigin()->canRequest(m_url)) {
+
+ KURL fullURL = context->completeURL(url);
+ if (!fullURL.isValid()) {
+ ec = SYNTAX_ERR;
+ return 0;
+ }
+
+ // FIXME: Should support at least some cross-origin requests.
+ if (!context->securityOrigin()->canRequest(fullURL)) {
ec = SECURITY_ERR;
- return;
+ return 0;
}
- m_origin = scriptExecutionContext()->securityOrigin()->toString();
- m_decoder = TextResourceDecoder::create("text/plain", "UTF-8");
+ RefPtr<EventSource> source = adoptRef(new EventSource(fullURL, context));
- setPendingActivity(this);
- connect();
+ source->setPendingActivity(source.get());
+ source->connect();
+
+ return source.release();
}
EventSource::~EventSource()
diff --git a/WebCore/page/EventSource.h b/WebCore/page/EventSource.h
index d0d45cb..ffed592 100644
--- a/WebCore/page/EventSource.h
+++ b/WebCore/page/EventSource.h
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2009 Ericsson AB
* All rights reserved.
+ * 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
@@ -35,15 +36,10 @@
#if ENABLE(EVENTSOURCE)
#include "ActiveDOMObject.h"
-#include "AtomicStringHash.h"
-#include "EventNames.h"
#include "EventTarget.h"
#include "KURL.h"
#include "ThreadableLoaderClient.h"
#include "Timer.h"
-
-#include <wtf/HashMap.h>
-#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
@@ -56,7 +52,7 @@ namespace WebCore {
class EventSource : public RefCounted<EventSource>, public EventTarget, private ThreadableLoaderClient, public ActiveDOMObject {
public:
- static PassRefPtr<EventSource> create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) { return adoptRef(new EventSource(url, context, ec)); }
+ static PassRefPtr<EventSource> create(const String& url, ScriptExecutionContext*, ExceptionCode&);
virtual ~EventSource();
static const unsigned long long defaultReconnectDelay;
@@ -86,17 +82,17 @@ namespace WebCore {
virtual void stop();
private:
- EventSource(const String& url, ScriptExecutionContext* context, ExceptionCode& ec);
+ EventSource(const KURL&, ScriptExecutionContext*);
virtual void refEventTarget() { ref(); }
virtual void derefEventTarget() { deref(); }
virtual EventTargetData* eventTargetData();
virtual EventTargetData* ensureEventTargetData();
- virtual void didReceiveResponse(const ResourceResponse& response);
+ virtual void didReceiveResponse(const ResourceResponse&);
virtual void didReceiveData(const char* data, int length);
virtual void didFinishLoading(unsigned long);
- virtual void didFail(const ResourceError& error);
+ virtual void didFail(const ResourceError&);
virtual void didFailRedirectCheck();
void connect();
diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp
index 5ae666e..46917fd 100644
--- a/WebCore/page/Frame.cpp
+++ b/WebCore/page/Frame.cpp
@@ -95,15 +95,13 @@
#include "runtime_root.h"
#endif
-#if ENABLE(MATHML)
#include "MathMLNames.h"
-#endif
+#include "SVGNames.h"
+#include "XLinkNames.h"
#if ENABLE(SVG)
#include "SVGDocument.h"
#include "SVGDocumentExtensions.h"
-#include "SVGNames.h"
-#include "XLinkNames.h"
#endif
#if ENABLE(TILED_BACKING_STORE)
@@ -161,23 +159,16 @@ inline Frame::Frame(Page* page, HTMLFrameOwnerElement* ownerElement, FrameLoader
HTMLNames::init();
QualifiedName::init();
MediaFeatureNames::init();
-
-#if ENABLE(SVG)
SVGNames::init();
XLinkNames::init();
-#endif
+ MathMLNames::init();
+ XMLNSNames::init();
+ XMLNames::init();
#if ENABLE(WML)
WMLNames::init();
#endif
-#if ENABLE(MATHML)
- MathMLNames::init();
-#endif
-
- XMLNSNames::init();
- XMLNames::init();
-
if (!ownerElement) {
#if ENABLE(TILED_BACKING_STORE)
// Top level frame only for now.
@@ -695,6 +686,9 @@ void Frame::injectUserScriptsForWorld(DOMWrapperWorld* world, const UserScriptVe
unsigned count = userScripts.size();
for (unsigned i = 0; i < count; ++i) {
UserScript* script = userScripts[i].get();
+ if (script->injectedFrames() == InjectInTopFrameOnly && ownerElement())
+ continue;
+
if (script->injectionTime() == injectionTime && UserContentURLPattern::matchesPatterns(doc->url(), script->whitelist(), script->blacklist()))
m_script.evaluateInWorld(ScriptSourceCode(script->source(), script->url()), world);
}
@@ -1603,13 +1597,15 @@ IntRect Frame::tiledBackingStoreVisibleRect()
String Frame::layerTreeAsText() const
{
#if USE(ACCELERATED_COMPOSITING)
+ document()->updateLayout();
+
if (!contentRenderer())
return String();
GraphicsLayer* rootLayer = contentRenderer()->compositor()->rootPlatformLayer();
if (!rootLayer)
return String();
-
+
return rootLayer->layerTreeAsText();
#else
return String();
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index f43fae5..defb34a 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -284,11 +284,11 @@ void FrameView::detachCustomScrollbars()
return;
Scrollbar* horizontalBar = horizontalScrollbar();
- if (horizontalBar && horizontalBar->isCustomScrollbar() && !toRenderScrollbar(horizontalBar)->owningRenderer()->isRenderPart())
+ if (horizontalBar && horizontalBar->isCustomScrollbar())
setHasHorizontalScrollbar(false);
Scrollbar* verticalBar = verticalScrollbar();
- if (verticalBar && verticalBar->isCustomScrollbar() && !toRenderScrollbar(verticalBar)->owningRenderer()->isRenderPart())
+ if (verticalBar && verticalBar->isCustomScrollbar())
setHasVerticalScrollbar(false);
if (m_scrollCorner) {
@@ -486,10 +486,6 @@ void FrameView::updateCompositingLayers()
// This call will make sure the cached hasAcceleratedCompositing is updated from the pref
view->compositor()->cacheAcceleratedCompositingFlags();
-
- if (!view->usesCompositing())
- return;
-
view->compositor()->updateCompositingLayers(CompositingUpdateAfterLayoutOrStyleChange);
}
@@ -516,7 +512,7 @@ void FrameView::enterCompositingMode()
{
#if USE(ACCELERATED_COMPOSITING)
if (RenderView* view = m_frame->contentRenderer())
- return view->compositor()->enableCompositingMode();
+ view->compositor()->enableCompositingMode();
#endif
}
@@ -1148,8 +1144,7 @@ void FrameView::repaintFixedElementsAfterScrolling()
root->updateWidgetPositions();
root->layer()->updateRepaintRectsAfterScroll();
#if USE(ACCELERATED_COMPOSITING)
- if (root->usesCompositing())
- root->compositor()->updateCompositingLayers(CompositingUpdateOnScroll);
+ root->compositor()->updateCompositingLayers(CompositingUpdateOnScroll);
#endif
}
}
@@ -1708,7 +1703,7 @@ IntRect FrameView::windowClipRect(bool clipToContents) const
// Set our clip rect to be our contents.
IntRect clipRect = contentsToWindow(visibleContentRect(!clipToContents));
- if (!m_frame || !m_frame->document()->ownerElement())
+ if (!m_frame || !m_frame->document() || !m_frame->document()->ownerElement())
return clipRect;
// Take our owner element and get the clip rect from the enclosing layer.
diff --git a/WebCore/page/Navigation.cpp b/WebCore/page/Navigation.cpp
index 828f87e..efda924 100644
--- a/WebCore/page/Navigation.cpp
+++ b/WebCore/page/Navigation.cpp
@@ -33,7 +33,9 @@
#if ENABLE(WEB_TIMING)
+#include "DocumentLoader.h"
#include "Frame.h"
+#include "FrameLoaderTypes.h"
namespace WebCore {
@@ -55,9 +57,21 @@ void Navigation::disconnectFrame()
unsigned short Navigation::type() const
{
if (!m_frame)
- return 0;
+ return Navigate;
- return 0; // FIXME
+ DocumentLoader* documentLoader = m_frame->loader()->documentLoader();
+ if (!documentLoader)
+ return Navigate;
+
+ WebCore::NavigationType navigationType = documentLoader->triggeringAction().type();
+ switch (navigationType) {
+ case NavigationTypeReload:
+ return Reload;
+ case NavigationTypeBackForward:
+ return BackForward;
+ default:
+ return Navigate;
+ }
}
unsigned short Navigation::redirectCount() const
diff --git a/WebCore/page/Navigation.h b/WebCore/page/Navigation.h
index 5e0f7e6..85c7b55 100644
--- a/WebCore/page/Navigation.h
+++ b/WebCore/page/Navigation.h
@@ -51,6 +51,13 @@ public:
unsigned short redirectCount() const;
private:
+ // Keep in sync with what's in the .idl file.
+ enum NavigationType {
+ Navigate = 0,
+ Reload = 1,
+ BackForward = 2,
+ };
+
Navigation(Frame*);
Frame* m_frame;
diff --git a/WebCore/page/Navigation.idl b/WebCore/page/Navigation.idl
index 3ec20ad..b0227f3 100644
--- a/WebCore/page/Navigation.idl
+++ b/WebCore/page/Navigation.idl
@@ -32,13 +32,9 @@ module window {
// See: http://dev.w3.org/2006/webapi/WebTiming/
interface [Conditional=WEB_TIMING, OmitConstructor] Navigation {
- const unsigned short NAVIGATION_OTHER = 0;
- const unsigned short NAVIGATION_LINK = 1;
- const unsigned short NAVIGATION_FORWARD_BACK = 2;
- const unsigned short NAVIGATION_BROWSER = 3;
- const unsigned short NAVIGATION_NEW_WINDOW = 4;
- const unsigned short NAVIGATION_RELOAD = 5;
- const unsigned short NAVIGATION_FRAME = 6;
+ const unsigned short NAVIGATE = 0;
+ const unsigned short RELOAD = 1;
+ const unsigned short BACK_FORWARD = 2;
readonly attribute unsigned short type;
readonly attribute unsigned short redirectCount;
diff --git a/WebCore/page/Navigator.cpp b/WebCore/page/Navigator.cpp
index bb07911..5390fc9 100644
--- a/WebCore/page/Navigator.cpp
+++ b/WebCore/page/Navigator.cpp
@@ -25,18 +25,16 @@
#include "Chrome.h"
#include "CookieJar.h"
-#include "ExceptionCode.h"
+#include "DOMMimeTypeArray.h"
+#include "DOMPluginArray.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClient.h"
#include "Geolocation.h"
-#include "KURL.h"
#include "Language.h"
-#include "MimeTypeArray.h"
#include "Page.h"
#include "PageGroup.h"
#include "PlatformString.h"
-#include "PluginArray.h"
#include "PluginData.h"
#include "ScriptController.h"
#include "Settings.h"
@@ -122,17 +120,17 @@ String Navigator::userAgent() const
return m_frame->loader()->userAgent(m_frame->document()->url());
}
-PluginArray* Navigator::plugins() const
+DOMPluginArray* Navigator::plugins() const
{
if (!m_plugins)
- m_plugins = PluginArray::create(m_frame);
+ m_plugins = DOMPluginArray::create(m_frame);
return m_plugins.get();
}
-MimeTypeArray* Navigator::mimeTypes() const
+DOMMimeTypeArray* Navigator::mimeTypes() const
{
if (!m_mimeTypes)
- m_mimeTypes = MimeTypeArray::create(m_frame);
+ m_mimeTypes = DOMMimeTypeArray::create(m_frame);
return m_mimeTypes.get();
}
@@ -211,93 +209,4 @@ void Navigator::getStorageUpdates()
}
#endif
-static bool verifyCustomHandlerURL(const String& baseURL, const String& url, ExceptionCode& ec)
-{
- // The specification requires that it is a SYNTAX_ERR if the 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, sizeof(token) / sizeof(token[0]));
-
- 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;
-
- if (Page* page = m_frame->page())
- page->chrome()->registerProtocolHandler(scheme, baseURL, url, m_frame->displayStringModifiedByEncoding(title));
-}
-
-static bool verifyProtocolHandlerMimeType(const String& type, ExceptionCode& ec)
-{
- // It is a SECURITY_ERR for these mime types to be assigned to a custom
- // handler.
- if (equalIgnoringCase(type, "text/html") || equalIgnoringCase(type, "text/css") || equalIgnoringCase(type, "application/x-javascript")) {
- ec = SECURITY_ERR;
- return false;
- }
- return true;
-}
-
-void Navigator::registerContentHandler(const String& mimeType, const String& url, const String& title, ExceptionCode& ec)
-{
- if (!verifyProtocolHandlerMimeType(mimeType, 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;
-
- if (Page* page = m_frame->page())
- page->chrome()->registerContentHandler(mimeType, baseURL, url, m_frame->displayStringModifiedByEncoding(title));
-}
-
} // namespace WebCore
diff --git a/WebCore/page/Navigator.h b/WebCore/page/Navigator.h
index c6acfd5..3380c9c 100644
--- a/WebCore/page/Navigator.h
+++ b/WebCore/page/Navigator.h
@@ -28,18 +28,21 @@
namespace WebCore {
+ class DOMMimeTypeArray;
+ class DOMPluginArray;
class Frame;
class Geolocation;
- class MimeTypeArray;
class PluginData;
+<<<<<<< HEAD
class PluginArray;
#if PLATFORM(ANDROID)
class ApplicationInstalledCallback;
class Connection;
#endif
-
- typedef int ExceptionCode;
+=======
+ class String;
+>>>>>>> webkit.org at r63173
class Navigator : public NavigatorBase, public RefCounted<Navigator> {
public:
@@ -51,8 +54,8 @@ namespace WebCore {
String appVersion() const;
String language() const;
- PluginArray* plugins() const;
- MimeTypeArray* mimeTypes() const;
+ DOMPluginArray* plugins() const;
+ DOMMimeTypeArray* mimeTypes() const;
bool cookieEnabled() const;
bool javaEnabled() const;
@@ -76,14 +79,11 @@ namespace WebCore {
void getStorageUpdates();
#endif
- void registerProtocolHandler(const String& scheme, const String& url, const String& title, ExceptionCode& ec);
- void registerContentHandler(const String& mimeType, const String& url, const String& title, ExceptionCode& ec);
-
private:
Navigator(Frame*);
Frame* m_frame;
- mutable RefPtr<PluginArray> m_plugins;
- mutable RefPtr<MimeTypeArray> m_mimeTypes;
+ mutable RefPtr<DOMPluginArray> m_plugins;
+ mutable RefPtr<DOMMimeTypeArray> m_mimeTypes;
mutable RefPtr<Geolocation> m_geolocation;
#if PLATFORM(ANDROID)
mutable RefPtr<Connection> m_connection;
diff --git a/WebCore/page/Navigator.idl b/WebCore/page/Navigator.idl
index 8eae9d6..5699d86 100644
--- a/WebCore/page/Navigator.idl
+++ b/WebCore/page/Navigator.idl
@@ -29,8 +29,8 @@ module window {
readonly attribute DOMString language;
readonly attribute DOMString userAgent;
readonly attribute DOMString platform;
- readonly attribute PluginArray plugins;
- readonly attribute MimeTypeArray mimeTypes;
+ readonly attribute DOMPluginArray plugins;
+ readonly attribute DOMMimeTypeArray mimeTypes;
readonly attribute DOMString product;
readonly attribute DOMString productSub;
readonly attribute DOMString vendor;
@@ -57,11 +57,6 @@ module window {
#if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
void getStorageUpdates();
#endif
-
- void registerProtocolHandler(in DOMString scheme, in DOMString url, in DOMString title)
- raises(DomException);
- void registerContentHandler(in DOMString mimeType, in DOMString url, in DOMString title)
- raises(DomException);
};
}
diff --git a/WebCore/page/Page.cpp b/WebCore/page/Page.cpp
index d5074aa..5d023f5 100644
--- a/WebCore/page/Page.cpp
+++ b/WebCore/page/Page.cpp
@@ -6,7 +6,6 @@
* 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
@@ -21,6 +20,7 @@
#include "config.h"
#include "Page.h"
+#include "BackForwardController.h"
#include "BackForwardList.h"
#include "Base64.h"
#include "CSSStyleSelector.h"
@@ -29,7 +29,7 @@
#include "ContextMenuClient.h"
#include "ContextMenuController.h"
#include "DOMWindow.h"
-#include "DeviceOrientation.h"
+#include "DeviceOrientationController.h"
#include "DragController.h"
#include "EditorClient.h"
#include "Event.h"
@@ -85,8 +85,13 @@
#include "GeolocationController.h"
#endif
+<<<<<<< HEAD
#if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED)
#include "PackageNotifier.h"
+=======
+#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
+#include "InspectorApplicationCacheAgent.h"
+>>>>>>> webkit.org at r63173
#endif
namespace WebCore {
@@ -101,11 +106,19 @@ static void networkStateChanged()
{
Vector<RefPtr<Frame> > frames;
+#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
+ bool isNowOnline = networkStateNotifier().onLine();
+#endif
+
// Get all the frames of all the pages in all the page groups
HashSet<Page*>::iterator end = allPages->end();
for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) {
for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext())
frames.append(frame);
+#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
+ if (InspectorApplicationCacheAgent* applicationCacheAgent = (*it)->inspectorController()->applicationCacheAgent())
+ applicationCacheAgent->updateNetworkState(isNowOnline);
+#endif
}
AtomicString eventName = networkStateNotifier().onLine() ? eventNames().onlineEvent : eventNames().offlineEvent;
@@ -113,6 +126,7 @@ static void networkStateChanged()
frames[i]->document()->dispatchWindowEvent(Event::create(eventName, false, false));
}
+<<<<<<< HEAD
#if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED)
static void onPackageResultAvailable()
{
@@ -125,6 +139,9 @@ static void onPackageResultAvailable()
#endif
Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, EditorClient* editorClient, DragClient* dragClient, InspectorClient* inspectorClient, PluginHalterClient* pluginHalterClient, GeolocationControllerClient* geolocationControllerClient, DeviceOrientationClient* deviceOrientationClient)
+=======
+Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, EditorClient* editorClient, DragClient* dragClient, InspectorClient* inspectorClient, PluginHalterClient* pluginHalterClient, GeolocationControllerClient* geolocationControllerClient, DeviceOrientationClient* deviceOrientationClient, BackForwardControllerClient* backForwardControllerClient)
+>>>>>>> webkit.org at r63173
: m_chrome(new Chrome(this, chromeClient))
, m_dragCaretController(new SelectionController(0, true))
#if ENABLE(DRAG_SUPPORT)
@@ -141,11 +158,11 @@ Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, Edi
, m_geolocationController(new GeolocationController(this, geolocationControllerClient))
#endif
#if ENABLE(DEVICE_ORIENTATION)
- , m_deviceOrientation(new DeviceOrientation(this, deviceOrientationClient))
+ , m_deviceOrientationController(new DeviceOrientationController(this, deviceOrientationClient))
#endif
, m_settings(new Settings(this))
, m_progress(new ProgressTracker)
- , m_backForwardList(BackForwardList::create(this))
+ , m_backForwardController(new BackForwardController(this, backForwardControllerClient))
, m_theme(RenderTheme::themeForPage(this))
, m_editorClient(editorClient)
, m_frameCount(0)
@@ -221,7 +238,7 @@ Page::~Page()
m_inspectorController->inspectedPageDestroyed();
#endif
- m_backForwardList->close();
+ backForwardList()->close();
#ifndef NDEBUG
pageCounter.decrement();
@@ -249,14 +266,14 @@ void Page::setOpenedByDOM()
m_openedByDOM = true;
}
-BackForwardList* Page::backForwardList()
+BackForwardList* Page::backForwardList() const
{
- return m_backForwardList.get();
+ return m_backForwardController->list();
}
bool Page::goBack()
{
- HistoryItem* item = m_backForwardList->backItem();
+ HistoryItem* item = backForwardList()->backItem();
if (item) {
goToItem(item, FrameLoadTypeBack);
@@ -267,7 +284,7 @@ bool Page::goBack()
bool Page::goForward()
{
- HistoryItem* item = m_backForwardList->forwardItem();
+ HistoryItem* item = backForwardList()->forwardItem();
if (item) {
goToItem(item, FrameLoadTypeForward);
@@ -280,9 +297,9 @@ bool Page::canGoBackOrForward(int distance) const
{
if (distance == 0)
return true;
- if (distance > 0 && distance <= m_backForwardList->forwardListCount())
+ if (distance > 0 && distance <= backForwardList()->forwardListCount())
return true;
- if (distance < 0 && -distance <= m_backForwardList->backListCount())
+ if (distance < 0 && -distance <= backForwardList()->backListCount())
return true;
return false;
}
@@ -292,16 +309,16 @@ void Page::goBackOrForward(int distance)
if (distance == 0)
return;
- HistoryItem* item = m_backForwardList->itemAtIndex(distance);
+ HistoryItem* item = backForwardList()->itemAtIndex(distance);
if (!item) {
if (distance > 0) {
- int forwardListCount = m_backForwardList->forwardListCount();
+ int forwardListCount = backForwardList()->forwardListCount();
if (forwardListCount > 0)
- item = m_backForwardList->itemAtIndex(forwardListCount);
+ item = backForwardList()->itemAtIndex(forwardListCount);
} else {
- int backListCount = m_backForwardList->backListCount();
+ int backListCount = backForwardList()->backListCount();
if (backListCount > 0)
- item = m_backForwardList->itemAtIndex(-backListCount);
+ item = backForwardList()->itemAtIndex(-backListCount);
}
}
@@ -335,7 +352,7 @@ void Page::goToItem(HistoryItem* item, FrameLoadType type)
int Page::getHistoryLength()
{
- return m_backForwardList->backListCount() + 1 + m_backForwardList->forwardListCount();
+ return backForwardList()->backListCount() + 1 + backForwardList()->forwardListCount();
}
void Page::setGlobalHistoryItem(HistoryItem* item)
diff --git a/WebCore/page/Page.h b/WebCore/page/Page.h
index b931092..56a25eb 100644
--- a/WebCore/page/Page.h
+++ b/WebCore/page/Page.h
@@ -37,13 +37,15 @@ namespace JSC {
namespace WebCore {
+ class BackForwardController;
+ class BackForwardControllerClient;
class BackForwardList;
class Chrome;
class ChromeClient;
class ContextMenuClient;
class ContextMenuController;
- class DeviceOrientation;
class DeviceOrientationClient;
+ class DeviceOrientationController;
class Document;
class DragClient;
class DragController;
@@ -87,7 +89,7 @@ namespace WebCore {
public:
static void setNeedsReapplyStyles();
- Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*, InspectorClient*, PluginHalterClient*, GeolocationControllerClient*, DeviceOrientationClient*);
+ Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*, InspectorClient*, PluginHalterClient*, GeolocationControllerClient*, DeviceOrientationClient*, BackForwardControllerClient*);
~Page();
RenderTheme* theme() const { return m_theme.get(); };
@@ -106,7 +108,7 @@ namespace WebCore {
bool openedByDOM() const;
void setOpenedByDOM();
- BackForwardList* backForwardList();
+ BackForwardList* backForwardList() const;
// FIXME: The following three methods don't fall under the responsibilities of the Page object
// They seem to fit a hypothetical Page-controller object that would be akin to the
@@ -148,7 +150,7 @@ namespace WebCore {
GeolocationController* geolocationController() const { return m_geolocationController.get(); }
#endif
#if ENABLE(DEVICE_ORIENTATION)
- DeviceOrientation* deviceOrientation() const { return m_deviceOrientation.get(); }
+ DeviceOrientationController* deviceOrientationController() const { return m_deviceOrientationController.get(); }
#endif
Settings* settings() const { return m_settings.get(); }
ProgressTracker* progress() const { return m_progress.get(); }
@@ -265,12 +267,12 @@ namespace WebCore {
OwnPtr<GeolocationController> m_geolocationController;
#endif
#if ENABLE(DEVICE_ORIENTATION)
- OwnPtr<DeviceOrientation> m_deviceOrientation;
+ OwnPtr<DeviceOrientationController> m_deviceOrientationController;
#endif
OwnPtr<Settings> m_settings;
OwnPtr<ProgressTracker> m_progress;
- RefPtr<BackForwardList> m_backForwardList;
+ OwnPtr<BackForwardController> m_backForwardController;
RefPtr<Frame> m_mainFrame;
RefPtr<HistoryItem> m_globalHistoryItem;
diff --git a/WebCore/page/PageGroup.cpp b/WebCore/page/PageGroup.cpp
index f6c746d..b45b9ea 100644
--- a/WebCore/page/PageGroup.cpp
+++ b/WebCore/page/PageGroup.cpp
@@ -213,12 +213,13 @@ IndexedDatabase* PageGroup::indexedDatabase()
}
#endif
-void PageGroup::addUserScriptToWorld(DOMWrapperWorld* world, const String& source, const KURL& url, PassOwnPtr<Vector<String> > whitelist,
- PassOwnPtr<Vector<String> > blacklist, UserScriptInjectionTime injectionTime)
+void PageGroup::addUserScriptToWorld(DOMWrapperWorld* world, const String& source, const KURL& url,
+ PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
+ UserScriptInjectionTime injectionTime, UserContentInjectedFrames injectedFrames)
{
ASSERT_ARG(world, world);
- OwnPtr<UserScript> userScript(new UserScript(source, url, whitelist, blacklist, injectionTime));
+ OwnPtr<UserScript> userScript(new UserScript(source, url, whitelist, blacklist, injectionTime, injectedFrames));
if (!m_userScripts)
m_userScripts.set(new UserScriptMap);
UserScriptVector*& scriptsInWorld = m_userScripts->add(world, 0).first->second;
@@ -227,19 +228,20 @@ void PageGroup::addUserScriptToWorld(DOMWrapperWorld* world, const String& sourc
scriptsInWorld->append(userScript.release());
}
-void PageGroup::addUserStyleSheetToWorld(DOMWrapperWorld* world, const String& source, const KURL& url, PassOwnPtr<Vector<String> > whitelist,
- PassOwnPtr<Vector<String> > blacklist)
+void PageGroup::addUserStyleSheetToWorld(DOMWrapperWorld* world, const String& source, const KURL& url,
+ PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
+ UserContentInjectedFrames injectedFrames)
{
ASSERT_ARG(world, world);
- OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, whitelist, blacklist));
+ OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, whitelist, blacklist, injectedFrames));
if (!m_userStyleSheets)
m_userStyleSheets.set(new UserStyleSheetMap);
UserStyleSheetVector*& styleSheetsInWorld = m_userStyleSheets->add(world, 0).first->second;
if (!styleSheetsInWorld)
styleSheetsInWorld = new UserStyleSheetVector;
styleSheetsInWorld->append(userStyleSheet.release());
-
+
// Clear our cached sheets and have them just reparse.
HashSet<Page*>::const_iterator end = m_pages.end();
for (HashSet<Page*>::const_iterator it = m_pages.begin(); it != end; ++it) {
diff --git a/WebCore/page/PageGroup.h b/WebCore/page/PageGroup.h
index a409494..545df78 100644
--- a/WebCore/page/PageGroup.h
+++ b/WebCore/page/PageGroup.h
@@ -74,20 +74,21 @@ namespace WebCore {
IndexedDatabase* indexedDatabase();
#endif
- void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&,
+ void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&,
PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
- UserScriptInjectionTime);
+ UserScriptInjectionTime, UserContentInjectedFrames);
void addUserStyleSheetToWorld(DOMWrapperWorld*, const String& source, const KURL&,
- PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist);
-
+ PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
+ UserContentInjectedFrames);
+
void removeUserScriptFromWorld(DOMWrapperWorld*, const KURL&);
void removeUserStyleSheetFromWorld(DOMWrapperWorld*, const KURL&);
-
+
void removeUserScriptsFromWorld(DOMWrapperWorld*);
void removeUserStyleSheetsFromWorld(DOMWrapperWorld*);
-
+
void removeAllUserContent();
-
+
const UserScriptMap* userScripts() const { return m_userScripts.get(); }
const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); }
diff --git a/WebCore/page/Timing.cpp b/WebCore/page/Timing.cpp
index dcd0fb7..af00441 100644
--- a/WebCore/page/Timing.cpp
+++ b/WebCore/page/Timing.cpp
@@ -52,12 +52,36 @@ void Timing::disconnectFrame()
m_frame = 0;
}
-unsigned long Timing::navigationStart() const
+unsigned long long Timing::navigationStart() const
{
if (!m_frame)
return 0;
- return 0; // FIXME
+ return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->navigationStart * 1000);
+}
+
+unsigned long long Timing::unloadEventEnd() const
+{
+ if (!m_frame)
+ return 0;
+
+ return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->unloadEventEnd * 1000);
+}
+
+unsigned long long Timing::loadEventStart() const
+{
+ if (!m_frame)
+ return 0;
+
+ return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->loadEventStart * 1000);
+}
+
+unsigned long long Timing::loadEventEnd() const
+{
+ if (!m_frame)
+ return 0;
+
+ return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->loadEventEnd * 1000);
}
} // namespace WebCore
diff --git a/WebCore/page/Timing.h b/WebCore/page/Timing.h
index 7b66d66..47ce478 100644
--- a/WebCore/page/Timing.h
+++ b/WebCore/page/Timing.h
@@ -47,7 +47,10 @@ public:
Frame* frame() const;
void disconnectFrame();
- unsigned long navigationStart() const;
+ unsigned long long navigationStart() const;
+ unsigned long long unloadEventEnd() const;
+ unsigned long long loadEventStart() const;
+ unsigned long long loadEventEnd() const;
private:
Timing(Frame*);
diff --git a/WebCore/page/Timing.idl b/WebCore/page/Timing.idl
index 01b72bc..dbe996e 100644
--- a/WebCore/page/Timing.idl
+++ b/WebCore/page/Timing.idl
@@ -32,8 +32,22 @@ module window {
// See: http://dev.w3.org/2006/webapi/WebTiming/
interface [Conditional=WEB_TIMING, OmitConstructor] Timing {
- readonly attribute unsigned long navigationStart;
// FIXME: Implement remainder of interface.
+ readonly attribute unsigned long long navigationStart;
+ // readonly attribute unsigned long long fetchStart;
+ readonly attribute unsigned long long unloadEventEnd;
+ // readonly attribute unsigned long long redirectStart;
+ // readonly attribute unsigned long long redirectEnd;
+ // readonly attribute unsigned long long domainLookupStart;
+ // readonly attribute unsigned long long domainLookupEnd;
+ // readonly attribute unsigned long long connectStart;
+ // readonly attribute unsigned long long connectEnd;
+ // readonly attribute unsigned long long requestStart;
+ // readonly attribute unsigned long long requestEnd;
+ // readonly attribute unsigned long long responseStart;
+ // readonly attribute unsigned long long responseEnd;
+ readonly attribute unsigned long long loadEventStart;
+ readonly attribute unsigned long long loadEventEnd;
};
}
diff --git a/WebCore/page/UserContentTypes.h b/WebCore/page/UserContentTypes.h
new file mode 100644
index 0000000..d012b8c
--- /dev/null
+++ b/WebCore/page/UserContentTypes.h
@@ -0,0 +1,38 @@
+/*
+ * 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 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 UserContentTypes_h
+#define UserContentTypes_h
+
+#include <wtf/HashMap.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+enum UserContentInjectedFrames { InjectInAllFrames, InjectInTopFrameOnly };
+
+} // namespace WebCore
+
+#endif // UserContentTypes_h
diff --git a/WebCore/page/UserScript.h b/WebCore/page/UserScript.h
index 8b3703f..0652439 100644
--- a/WebCore/page/UserScript.h
+++ b/WebCore/page/UserScript.h
@@ -27,6 +27,7 @@
#define UserScript_h
#include "KURL.h"
+#include "UserContentTypes.h"
#include "UserScriptTypes.h"
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
@@ -38,12 +39,13 @@ class UserScript : public Noncopyable {
public:
UserScript(const String& source, const KURL& url,
PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
- UserScriptInjectionTime injectionTime)
+ UserScriptInjectionTime injectionTime, UserContentInjectedFrames injectedFrames)
: m_source(source)
, m_url(url)
, m_whitelist(whitelist)
, m_blacklist(blacklist)
, m_injectionTime(injectionTime)
+ , m_injectedFrames(injectedFrames)
{
}
@@ -52,15 +54,17 @@ public:
const Vector<String>* whitelist() const { return m_whitelist.get(); }
const Vector<String>* blacklist() const { return m_blacklist.get(); }
UserScriptInjectionTime injectionTime() const { return m_injectionTime; }
-
+ UserContentInjectedFrames injectedFrames() const { return m_injectedFrames; }
+
private:
String m_source;
KURL m_url;
OwnPtr<Vector<String> > m_whitelist;
OwnPtr<Vector<String> > m_blacklist;
UserScriptInjectionTime m_injectionTime;
+ UserContentInjectedFrames m_injectedFrames;
};
} // namespace WebCore
-
+
#endif // UserScript_h
diff --git a/WebCore/page/UserStyleSheet.h b/WebCore/page/UserStyleSheet.h
index 610778f..4c6d708 100644
--- a/WebCore/page/UserStyleSheet.h
+++ b/WebCore/page/UserStyleSheet.h
@@ -27,6 +27,7 @@
#define UserStyleSheet_h
#include "KURL.h"
+#include "UserContentTypes.h"
#include "UserStyleSheetTypes.h"
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
@@ -37,11 +38,13 @@ namespace WebCore {
class UserStyleSheet : public Noncopyable {
public:
UserStyleSheet(const String& source, const KURL& url,
- PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist)
+ PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
+ UserContentInjectedFrames injectedFrames)
: m_source(source)
, m_url(url)
, m_whitelist(whitelist)
, m_blacklist(blacklist)
+ , m_injectedFrames(injectedFrames)
{
}
@@ -49,12 +52,14 @@ public:
const KURL& url() const { return m_url; }
const Vector<String>* whitelist() const { return m_whitelist.get(); }
const Vector<String>* blacklist() const { return m_blacklist.get(); }
+ UserContentInjectedFrames injectedFrames() const { return m_injectedFrames; }
private:
String m_source;
KURL m_url;
OwnPtr<Vector<String> > m_whitelist;
OwnPtr<Vector<String> > m_blacklist;
+ UserContentInjectedFrames m_injectedFrames;
};
} // namespace WebCore
diff --git a/WebCore/page/win/EventHandlerWin.cpp b/WebCore/page/win/EventHandlerWin.cpp
index 5511209..e1d5be9 100644
--- a/WebCore/page/win/EventHandlerWin.cpp
+++ b/WebCore/page/win/EventHandlerWin.cpp
@@ -27,7 +27,6 @@
#include "config.h"
#include "EventHandler.h"
-#include "ClipboardWin.h"
#include "Cursor.h"
#include "FloatPoint.h"
#include "FocusController.h"
@@ -44,6 +43,12 @@
#include "WCDataObject.h"
#include "NotImplemented.h"
+#if OS(WINCE)
+#include "Clipboard.h"
+#else
+#include "ClipboardWin.h"
+#endif
+
namespace WebCore {
const double EventHandler::TextDragDelay = 0.0;
diff --git a/WebCore/page/wince/FrameWince.cpp b/WebCore/page/wince/FrameWince.cpp
index 5ecb579..c806b98 100644
--- a/WebCore/page/wince/FrameWince.cpp
+++ b/WebCore/page/wince/FrameWince.cpp
@@ -28,28 +28,18 @@
#include "Frame.h"
#include "Document.h"
-#include "EditorClient.h"
#include "FloatRect.h"
-#include "FrameLoader.h"
-#include "FrameLoadRequest.h"
#include "FrameView.h"
#include "GraphicsContext.h"
#include "HTMLIFrameElement.h"
#include "HTMLNames.h"
#include "HTMLTableCellElement.h"
#include "KeyboardEvent.h"
-#include "NP_jsobject.h"
-#include "npruntime_impl.h"
#include "Page.h"
-#include "Plugin.h"
-#include "RegularExpression.h"
#include "RenderFrame.h"
-#include "RenderTableCell.h"
+#include "RenderLayer.h"
#include "RenderView.h"
#include "ResourceHandle.h"
-#include "runtime_root.h"
-#include "Settings.h"
-#include "TextResourceDecoder.h"
#include <windows.h>
@@ -85,7 +75,7 @@ void computePageRectsForFrame(Frame* frame, const IntRect& printRect, float head
float ratio = (float)printRect.height() / (float)printRect.width();
- float pageWidth = (float) root->overflowWidth();
+ float pageWidth = (float) root->rightLayoutOverflow();
float pageHeight = pageWidth * ratio;
outPageHeight = (int) pageHeight; // this is the height of the page adjusted by margins
pageHeight -= (headerHeight + footerHeight);
@@ -129,8 +119,8 @@ HBITMAP imageFromSelection(Frame* frame, bool forceBlackText)
FrameView* view = frame->view();
if (view->parent()) {
ir.setLocation(view->parent()->convertChildToSelf(view, ir.location()));
- w = ir.width() * view->scale() + 0.5;
- h = ir.height() * view->scale() + 0.5;
+ w = ir.width() * view->zoomFactor() + 0.5;
+ h = ir.height() * view->zoomFactor() + 0.5;
} else {
ir = view->contentsToWindow(ir);
w = ir.width();
diff --git a/WebCore/platform/CrossThreadCopier.h b/WebCore/platform/CrossThreadCopier.h
index e35a6b3..80805c4 100644
--- a/WebCore/platform/CrossThreadCopier.h
+++ b/WebCore/platform/CrossThreadCopier.h
@@ -81,9 +81,9 @@ namespace WebCore {
template<typename T> struct CrossThreadCopierBase<false, false, PassOwnPtr<T> > {
typedef PassOwnPtr<T> Type;
- static Type copy(const PassOwnPtr<T>& ownPtr)
+ static Type copy(Type ownPtr)
{
- return PassOwnPtr<T>(static_cast<T*>(ownPtr.release()));
+ return ownPtr;
}
};
diff --git a/WebCore/platform/PlatformKeyboardEvent.h b/WebCore/platform/PlatformKeyboardEvent.h
index 824587e..6ec4879 100644
--- a/WebCore/platform/PlatformKeyboardEvent.h
+++ b/WebCore/platform/PlatformKeyboardEvent.h
@@ -249,6 +249,12 @@ namespace WebCore {
QKeyEvent* m_qtEvent;
#endif
};
+
+#if PLATFORM(QT)
+// Used by WebKit2.
+String keyIdentifierForQtKeyCode(int keyCode);
+int windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad = false);
+#endif
} // namespace WebCore
diff --git a/WebCore/platform/PurgeableBuffer.h b/WebCore/platform/PurgeableBuffer.h
index 94e58da..3caf482 100644
--- a/WebCore/platform/PurgeableBuffer.h
+++ b/WebCore/platform/PurgeableBuffer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 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
@@ -27,14 +27,15 @@
#define PurgeableBuffer_h
#include <wtf/Noncopyable.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
class PurgeableBuffer : public Noncopyable {
public:
- static PurgeableBuffer* create(const char* data, size_t);
- static PurgeableBuffer* create(const Vector<char>& v) { return create(v.data(), v.size()); }
+ static PassOwnPtr<PurgeableBuffer> create(const char* data, size_t);
+ static PassOwnPtr<PurgeableBuffer> create(const Vector<char>& vector) { return create(vector.data(), vector.size()); }
~PurgeableBuffer();
@@ -63,7 +64,7 @@ namespace WebCore {
};
#if !OS(DARWIN) || defined(BUILDING_ON_TIGER) || PLATFORM(QT) || PLATFORM(GTK)
- inline PurgeableBuffer* PurgeableBuffer::create(const char*, size_t) { return 0; }
+ inline PassOwnPtr<PurgeableBuffer> PurgeableBuffer::create(const char*, size_t) { return PassOwnPtr<PurgeableBuffer>(); }
inline PurgeableBuffer::~PurgeableBuffer() { }
inline const char* PurgeableBuffer::data() const { return 0; }
inline void PurgeableBuffer::setPurgePriority(PurgePriority) { }
diff --git a/WebCore/platform/SharedBuffer.cpp b/WebCore/platform/SharedBuffer.cpp
index 4a46c2c..6cf1131 100644
--- a/WebCore/platform/SharedBuffer.cpp
+++ b/WebCore/platform/SharedBuffer.cpp
@@ -28,6 +28,7 @@
#include "SharedBuffer.h"
#include "PurgeableBuffer.h"
+#include <wtf/PassOwnPtr.h>
using namespace std;
@@ -86,11 +87,11 @@ PassRefPtr<SharedBuffer> SharedBuffer::adoptVector(Vector<char>& vector)
return buffer.release();
}
-PassRefPtr<SharedBuffer> SharedBuffer::adoptPurgeableBuffer(PurgeableBuffer* purgeableBuffer)
+PassRefPtr<SharedBuffer> SharedBuffer::adoptPurgeableBuffer(PassOwnPtr<PurgeableBuffer> purgeableBuffer)
{
ASSERT(!purgeableBuffer->isPurgeable());
RefPtr<SharedBuffer> buffer = create();
- buffer->m_purgeableBuffer.set(purgeableBuffer);
+ buffer->m_purgeableBuffer = purgeableBuffer;
return buffer.release();
}
@@ -184,7 +185,7 @@ PassRefPtr<SharedBuffer> SharedBuffer::copy() const
return clone;
}
-PurgeableBuffer* SharedBuffer::releasePurgeableBuffer()
+PassOwnPtr<PurgeableBuffer> SharedBuffer::releasePurgeableBuffer()
{
ASSERT(hasOneRef());
return m_purgeableBuffer.release();
diff --git a/WebCore/platform/SharedBuffer.h b/WebCore/platform/SharedBuffer.h
index c2db21e..73afadf 100644
--- a/WebCore/platform/SharedBuffer.h
+++ b/WebCore/platform/SharedBuffer.h
@@ -61,7 +61,7 @@ public:
// The buffer must be in non-purgeable state before adopted to a SharedBuffer.
// It will stay that way until released.
- static PassRefPtr<SharedBuffer> adoptPurgeableBuffer(PurgeableBuffer* buffer);
+ static PassRefPtr<SharedBuffer> adoptPurgeableBuffer(PassOwnPtr<PurgeableBuffer>);
#if PLATFORM(ANDROID)
virtual
@@ -106,7 +106,7 @@ public:
bool hasPurgeableBuffer() const { return m_purgeableBuffer.get(); }
// Ensure this buffer has no other clients before calling this.
- PurgeableBuffer* releasePurgeableBuffer();
+ PassOwnPtr<PurgeableBuffer> releasePurgeableBuffer();
// Return the number of consecutive bytes after "position". "data"
// points to the first byte.
diff --git a/WebCore/platform/ThemeTypes.h b/WebCore/platform/ThemeTypes.h
index 271bd83..d82aa73 100644
--- a/WebCore/platform/ThemeTypes.h
+++ b/WebCore/platform/ThemeTypes.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 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
@@ -51,7 +51,7 @@ enum ControlPart {
MediaFullscreenButtonPart, MediaMuteButtonPart, MediaPlayButtonPart, MediaSeekBackButtonPart,
MediaSeekForwardButtonPart, MediaRewindButtonPart, MediaReturnToRealtimeButtonPart, MediaToggleClosedCaptionsButtonPart,
MediaSliderPart, MediaSliderThumbPart, MediaVolumeSliderContainerPart, MediaVolumeSliderPart, MediaVolumeSliderThumbPart,
- MediaControlsBackgroundPart, MediaCurrentTimePart, MediaTimeRemainingPart,
+ MediaVolumeSliderMuteButtonPart, MediaControlsBackgroundPart, MediaCurrentTimePart, MediaTimeRemainingPart,
MenulistPart, MenulistButtonPart, MenulistTextPart, MenulistTextFieldPart, MeterPart, OuterSpinButtonPart, ProgressBarPart, ProgressBarValuePart,
SliderHorizontalPart, SliderVerticalPart, SliderThumbHorizontalPart,
SliderThumbVerticalPart, CaretPart, SearchFieldPart, SearchFieldDecorationPart,
diff --git a/WebCore/platform/chromium/GLES2Context.h b/WebCore/platform/chromium/GLES2Context.h
index 93a343c..b72329a 100644
--- a/WebCore/platform/chromium/GLES2Context.h
+++ b/WebCore/platform/chromium/GLES2Context.h
@@ -38,20 +38,32 @@
namespace WebCore {
class GLES2ContextInternal;
+class IntSize;
class Page;
class GLES2Context : public Noncopyable {
public:
- // If a Page is specified then the resulting GL ES context draws directly
- // to the window associated with the Page, otherwise an off-screen GL ES context is
- // created.
- static PassOwnPtr<GLES2Context> create(Page*);
+ // Creates a GL ES context that draws directly to the window associated with
+ // the Page.
+ static PassOwnPtr<GLES2Context> createOnscreen(Page*);
+
+ // Creates a GL ES context that renders offscreen, optionally as a child
+ // of the given parent if specified.
+ static PassOwnPtr<GLES2Context> createOffscreen(GLES2Context* parent);
+
~GLES2Context();
bool makeCurrent();
bool destroy();
bool swapBuffers();
+ // Only valid for offscreen contexts.
+ void resizeOffscreenContent(const IntSize&);
+
+ // Returns the ID of the texture used for offscreen rendering in the context of the parent.
+ // This texture is accessible by the GPU page compositor.
+ unsigned getOffscreenContentParentTextureId();
+
private:
friend class GLES2ContextInternal;
OwnPtr<GLES2ContextInternal> m_internal;
diff --git a/WebCore/platform/graphics/Color.cpp b/WebCore/platform/graphics/Color.cpp
index 2f2a357..80c8286 100644
--- a/WebCore/platform/graphics/Color.cpp
+++ b/WebCore/platform/graphics/Color.cpp
@@ -126,9 +126,8 @@ RGBA32 makeRGBAFromCMYKA(float c, float m, float y, float k, float a)
}
// originally moved here from the CSS parser
-bool Color::parseHexColor(const String& name, RGBA32& rgb)
+bool Color::parseHexColor(const UChar* name, unsigned length, RGBA32& rgb)
{
- unsigned length = name.length();
if (length != 3 && length != 6)
return false;
unsigned value = 0;
@@ -150,6 +149,11 @@ bool Color::parseHexColor(const String& name, RGBA32& rgb)
return true;
}
+bool Color::parseHexColor(const String& name, RGBA32& rgb)
+{
+ return parseHexColor(name.characters(), name.length(), rgb);
+}
+
int differenceSquared(const Color& c1, const Color& c2)
{
int dR = c1.red() - c2.red();
@@ -160,8 +164,8 @@ int differenceSquared(const Color& c1, const Color& c2)
Color::Color(const String& name)
{
- if (name.startsWith("#"))
- m_valid = parseHexColor(name.substring(1), m_color);
+ if (name[0] == '#')
+ m_valid = parseHexColor(name.characters() + 1, name.length() - 1, m_color);
else
setNamedColor(name);
}
diff --git a/WebCore/platform/graphics/Color.h b/WebCore/platform/graphics/Color.h
index a6412d6..089d061 100644
--- a/WebCore/platform/graphics/Color.h
+++ b/WebCore/platform/graphics/Color.h
@@ -27,6 +27,7 @@
#define Color_h
#include <wtf/FastAllocBase.h>
+#include <wtf/unicode/Unicode.h>
#if PLATFORM(CG)
typedef struct CGColor* CGColorRef;
@@ -53,8 +54,8 @@ struct rgb_color;
namespace WebCore {
-class String;
class Color;
+class String;
typedef unsigned RGBA32; // RGBA quadruplet
@@ -135,6 +136,7 @@ public:
#endif
static bool parseHexColor(const String& name, RGBA32& rgb);
+ static bool parseHexColor(const UChar* name, unsigned length, RGBA32& rgb);
static const RGBA32 black = 0xFF000000;
static const RGBA32 white = 0xFFFFFFFF;
diff --git a/WebCore/platform/graphics/GlyphMetricsMap.h b/WebCore/platform/graphics/GlyphMetricsMap.h
index 82e234b..fa85bcc 100644
--- a/WebCore/platform/graphics/GlyphMetricsMap.h
+++ b/WebCore/platform/graphics/GlyphMetricsMap.h
@@ -113,7 +113,7 @@ template<class T> typename GlyphMetricsMap<T>::GlyphMetricsPage* GlyphMetricsMap
if ((page = m_pages->get(pageNumber)))
return page;
} else
- m_pages.set(new HashMap<int, GlyphMetricsPage*>);
+ m_pages = adoptPtr(new HashMap<int, GlyphMetricsPage*>);
page = new GlyphMetricsPage;
m_pages->set(pageNumber, page);
}
diff --git a/WebCore/platform/graphics/GraphicsLayer.h b/WebCore/platform/graphics/GraphicsLayer.h
index b5797fd..8fcebce 100644
--- a/WebCore/platform/graphics/GraphicsLayer.h
+++ b/WebCore/platform/graphics/GraphicsLayer.h
@@ -94,10 +94,9 @@ class AnimationValue : public Noncopyable {
public:
AnimationValue(float keyTime, const TimingFunction* timingFunction = 0)
: m_keyTime(keyTime)
- , m_timingFunction(0)
{
if (timingFunction)
- m_timingFunction.set(new TimingFunction(*timingFunction));
+ m_timingFunction = adoptPtr(new TimingFunction(*timingFunction));
}
virtual ~AnimationValue() { }
@@ -132,7 +131,7 @@ public:
: AnimationValue(keyTime, timingFunction)
{
if (value)
- m_value.set(new TransformOperations(*value));
+ m_value = adoptPtr(new TransformOperations(*value));
}
const TransformOperations* value() const { return m_value.get(); }
diff --git a/WebCore/platform/graphics/MediaPlayer.cpp b/WebCore/platform/graphics/MediaPlayer.cpp
index 4eb4c6b..3915713 100644
--- a/WebCore/platform/graphics/MediaPlayer.cpp
+++ b/WebCore/platform/graphics/MediaPlayer.cpp
@@ -53,11 +53,10 @@
#include "MediaPlayerPrivateQuickTimeVisualContext.h"
#include "MediaPlayerPrivateQuicktimeWin.h"
#elif PLATFORM(QT)
-// QtMultimedia support is disabled currently.
-#if 1 || (QT_VERSION < 0x040700)
-#include "MediaPlayerPrivatePhonon.h"
-#else
+#if USE(QT_MULTIMEDIA)
#include "MediaPlayerPrivateQt.h"
+#else
+#include "MediaPlayerPrivatePhonon.h"
#endif
#elif PLATFORM(CHROMIUM)
#include "MediaPlayerPrivateChromium.h"
diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h
index f825b57..87f8fb4 100644
--- a/WebCore/platform/graphics/MediaPlayer.h
+++ b/WebCore/platform/graphics/MediaPlayer.h
@@ -144,7 +144,7 @@ public:
static PassOwnPtr<MediaPlayer> create(MediaPlayerClient* client)
{
- return new MediaPlayer(client);
+ return adoptPtr(new MediaPlayer(client));
}
virtual ~MediaPlayer();
diff --git a/WebCore/platform/graphics/SimpleFontData.h b/WebCore/platform/graphics/SimpleFontData.h
index bc897be..ba959e4 100644
--- a/WebCore/platform/graphics/SimpleFontData.h
+++ b/WebCore/platform/graphics/SimpleFontData.h
@@ -31,6 +31,7 @@
#include "GlyphPageTreeNode.h"
#include "TypesettingFeatures.h"
#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#if USE(ATSUI)
typedef struct OpaqueATSUStyle* ATSUStyle;
@@ -264,7 +265,7 @@ ALWAYS_INLINE FloatRect SimpleFontData::boundsForGlyph(Glyph glyph) const
bounds = platformBoundsForGlyph(glyph);
if (!m_glyphToBoundsMap)
- m_glyphToBoundsMap.set(new GlyphMetricsMap<FloatRect>());
+ m_glyphToBoundsMap = adoptPtr(new GlyphMetricsMap<FloatRect>);
m_glyphToBoundsMap->setMetricsForGlyph(glyph, bounds);
return bounds;
}
diff --git a/WebCore/platform/graphics/cairo/DrawErrorUnderline.h b/WebCore/platform/graphics/cairo/DrawErrorUnderline.h
index 9776853..1e0a846 100644
--- a/WebCore/platform/graphics/cairo/DrawErrorUnderline.h
+++ b/WebCore/platform/graphics/cairo/DrawErrorUnderline.h
@@ -53,7 +53,7 @@ static inline void drawErrorUnderline(cairo_t* cr, double x, double y, double wi
double halfSquare = 0.5 * square;
double unitWidth = (heightSquares - 1.0) * square;
- int widthUnits = static_cast<int>(0.5 * (width + unitWidth) / unitWidth);
+ int widthUnits = static_cast<int>((width + 0.5 * unitWidth) / unitWidth);
x += 0.5 * (width - widthUnits * unitWidth);
width = widthUnits * unitWidth;
diff --git a/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp b/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp
index e8324a3..6ed8905 100644
--- a/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp
+++ b/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp
@@ -563,8 +563,10 @@ void GraphicsContext::fillRect(const FloatRect& rect)
return;
cairo_t* cr = m_data->cr;
+ cairo_save(cr);
cairo_rectangle(cr, rect.x(), rect.y(), rect.width(), rect.height());
fillPath();
+ cairo_restore(cr);
}
static void drawBorderlessRectShadow(GraphicsContext* context, const FloatRect& rect, const Color& rectColor)
@@ -899,7 +901,7 @@ void GraphicsContext::createPlatformShadow(PassOwnPtr<ImageBuffer> buffer, const
// create filter
RefPtr<Filter> filter = ImageBufferFilter::create();
- filter->setSourceImage(buffer.release());
+ filter->setSourceImage(buffer);
RefPtr<FilterEffect> source = SourceGraphic::create();
source->setScaledSubRegion(FloatRect(FloatPoint(), shadowRect.size()));
source->setIsAlphaImage(true);
diff --git a/WebCore/platform/graphics/chromium/FontLinux.cpp b/WebCore/platform/graphics/chromium/FontLinux.cpp
index a2098a4..1953dd8 100644
--- a/WebCore/platform/graphics/chromium/FontLinux.cpp
+++ b/WebCore/platform/graphics/chromium/FontLinux.cpp
@@ -49,6 +49,7 @@
#include <unicode/uchar.h>
#include <wtf/OwnArrayPtr.h>
#include <wtf/OwnPtr.h>
+#include <wtf/unicode/Unicode.h>
namespace WebCore {
@@ -180,10 +181,20 @@ public:
m_item.face = 0;
m_item.font = allocHarfbuzzFont();
- m_item.string = m_run.characters();
- m_item.stringLength = m_run.length();
m_item.item.bidiLevel = m_run.rtl();
+ int length = m_run.length();
+ m_item.stringLength = length;
+
+ if (!m_item.item.bidiLevel)
+ m_item.string = m_run.characters();
+ else {
+ // Assume mirrored character is in the same Unicode multilingual plane as the original one.
+ UChar* string = new UChar[length];
+ mirrorCharacters(string, m_run.characters(), length);
+ m_item.string = string;
+ }
+
reset();
}
@@ -192,6 +203,8 @@ public:
fastFree(m_item.font);
deleteGlyphArrays();
delete[] m_item.log_clusters;
+ if (m_item.item.bidiLevel)
+ delete[] m_item.string;
}
void reset()
@@ -455,6 +468,22 @@ private:
m_offsetX += m_pixelWidth;
}
+ void mirrorCharacters(UChar* destination, const UChar* source, int length) const
+ {
+ int position = 0;
+ bool error = false;
+ // Iterate characters in source and mirror character if needed.
+ while (position < length) {
+ UChar32 character;
+ int nextPosition = position;
+ U16_NEXT(source, nextPosition, length, character);
+ character = u_charMirror(character);
+ U16_APPEND(destination, position, length, character, error);
+ ASSERT(!error);
+ position = nextPosition;
+ }
+ }
+
const Font* const m_font;
HB_ShaperItem m_item;
uint16_t* m_glyphs16; // A vector of 16-bit glyph ids.
diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
index 59da9ae..9ac506c 100644
--- a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
+++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
@@ -647,7 +647,7 @@ bool LayerRendererChromium::makeContextCurrent()
bool LayerRendererChromium::initGL()
{
- m_gles2Context = GLES2Context::create(m_page);
+ m_gles2Context = GLES2Context::createOnscreen(m_page);
if (!m_gles2Context)
return false;
diff --git a/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
index 29ac356..7869c45 100644
--- a/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+++ b/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
@@ -764,7 +764,7 @@ float MediaPlayerPrivateGStreamer::maxTimeSeekable() const
if (isinf(duration()))
return 0.0f;
- return maxTimeLoaded();
+ return duration();
}
float MediaPlayerPrivateGStreamer::maxTimeLoaded() const
@@ -920,10 +920,13 @@ void MediaPlayerPrivateGStreamer::updateStates()
gst_element_state_get_name(pending));
// Change in progress
- if (!m_isStreaming)
+ if (!m_isStreaming && !m_buffering)
return;
- // Resume playback if a seek was performed in a live pipeline.
+ // Resume playback if a seek was performed in a live pipeline
+ // or during progressive download. That second use-case
+ // happens when the seek is performed to a region of the media
+ // that hasn't been downloaded yet.
if (m_seeking) {
shouldUpdateAfterSeek = true;
m_seeking = false;
diff --git a/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp b/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
index c55f7bf..d3b5f1b 100644
--- a/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
+++ b/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
@@ -330,6 +330,7 @@ static void webKitWebSrcStop(WebKitWebSrc* src, bool seeking)
if (priv->frame)
priv->frame.release();
+ GST_OBJECT_LOCK(src);
if (priv->needDataID)
g_source_remove(priv->needDataID);
priv->needDataID = 0;
@@ -343,6 +344,7 @@ static void webKitWebSrcStop(WebKitWebSrc* src, bool seeking)
priv->seekID = 0;
priv->paused = FALSE;
+ GST_OBJECT_UNLOCK(src);
g_free(priv->iradioName);
priv->iradioName = 0;
@@ -542,8 +544,10 @@ static gboolean webKitWebSrcNeedDataMainCb(WebKitWebSrc* src)
// Ports not using libsoup need to call the unpause/schedule API of their
// underlying network implementation here.
+ GST_OBJECT_LOCK(src);
priv->paused = FALSE;
priv->needDataID = 0;
+ GST_OBJECT_UNLOCK(src);
return FALSE;
}
@@ -553,10 +557,15 @@ static void webKitWebSrcNeedDataCb(GstAppSrc* appsrc, guint length, gpointer use
WebKitWebSrcPrivate* priv = src->priv;
GST_DEBUG_OBJECT(src, "Need more data: %u", length);
- if (priv->needDataID || !priv->paused)
+
+ GST_OBJECT_LOCK(src);
+ if (priv->needDataID || !priv->paused) {
+ GST_OBJECT_UNLOCK(src);
return;
+ }
priv->needDataID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcNeedDataMainCb, gst_object_ref(src), (GDestroyNotify) gst_object_unref);
+ GST_OBJECT_UNLOCK(src);
}
static gboolean webKitWebSrcEnoughDataMainCb(WebKitWebSrc* src)
@@ -570,8 +579,11 @@ static gboolean webKitWebSrcEnoughDataMainCb(WebKitWebSrc* src)
// Ports not using libsoup need to call the pause/unschedule API of their
// underlying network implementation here.
+ GST_OBJECT_LOCK(src);
priv->paused = TRUE;
priv->enoughDataID = 0;
+ GST_OBJECT_UNLOCK(src);
+
return FALSE;
}
@@ -581,10 +593,15 @@ static void webKitWebSrcEnoughDataCb(GstAppSrc* appsrc, gpointer userData)
WebKitWebSrcPrivate* priv = src->priv;
GST_DEBUG_OBJECT(src, "Have enough data");
- if (priv->enoughDataID || priv->paused)
+
+ GST_OBJECT_LOCK(src);
+ if (priv->enoughDataID || priv->paused) {
+ GST_OBJECT_UNLOCK(src);
return;
+ }
priv->enoughDataID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcEnoughDataMainCb, gst_object_ref(src), (GDestroyNotify) gst_object_unref);
+ GST_OBJECT_UNLOCK(src);
}
static gboolean webKitWebSrcSeekMainCb(WebKitWebSrc* src)
@@ -611,9 +628,12 @@ static gboolean webKitWebSrcSeekDataCb(GstAppSrc* appsrc, guint64 offset, gpoint
GST_DEBUG_OBJECT(src, "Doing range-request seek");
priv->requestedOffset = offset;
+
+ GST_OBJECT_LOCK(src);
if (priv->seekID)
g_source_remove(priv->seekID);
priv->seekID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcSeekMainCb, gst_object_ref(src), (GDestroyNotify) gst_object_unref);
+ GST_OBJECT_UNLOCK(src);
return TRUE;
}
@@ -743,8 +763,12 @@ void StreamingClient::didReceiveData(ResourceHandle* handle, const char* data, i
void StreamingClient::didFinishLoading(ResourceHandle*)
{
+ WebKitWebSrcPrivate* priv = m_src->priv;
+
GST_DEBUG_OBJECT(m_src, "Have EOS");
- gst_app_src_end_of_stream(m_src->priv->appsrc);
+
+ if (!priv->seekID)
+ gst_app_src_end_of_stream(m_src->priv->appsrc);
}
void StreamingClient::didFail(ResourceHandle*, const ResourceError& error)
diff --git a/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp b/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
index 9f20b68..fba3d4b 100644
--- a/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
+++ b/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
@@ -124,8 +124,10 @@ void ComplexTextController::collectComplexTextRunsForCharactersCoreText(const UC
if (!m_mayUseNaturalWritingDirection || m_run.directionalOverride()) {
static const void* optionKeys[] = { kCTTypesetterOptionForcedEmbeddingLevel };
- static const void* ltrOptionValues[] = { kCFBooleanFalse };
- static const void* rtlOptionValues[] = { kCFBooleanTrue };
+ const short ltrForcedEmbeddingLevelValue = 0;
+ const short rtlForcedEmbeddingLevelValue = 1;
+ static const void* ltrOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, &ltrForcedEmbeddingLevelValue) };
+ static const void* rtlOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, &rtlForcedEmbeddingLevelValue) };
static CFDictionaryRef ltrTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, ltrOptionValues, sizeof(optionKeys) / sizeof(*optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
static CFDictionaryRef rtlTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, rtlOptionValues, sizeof(optionKeys) / sizeof(*optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
typesetter.adoptCF(CTTypesetterCreateWithAttributedStringAndOptions(attributedString.get(), m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions));
diff --git a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm b/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
index 852bdb0..43b3f3e 100644
--- a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
+++ b/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
@@ -1820,9 +1820,13 @@ bool GraphicsLayerCA::createTransformAnimationsFromKeyframes(const KeyframeValue
TransformOperation::OperationType transformOp = isMatrixAnimation ? TransformOperation::MATRIX_3D : functionList[animationIndex];
CAPropertyAnimation* caAnimation;
+#if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
// CA applies animations in reverse order (<rdar://problem/7095638>) so we need the last one we add (per property)
// to be non-additive.
bool additive = animationIndex < (numAnimations - 1);
+#else
+ bool additive = animationIndex > 0;
+#endif
if (isKeyframe) {
CAKeyframeAnimation* keyframeAnim = createKeyframeAnimation(animation, valueList.property(), additive);
validMatrices = setTransformAnimationKeyframes(valueList, animation, keyframeAnim, animationIndex, transformOp, isMatrixAnimation, boxSize);
diff --git a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
index 9d23340..913a764 100644
--- a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
+++ b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
@@ -260,6 +260,7 @@ GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate(QPainter* p)
antiAliasingForRectsAndLines = painter->testRenderHint(QPainter::Antialiasing);
// FIXME: Maybe only enable in SVG mode?
painter->setRenderHint(QPainter::Antialiasing, true);
+ painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
} else
antiAliasingForRectsAndLines = false;
}
@@ -1394,13 +1395,13 @@ void GraphicsContext::setImageInterpolationQuality(InterpolationQuality quality)
m_data->imageInterpolationQuality = quality;
switch (quality) {
- case InterpolationDefault:
case InterpolationNone:
case InterpolationLow:
// use nearest-neigbor
m_data->p()->setRenderHint(QPainter::SmoothPixmapTransform, false);
break;
+ case InterpolationDefault:
case InterpolationMedium:
case InterpolationHigh:
default:
diff --git a/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
index 226f1fb..89badcc 100644
--- a/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
+++ b/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
@@ -28,6 +28,7 @@
#include "TranslateTransformOperation.h"
#include "UnitBezier.h"
#include <QtCore/qabstractanimation.h>
+#include <QtCore/qdatetime.h>
#include <QtCore/qdebug.h>
#include <QtCore/qmetaobject.h>
#include <QtCore/qset.h>
@@ -45,6 +46,8 @@
#define QT_DEBUG_RECACHE 0
#define QT_DEBUG_CACHEDUMP 0
+#define QT_DEBUG_FPS 0
+
namespace WebCore {
#ifndef QT_NO_GRAPHICSEFFECT
@@ -1184,6 +1187,15 @@ void GraphicsLayerQt::syncCompositingState()
}
/* \reimp (GraphicsLayer.h)
+*/
+void GraphicsLayerQt::syncCompositingStateForThisLayerOnly()
+{
+ // We can't call flushChanges recursively here
+ m_impl->flushChanges(false);
+ GraphicsLayer::syncCompositingStateForThisLayerOnly();
+}
+
+/* \reimp (GraphicsLayer.h)
*/
NativeLayer GraphicsLayerQt::nativeLayer() const
{
@@ -1323,6 +1335,22 @@ protected:
// This is the part that differs between animated properties.
virtual void applyFrame(const T& fromValue, const T& toValue, qreal progress) = 0;
+ virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
+ {
+#if QT_DEBUG_FPS
+ if (newState == Running && oldState == Stopped) {
+ qDebug("Animation Started!");
+ m_fps.frames = 0;
+ m_fps.duration.start();
+ } else if (newState == Stopped && oldState == Running) {
+ const int duration = m_fps.duration.elapsed();
+ qDebug("Animation Ended! %dms [%f FPS]", duration,
+ (1000 / (((float)duration) / m_fps.frames)));
+ }
+#endif
+ AnimationQtBase::updateState(newState, oldState);
+ }
+
virtual void updateCurrentTime(int currentTime)
{
if (!m_layer)
@@ -1362,9 +1390,18 @@ protected:
progress = (!progress || progress == 1 || it.key() == it2.key()) ?
progress : applyTimingFunction(timingFunc, (progress - it.key()) / (it2.key() - it.key()), duration());
applyFrame(fromValue, toValue, progress);
+#if QT_DEBUG_FPS
+ ++m_fps.frames;
+#endif
}
QMap<qreal, KeyframeValueQt<T> > m_keyframeValues;
+#if QT_DEBUG_FPS
+ struct {
+ QTime duration;
+ int frames;
+ } m_fps;
+#endif
};
class TransformAnimationQt : public AnimationQt<TransformOperations> {
@@ -1416,7 +1453,7 @@ public:
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
{
- AnimationQtBase::updateState(newState, oldState);
+ AnimationQt<TransformOperations>::updateState(newState, oldState);
if (!m_layer)
return;
@@ -1467,7 +1504,7 @@ public:
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
{
- QAbstractAnimation::updateState(newState, oldState);
+ AnimationQt<qreal>::updateState(newState, oldState);
if (m_layer)
m_layer.data()->m_opacityAnimationRunning = (newState == QAbstractAnimation::Running);
diff --git a/WebCore/platform/graphics/qt/GraphicsLayerQt.h b/WebCore/platform/graphics/qt/GraphicsLayerQt.h
index 6de5a6e..f81bd3d 100644
--- a/WebCore/platform/graphics/qt/GraphicsLayerQt.h
+++ b/WebCore/platform/graphics/qt/GraphicsLayerQt.h
@@ -83,6 +83,7 @@ public:
virtual void distributeOpacity(float);
virtual float accumulatedOpacity() const;
virtual void syncCompositingState();
+ virtual void syncCompositingStateForThisLayerOnly();
private:
OwnPtr<GraphicsLayerQtImpl> m_impl;
diff --git a/WebCore/platform/graphics/qt/ImageBufferQt.cpp b/WebCore/platform/graphics/qt/ImageBufferQt.cpp
index e46913c..a546def 100644
--- a/WebCore/platform/graphics/qt/ImageBufferQt.cpp
+++ b/WebCore/platform/graphics/qt/ImageBufferQt.cpp
@@ -234,33 +234,43 @@ void putImageData(ImageData*& source, const IntRect& sourceRect, const IntPoint&
unsigned srcBytesPerRow = 4 * source->width();
- bool isPainting = data.m_painter->isActive();
- if (isPainting)
- data.m_painter->end();
+ QRect destRect(destx, desty, endx - destx, endy - desty);
- QImage image = data.m_pixmap.toImage();
- if (multiplied == Unmultiplied)
- image = image.convertToFormat(QImage::Format_ARGB32);
- else
- image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ QImage::Format format = multiplied == Unmultiplied ? QImage::Format_ARGB32 : QImage::Format_ARGB32_Premultiplied;
+ QImage image(destRect.size(), format);
unsigned char* srcRows = source->data()->data()->data() + originy * srcBytesPerRow + originx * 4;
for (int y = 0; y < numRows; ++y) {
- quint32* scanLine = reinterpret_cast<quint32*>(image.scanLine(y + desty));
+ quint32* scanLine = reinterpret_cast<quint32*>(image.scanLine(y));
for (int x = 0; x < numColumns; x++) {
// ImageData stores the pixels in RGBA while QImage is ARGB
quint32 pixel = reinterpret_cast<quint32*>(srcRows + 4 * x)[0];
pixel = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) | (pixel & 0xff00ff00);
- scanLine[x + destx] = pixel;
+ scanLine[x] = pixel;
}
srcRows += srcBytesPerRow;
}
- data.m_pixmap = QPixmap::fromImage(image);
-
- if (isPainting)
+ bool isPainting = data.m_painter->isActive();
+ if (!isPainting)
data.m_painter->begin(&data.m_pixmap);
+ else {
+ data.m_painter->save();
+
+ // putImageData() should be unaffected by painter state
+ data.m_painter->resetTransform();
+ data.m_painter->setOpacity(1.0);
+ data.m_painter->setClipping(false);
+ }
+
+ data.m_painter->setCompositionMode(QPainter::CompositionMode_Source);
+ data.m_painter->drawImage(destRect, image);
+
+ if (!isPainting)
+ data.m_painter->end();
+ else
+ data.m_painter->restore();
}
void ImageBuffer::putUnmultipliedImageData(ImageData* source, const IntRect& sourceRect, const IntPoint& destPoint)
diff --git a/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp b/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
index 21e670c..3c6c5aa 100644
--- a/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
+++ b/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
@@ -25,6 +25,7 @@
#include "FrameView.h"
#include "GraphicsContext.h"
+#include "Logging.h"
#include "MIMETypeRegistry.h"
#include "NotImplemented.h"
#include "TimeRanges.h"
diff --git a/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp b/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
index 4d7b7b0..525aaf4 100644
--- a/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
+++ b/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp
@@ -77,7 +77,7 @@ MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& mime, c
if (!mime.startsWith("audio/") && !mime.startsWith("video/"))
return MediaPlayer::IsNotSupported;
- if (QMediaPlayer::hasSupport(mime, QStringList(codec)) >= QtMediaServices::ProbablySupported)
+ if (QMediaPlayer::hasSupport(mime, QStringList(codec)) >= QtMultimediaKit::ProbablySupported)
return MediaPlayer::IsSupported;
return MediaPlayer::MayBeSupported;
@@ -96,7 +96,7 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player)
, m_composited(false)
, m_queuedSeek(-1)
{
- m_videoItem->setMediaObject(m_mediaPlayer);
+ m_mediaPlayer->bind(m_videoItem);
m_videoScene->addItem(m_videoItem);
// Signal Handlers
@@ -123,7 +123,7 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player)
QMediaService* service = m_mediaPlayer->service();
if (service) {
m_mediaPlayerControl = qobject_cast<QMediaPlayerControl *>(
- service->control(QMediaPlayerControl_iid));
+ service->requestControl(QMediaPlayerControl_iid));
}
}
@@ -344,8 +344,8 @@ unsigned MediaPlayerPrivate::bytesLoaded() const
unsigned MediaPlayerPrivate::totalBytes() const
{
- if (m_mediaPlayer->availableMetaData().contains(QtMediaServices::Size))
- return m_mediaPlayer->metaData(QtMediaServices::Size).toInt();
+ if (m_mediaPlayer->availableMetaData().contains(QtMultimediaKit::Size))
+ return m_mediaPlayer->metaData(QtMultimediaKit::Size).toInt();
return 100;
}
diff --git a/WebCore/platform/graphics/skia/GradientSkia.cpp b/WebCore/platform/graphics/skia/GradientSkia.cpp
index 7370a49..66a8976 100644
--- a/WebCore/platform/graphics/skia/GradientSkia.cpp
+++ b/WebCore/platform/graphics/skia/GradientSkia.cpp
@@ -154,18 +154,18 @@ SkShader* Gradient::platformGradient()
if (m_radial) {
// Since the two-point radial gradient is slower than the plain radial,
// only use it if we have to.
- if (m_p0 != m_p1) {
- // The radii we give to Skia must be positive. If we're given a
- // negative radius, ask for zero instead.
- SkScalar radius0 = m_r0 >= 0.0f ? WebCoreFloatToSkScalar(m_r0) : 0;
- SkScalar radius1 = m_r1 >= 0.0f ? WebCoreFloatToSkScalar(m_r1) : 0;
- m_gradient = SkGradientShader::CreateTwoPointRadial(m_p0, radius0, m_p1, radius1, colors, pos, static_cast<int>(countUsed), tile);
- } else {
+ if (m_p0 == m_p1 && m_r0 <= 0.0f) {
// The radius we give to Skia must be positive (and non-zero). If
// we're given a zero radius, just ask for a very small radius so
// Skia will still return an object.
SkScalar radius = m_r1 > 0 ? WebCoreFloatToSkScalar(m_r1) : SK_ScalarMin;
m_gradient = SkGradientShader::CreateRadial(m_p1, radius, colors, pos, static_cast<int>(countUsed), tile);
+ } else {
+ // The radii we give to Skia must be positive. If we're given a
+ // negative radius, ask for zero instead.
+ SkScalar radius0 = m_r0 >= 0.0f ? WebCoreFloatToSkScalar(m_r0) : 0;
+ SkScalar radius1 = m_r1 >= 0.0f ? WebCoreFloatToSkScalar(m_r1) : 0;
+ m_gradient = SkGradientShader::CreateTwoPointRadial(m_p0, radius0, m_p1, radius1, colors, pos, static_cast<int>(countUsed), tile);
}
} else {
SkPoint pts[2] = { m_p0, m_p1 };
diff --git a/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp b/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
index 793fe72..0c1898b 100644
--- a/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
+++ b/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
@@ -737,6 +737,8 @@ void GraphicsContext::fillRect(const FloatRect& rect)
if (paintingDisabled())
return;
+ platformContext()->save();
+
SkRect r = rect;
if (!isRectSkiaSafe(getCTM(), r)) {
// See the other version of fillRect below.
@@ -746,6 +748,8 @@ void GraphicsContext::fillRect(const FloatRect& rect)
SkPaint paint;
platformContext()->setupPaintForFilling(&paint);
platformContext()->canvas()->drawRect(r, paint);
+
+ platformContext()->restore();
}
void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace)
diff --git a/WebCore/platform/graphics/skia/SkiaUtils.cpp b/WebCore/platform/graphics/skia/SkiaUtils.cpp
index 377ca06..0c6b2d6 100644
--- a/WebCore/platform/graphics/skia/SkiaUtils.cpp
+++ b/WebCore/platform/graphics/skia/SkiaUtils.cpp
@@ -240,9 +240,7 @@ bool SkPathContainsPoint(SkPath* originalPath, const FloatPoint& point, SkPath::
GraphicsContext* scratchContext()
{
- static ImageBuffer* scratch = 0;
- if (!scratch)
- scratch = ImageBuffer::create(IntSize(1, 1)).release();
+ static ImageBuffer* scratch = ImageBuffer::create(IntSize(1, 1)).leakPtr();
// We don't bother checking for failure creating the ImageBuffer, since our
// ImageBuffer initializer won't fail.
return scratch->context();
diff --git a/WebCore/platform/graphics/wince/GraphicsContextWince.cpp b/WebCore/platform/graphics/wince/GraphicsContextWince.cpp
index 7bc6a27..5292b82 100644
--- a/WebCore/platform/graphics/wince/GraphicsContextWince.cpp
+++ b/WebCore/platform/graphics/wince/GraphicsContextWince.cpp
@@ -1555,10 +1555,14 @@ void GraphicsContext::clipToImageBuffer(const FloatRect&, const ImageBuffer*)
void GraphicsContext::fillRect(const FloatRect& rect)
{
+ savePlatformState();
+
if (m_common->state.fillGradient)
fillRect(rect, m_common->state.fillGradient.get());
else
fillRect(rect, fillColor(), DeviceColorSpace);
+
+ restorePlatformState();
}
void GraphicsContext::setPlatformShadow(const FloatSize&, float, const Color&, ColorSpace)
diff --git a/WebCore/platform/graphics/wx/GraphicsContextWx.cpp b/WebCore/platform/graphics/wx/GraphicsContextWx.cpp
index 5968ef3..01dce9e 100644
--- a/WebCore/platform/graphics/wx/GraphicsContextWx.cpp
+++ b/WebCore/platform/graphics/wx/GraphicsContextWx.cpp
@@ -272,9 +272,13 @@ void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorS
if (paintingDisabled())
return;
+ savePlatformState();
+
m_data->context->SetPen(*wxTRANSPARENT_PEN);
m_data->context->SetBrush(wxBrush(color));
m_data->context->DrawRectangle(rect.x(), rect.y(), rect.width(), rect.height());
+
+ restorePlatformState();
}
void GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color, ColorSpace colorSpace)
diff --git a/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp b/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp
index f6dea79..9fc0e74 100644
--- a/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp
+++ b/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp
@@ -39,8 +39,27 @@ GdkDragAction dragOperationToGdkDragActions(DragOperation coreAction)
return gdkAction;
}
+GdkDragAction dragOperationToSingleGdkDragAction(DragOperation coreAction)
+{
+ if (coreAction == DragOperationEvery || coreAction & DragOperationCopy)
+ return GDK_ACTION_COPY;
+ if (coreAction & DragOperationMove)
+ return GDK_ACTION_MOVE;
+ if (coreAction & DragOperationLink)
+ return GDK_ACTION_LINK;
+ if (coreAction & DragOperationPrivate)
+ return GDK_ACTION_PRIVATE;
+ return static_cast<GdkDragAction>(0);
+}
+
DragOperation gdkDragActionToDragOperation(GdkDragAction gdkAction)
{
+ // We have no good way to detect DragOperationEvery other than
+ // to use it when all applicable flags are on.
+ if (gdkAction & GDK_ACTION_COPY && gdkAction & GDK_ACTION_MOVE
+ && gdkAction & GDK_ACTION_LINK && gdkAction & GDK_ACTION_PRIVATE)
+ return DragOperationEvery;
+
unsigned int action = DragOperationNone;
if (gdkAction & GDK_ACTION_COPY)
action |= DragOperationCopy;
diff --git a/WebCore/platform/gtk/ClipboardUtilitiesGtk.h b/WebCore/platform/gtk/ClipboardUtilitiesGtk.h
index bdb2aec..26f6346 100644
--- a/WebCore/platform/gtk/ClipboardUtilitiesGtk.h
+++ b/WebCore/platform/gtk/ClipboardUtilitiesGtk.h
@@ -25,6 +25,7 @@
namespace WebCore {
GdkDragAction dragOperationToGdkDragActions(DragOperation);
+GdkDragAction dragOperationToSingleGdkDragAction(DragOperation);
DragOperation gdkDragActionToDragOperation(GdkDragAction);
}
diff --git a/WebCore/platform/gtk/GtkVersioning.h b/WebCore/platform/gtk/GtkVersioning.h
index 885d69f..ebb1645 100644
--- a/WebCore/platform/gtk/GtkVersioning.h
+++ b/WebCore/platform/gtk/GtkVersioning.h
@@ -27,6 +27,7 @@
#define gdk_visual_get_depth(visual) (visual)->depth
#define gdk_visual_get_bits_per_rgb(visual) (visual)->bits_per_rgb
#define gdk_drag_context_get_selected_action(context) (context)->action
+#define gdk_drag_context_get_actions(context) (context)->actions
#endif // GTK_CHECK_VERSION(2, 21, 2)
#if !GTK_CHECK_VERSION(2, 20, 0)
@@ -55,6 +56,7 @@
#define gtk_dialog_get_action_area(dialog) (dialog)->action_area
#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
#endif // GTK_CHECK_VERSION(2, 14, 0)
diff --git a/WebCore/platform/gtk/PasteboardHelper.cpp b/WebCore/platform/gtk/PasteboardHelper.cpp
index 98cbe42..111fb4e 100644
--- a/WebCore/platform/gtk/PasteboardHelper.cpp
+++ b/WebCore/platform/gtk/PasteboardHelper.cpp
@@ -34,7 +34,8 @@
namespace WebCore {
-static GdkAtom gdkMarkupAtom = gdk_atom_intern("text/html", FALSE);
+static GdkAtom textPlainAtom = gdk_atom_intern("text/plain;charset=utf-8", FALSE);
+static GdkAtom markupAtom = gdk_atom_intern("text/html", FALSE);
static GdkAtom netscapeURLAtom = gdk_atom_intern("_NETSCAPE_URL", FALSE);
static GdkAtom uriListAtom = gdk_atom_intern("text/uri-list", FALSE);
@@ -48,13 +49,13 @@ PasteboardHelper::~PasteboardHelper()
gtk_target_list_unref(m_targetList);
}
-
void PasteboardHelper::initializeTargetList()
{
gtk_target_list_add_text_targets(m_targetList, getIdForTargetType(TargetTypeText));
- gtk_target_list_add(m_targetList, gdkMarkupAtom, 0, getIdForTargetType(TargetTypeMarkup));
+ gtk_target_list_add(m_targetList, markupAtom, 0, getIdForTargetType(TargetTypeMarkup));
gtk_target_list_add_uri_targets(m_targetList, getIdForTargetType(TargetTypeURIList));
gtk_target_list_add(m_targetList, netscapeURLAtom, 0, getIdForTargetType(TargetTypeNetscapeURL));
+ gtk_target_list_add_image_targets(m_targetList, getIdForTargetType(TargetTypeImage), TRUE);
}
static inline GtkWidget* widgetFromFrame(Frame* frame)
@@ -102,6 +103,13 @@ static Vector<KURL> urisToKURLVector(gchar** uris)
return uriList;
}
+static String selectionDataToUTF8String(GtkSelectionData* data)
+{
+ // g_strndup guards against selection data that is not null-terminated.
+ GOwnPtr<gchar> markupString(g_strndup(reinterpret_cast<const char*>(gtk_selection_data_get_data(data)), gtk_selection_data_get_length(data)));
+ return String::fromUTF8(markupString.get());
+}
+
void PasteboardHelper::getClipboardContents(GtkClipboard* clipboard)
{
DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard);
@@ -113,11 +121,9 @@ void PasteboardHelper::getClipboardContents(GtkClipboard* clipboard)
dataObject->setText(String::fromUTF8(textData.get()));
}
- if (gtk_clipboard_wait_is_target_available(clipboard, gdkMarkupAtom)) {
- if (GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, gdkMarkupAtom)) {
- // g_strndup guards against selection data that is not null-terminated.
- GOwnPtr<gchar> markupString(g_strndup(reinterpret_cast<const char*>(gtk_selection_data_get_data(data)), gtk_selection_data_get_length(data)));
- dataObject->setMarkup(String::fromUTF8(markupString.get()));
+ if (gtk_clipboard_wait_is_target_available(clipboard, markupAtom)) {
+ if (GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, markupAtom)) {
+ dataObject->setMarkup(selectionDataToUTF8String(data));
gtk_selection_data_free(data);
}
}
@@ -141,7 +147,7 @@ void PasteboardHelper::fillSelectionData(GtkSelectionData* selectionData, guint
else if (info == getIdForTargetType(TargetTypeMarkup)) {
GOwnPtr<gchar> markup(g_strdup(dataObject->markup().utf8().data()));
- gtk_selection_data_set(selectionData, gdkMarkupAtom, 8,
+ gtk_selection_data_set(selectionData, markupAtom, 8,
reinterpret_cast<const guchar*>(markup.get()), strlen(markup.get()) + 1);
} else if (info == getIdForTargetType(TargetTypeURIList)) {
@@ -179,7 +185,7 @@ GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObje
gtk_target_list_add_text_targets(list, getIdForTargetType(TargetTypeText));
if (dataObject->hasMarkup())
- gtk_target_list_add(list, gdkMarkupAtom, 0, getIdForTargetType(TargetTypeMarkup));
+ gtk_target_list_add(list, markupAtom, 0, getIdForTargetType(TargetTypeMarkup));
if (dataObject->hasURIList()) {
gtk_target_list_add_uri_targets(list, getIdForTargetType(TargetTypeURIList));
@@ -192,6 +198,62 @@ GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObje
return list;
}
+void PasteboardHelper::fillDataObjectFromDropData(GtkSelectionData* data, guint info, DataObjectGtk* dataObject)
+{
+ if (!gtk_selection_data_get_data(data))
+ return;
+
+ GdkAtom target = gtk_selection_data_get_target(data);
+ if (target == textPlainAtom)
+ dataObject->setText(selectionDataToUTF8String(data));
+ else if (target == markupAtom)
+ dataObject->setMarkup(selectionDataToUTF8String(data));
+ else if (target == uriListAtom) {
+ gchar** uris = gtk_selection_data_get_uris(data);
+ if (!uris)
+ return;
+
+ Vector<KURL> uriList(urisToKURLVector(uris));
+ dataObject->setURIList(uriList);
+ g_strfreev(uris);
+ } else if (target == netscapeURLAtom) {
+ String urlWithLabel(selectionDataToUTF8String(data));
+
+ Vector<String> pieces;
+ urlWithLabel.split("\n", pieces);
+
+ // Give preference to text/uri-list here, as it can hold more
+ // than one URI but still take the label if there is one.
+ if (!dataObject->hasURL()) {
+ Vector<KURL> uriList;
+ uriList.append(KURL(KURL(), pieces[0]));
+ dataObject->setURIList(uriList);
+ }
+
+ if (pieces.size() > 1)
+ dataObject->setText(pieces[1]);
+ }
+}
+
+Vector<GdkAtom> PasteboardHelper::dropAtomsForContext(GtkWidget* widget, GdkDragContext* context)
+{
+ // Always search for these common atoms.
+ Vector<GdkAtom> dropAtoms;
+ dropAtoms.append(textPlainAtom);
+ dropAtoms.append(markupAtom);
+ dropAtoms.append(uriListAtom);
+ dropAtoms.append(netscapeURLAtom);
+
+ // For images, try to find the most applicable image type.
+ GRefPtr<GtkTargetList> list(gtk_target_list_new(0, 0));
+ gtk_target_list_add_image_targets(list.get(), getIdForTargetType(TargetTypeImage), TRUE);
+ GdkAtom atom = gtk_drag_dest_find_target(widget, context, list.get());
+ if (atom != GDK_NONE)
+ dropAtoms.append(atom);
+
+ return dropAtoms;
+}
+
static DataObjectGtk* settingClipboardDataObject = 0;
static void getClipboardContentsCallback(GtkClipboard* clipboard, GtkSelectionData *selectionData, guint info, gpointer data)
diff --git a/WebCore/platform/gtk/PasteboardHelper.h b/WebCore/platform/gtk/PasteboardHelper.h
index 2d46adc..33be1a8 100644
--- a/WebCore/platform/gtk/PasteboardHelper.h
+++ b/WebCore/platform/gtk/PasteboardHelper.h
@@ -36,6 +36,8 @@ typedef struct _GtkClipboard GtkClipboard;
typedef struct _GtkTargetList GtkTargetList;
typedef struct _GtkWidget GtkWidget;
typedef struct _GtkSelectionData GtkSelectionData;
+typedef struct _GdkDragContext GdkDragContext;
+typedef struct _GdkAtom* GdkAtom;
namespace WebCore {
@@ -52,6 +54,8 @@ public:
GtkTargetList* targetList() const;
GtkTargetList* targetListForDataObject(DataObjectGtk*);
void fillSelectionData(GtkSelectionData*, guint, DataObjectGtk*);
+ void fillDataObjectFromDropData(GtkSelectionData*, guint, DataObjectGtk*);
+ Vector<GdkAtom> dropAtomsForContext(GtkWidget*, GdkDragContext*);
void writeClipboardContents(GtkClipboard*, GClosure* closure = 0);
void getClipboardContents(GtkClipboard*);
diff --git a/WebCore/platform/gtk/ScrollViewGtk.cpp b/WebCore/platform/gtk/ScrollViewGtk.cpp
index 3edc7b0..e705fe0 100644
--- a/WebCore/platform/gtk/ScrollViewGtk.cpp
+++ b/WebCore/platform/gtk/ScrollViewGtk.cpp
@@ -106,40 +106,7 @@ void ScrollView::setGtkAdjustments(GtkAdjustment* hadj, GtkAdjustment* vadj, boo
m_horizontalAdjustment = hadj;
m_verticalAdjustment = vadj;
- // Reset the adjustments to a sane default
- if (m_horizontalAdjustment) {
- ScrollbarGtk* hScrollbar = reinterpret_cast<ScrollbarGtk*>(horizontalScrollbar());
- if (hScrollbar)
- hScrollbar->attachAdjustment(m_horizontalAdjustment);
-
- ScrollbarGtk* vScrollbar = reinterpret_cast<ScrollbarGtk*>(verticalScrollbar());
- if (vScrollbar)
- vScrollbar->attachAdjustment(m_verticalAdjustment);
-
- // We used to reset everything to 0 here, but when page cache
- // is enabled we reuse FrameViews that are cached. Since their
- // size is not going to change when being restored, (which is
- // what would cause the upper limit in the adjusments to be
- // set in the normal case), we make sure they are up-to-date
- // here. This is needed for the parent scrolling widget to be
- // able to report correct values.
-
- int horizontalPageStep = max(max<int>(frameRect().width() * Scrollbar::minFractionToStepWhenPaging(), frameRect().width() - Scrollbar::maxOverlapBetweenPages()), 1);
- gtk_adjustment_configure(m_horizontalAdjustment,
- resetValues ? 0 : scrollOffset().width(), 0,
- resetValues ? 0 : contentsSize().width(),
- resetValues ? 0 : Scrollbar::pixelsPerLineStep(),
- resetValues ? 0 : horizontalPageStep,
- resetValues ? 0 : frameRect().width());
-
- int verticalPageStep = max(max<int>(frameRect().height() * Scrollbar::minFractionToStepWhenPaging(), frameRect().height() - Scrollbar::maxOverlapBetweenPages()), 1);
- gtk_adjustment_configure(m_verticalAdjustment,
- resetValues ? 0 : scrollOffset().height(), 0,
- resetValues ? 0 : contentsSize().height(),
- resetValues ? 0 : Scrollbar::pixelsPerLineStep(),
- resetValues ? 0 : verticalPageStep,
- resetValues ? 0 : frameRect().height());
- } else {
+ if (!m_horizontalAdjustment) {
ScrollbarGtk* hScrollbar = reinterpret_cast<ScrollbarGtk*>(horizontalScrollbar());
if (hScrollbar)
hScrollbar->detachAdjustment();
@@ -147,11 +114,44 @@ void ScrollView::setGtkAdjustments(GtkAdjustment* hadj, GtkAdjustment* vadj, boo
ScrollbarGtk* vScrollbar = reinterpret_cast<ScrollbarGtk*>(verticalScrollbar());
if (vScrollbar)
vScrollbar->detachAdjustment();
+
+ return;
}
- /* reconsider having a scrollbar */
- setHasVerticalScrollbar(false);
- setHasHorizontalScrollbar(false);
+ // We may be lacking scrollbars when returning to a cached
+ // page, this kicks the page to recreate the scrollbars.
+ setHasVerticalScrollbar(true);
+ setHasHorizontalScrollbar(true);
+
+ ScrollbarGtk* hScrollbar = reinterpret_cast<ScrollbarGtk*>(horizontalScrollbar());
+ hScrollbar->attachAdjustment(m_horizontalAdjustment);
+
+ ScrollbarGtk* vScrollbar = reinterpret_cast<ScrollbarGtk*>(verticalScrollbar());
+ vScrollbar->attachAdjustment(m_verticalAdjustment);
+
+ // We used to reset everything to 0 here, but when page cache
+ // is enabled we reuse FrameViews that are cached. Since their
+ // size is not going to change when being restored, (which is
+ // what would cause the upper limit in the adjusments to be
+ // set in the normal case), we make sure they are up-to-date
+ // here. This is needed for the parent scrolling widget to be
+ // able to report correct values.
+
+ int horizontalPageStep = max(max<int>(frameRect().width() * Scrollbar::minFractionToStepWhenPaging(), frameRect().width() - Scrollbar::maxOverlapBetweenPages()), 1);
+ gtk_adjustment_configure(m_horizontalAdjustment,
+ resetValues ? 0 : scrollOffset().width(), 0,
+ resetValues ? 0 : contentsSize().width(),
+ resetValues ? 0 : Scrollbar::pixelsPerLineStep(),
+ resetValues ? 0 : horizontalPageStep,
+ resetValues ? 0 : frameRect().width());
+
+ int verticalPageStep = max(max<int>(frameRect().height() * Scrollbar::minFractionToStepWhenPaging(), frameRect().height() - Scrollbar::maxOverlapBetweenPages()), 1);
+ gtk_adjustment_configure(m_verticalAdjustment,
+ resetValues ? 0 : scrollOffset().height(), 0,
+ resetValues ? 0 : contentsSize().height(),
+ resetValues ? 0 : Scrollbar::pixelsPerLineStep(),
+ resetValues ? 0 : verticalPageStep,
+ resetValues ? 0 : frameRect().height());
}
void ScrollView::platformAddChild(Widget* child)
diff --git a/WebCore/platform/mac/PurgeableBufferMac.cpp b/WebCore/platform/mac/PurgeableBufferMac.cpp
index 9902f77..ce00494 100644
--- a/WebCore/platform/mac/PurgeableBufferMac.cpp
+++ b/WebCore/platform/mac/PurgeableBufferMac.cpp
@@ -50,27 +50,27 @@ PurgeableBuffer::~PurgeableBuffer()
vm_deallocate(mach_task_self(), reinterpret_cast<vm_address_t>(m_data), m_size);
}
-PurgeableBuffer* PurgeableBuffer::create(const char* data, size_t size)
+PassOwnPtr<PurgeableBuffer> PurgeableBuffer::create(const char* data, size_t size)
{
if (size < minPurgeableBufferSize)
- return 0;
+ return PassOwnPtr<PurgeableBuffer>();
vm_address_t buffer = 0;
kern_return_t ret = vm_allocate(mach_task_self(), &buffer, size, VM_FLAGS_PURGABLE | VM_FLAGS_ANYWHERE | VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY);
ASSERT(ret == KERN_SUCCESS);
if (ret != KERN_SUCCESS)
- return 0;
+ return PassOwnPtr<PurgeableBuffer>();
ret = vm_copy(mach_task_self(), reinterpret_cast<vm_address_t>(data), size, buffer);
ASSERT(ret == KERN_SUCCESS);
if (ret != KERN_SUCCESS) {
vm_deallocate(mach_task_self(), buffer, size);
- return 0;
+ return PassOwnPtr<PurgeableBuffer>();
}
- return new PurgeableBuffer(reinterpret_cast<char*>(buffer), size);
+ return adoptPtr(new PurgeableBuffer(reinterpret_cast<char*>(buffer), size));
}
bool PurgeableBuffer::makePurgeable(bool purgeable)
diff --git a/WebCore/platform/network/ResourceErrorBase.cpp b/WebCore/platform/network/ResourceErrorBase.cpp
index 97435ba..42bc0de 100644
--- a/WebCore/platform/network/ResourceErrorBase.cpp
+++ b/WebCore/platform/network/ResourceErrorBase.cpp
@@ -29,6 +29,8 @@
namespace WebCore {
+const char* const errorDomainWebKitInternal = "WebKitInternal";
+
ResourceError ResourceErrorBase::copy() const
{
lazyInit();
diff --git a/WebCore/platform/network/ResourceErrorBase.h b/WebCore/platform/network/ResourceErrorBase.h
index 237db9e..a6b7c69 100644
--- a/WebCore/platform/network/ResourceErrorBase.h
+++ b/WebCore/platform/network/ResourceErrorBase.h
@@ -32,6 +32,8 @@ namespace WebCore {
class ResourceError;
+extern const char* const errorDomainWebKitInternal; // Used for errors that won't be exposed to clients.
+
class ResourceErrorBase {
public:
// Makes a deep copy. Useful for when you need to use a ResourceError on another thread.
diff --git a/WebCore/platform/network/ResourceLoadTiming.h b/WebCore/platform/network/ResourceLoadTiming.h
index 55ff181..269fad0 100644
--- a/WebCore/platform/network/ResourceLoadTiming.h
+++ b/WebCore/platform/network/ResourceLoadTiming.h
@@ -34,7 +34,7 @@ namespace WebCore {
class ResourceLoadTiming : public RefCounted<ResourceLoadTiming> {
public:
- PassRefPtr<ResourceLoadTiming> create()
+ static PassRefPtr<ResourceLoadTiming> create()
{
return adoptRef(new ResourceLoadTiming);
}
@@ -42,33 +42,35 @@ public:
PassRefPtr<ResourceLoadTiming> deepCopy()
{
RefPtr<ResourceLoadTiming> timing = create();
- timing->redirectStart = redirectStart;
- timing->redirectEnd = redirectEnd;
- timing->redirectCount = redirectCount;
- timing->domainLookupStart = domainLookupStart;
- timing->domainLookupEnd = domainLookupEnd;
+ timing->requestTime = requestTime;
+ timing->proxyStart = proxyStart;
+ timing->proxyEnd = proxyEnd;
+ timing->dnsStart = dnsStart;
+ timing->dnsEnd = dnsEnd;
timing->connectStart = connectStart;
timing->connectEnd = connectEnd;
- timing->requestStart = requestStart;
- timing->requestEnd = requestEnd;
- timing->responseStart = responseStart;
- timing->responseEnd = responseEnd;
+ timing->sendStart = sendStart;
+ timing->sendEnd = sendEnd;
+ timing->receiveHeadersEnd = receiveHeadersEnd;
+ timing->sslStart = sslStart;
+ timing->sslEnd = sslEnd;
return timing.release();
}
bool operator==(const ResourceLoadTiming& other) const
{
- return redirectStart == other.redirectStart
- && redirectEnd == other.redirectEnd
- && redirectCount == other.redirectCount
- && domainLookupStart == other.domainLookupStart
- && domainLookupEnd == other.domainLookupEnd
+ return requestTime == other.requestTime
+ && proxyStart == other.proxyStart
+ && proxyEnd == other.proxyEnd
+ && dnsStart == other.dnsStart
+ && dnsEnd == other.dnsEnd
&& connectStart == other.connectStart
&& connectEnd == other.connectEnd
- && requestStart == other.requestStart
- && requestEnd == other.requestEnd
- && responseStart == other.responseStart
- && responseEnd == other.responseEnd;
+ && sendStart == other.sendStart
+ && sendEnd == other.sendEnd
+ && receiveHeadersEnd == other.receiveHeadersEnd
+ && sslStart == other.sslStart
+ && sslEnd == other.sslEnd;
}
bool operator!=(const ResourceLoadTiming& other) const
@@ -76,31 +78,33 @@ public:
return !(*this == other);
}
- double redirectStart;
- double redirectEnd;
- unsigned short redirectCount;
- double domainLookupStart;
- double domainLookupEnd;
- double connectStart;
- double connectEnd;
- double requestStart;
- double requestEnd;
- double responseStart;
- double responseEnd;
+ double requestTime;
+ int proxyStart;
+ int proxyEnd;
+ int dnsStart;
+ int dnsEnd;
+ int connectStart;
+ int connectEnd;
+ int sendStart;
+ int sendEnd;
+ int receiveHeadersEnd;
+ int sslStart;
+ int sslEnd;
private:
ResourceLoadTiming()
- : redirectStart(0.0)
- , redirectEnd(0.0)
- , redirectCount(0)
- , domainLookupStart(0.0)
- , domainLookupEnd(0.0)
- , connectStart(0.0)
- , connectEnd(0.0)
- , requestStart(0.0)
- , requestEnd(0.0)
- , responseStart(0.0)
- , responseEnd(0.0)
+ : requestTime(0)
+ , proxyStart(-1)
+ , proxyEnd(-1)
+ , dnsStart(-1)
+ , dnsEnd(-1)
+ , connectStart(-1)
+ , connectEnd(-1)
+ , sendStart(0)
+ , sendEnd(0)
+ , receiveHeadersEnd(0)
+ , sslStart(-1)
+ , sslEnd(-1)
{
}
};
diff --git a/WebCore/platform/network/ResourceRequestBase.h b/WebCore/platform/network/ResourceRequestBase.h
index 2cec4ec..1622cdd 100644
--- a/WebCore/platform/network/ResourceRequestBase.h
+++ b/WebCore/platform/network/ResourceRequestBase.h
@@ -132,6 +132,10 @@ namespace WebCore {
bool reportUploadProgress() const { return m_reportUploadProgress; }
void setReportUploadProgress(bool reportUploadProgress) { m_reportUploadProgress = reportUploadProgress; }
+ // Whether the timing information should be collected for the request.
+ bool reportLoadTiming() const { return m_reportLoadTiming; }
+ void setReportLoadTiming(bool reportLoadTiming) { m_reportLoadTiming = reportLoadTiming; }
+
// What this request is for.
TargetType targetType() const { return m_targetType; }
void setTargetType(TargetType type) { m_targetType = type; }
@@ -142,6 +146,7 @@ namespace WebCore {
: m_resourceRequestUpdated(false)
, m_platformRequestUpdated(true)
, m_reportUploadProgress(false)
+ , m_reportLoadTiming(false)
, m_targetType(TargetIsSubresource)
{
}
@@ -155,6 +160,7 @@ namespace WebCore {
, m_resourceRequestUpdated(true)
, m_platformRequestUpdated(false)
, m_reportUploadProgress(false)
+ , m_reportLoadTiming(false)
, m_targetType(TargetIsSubresource)
{
}
@@ -175,6 +181,7 @@ namespace WebCore {
mutable bool m_resourceRequestUpdated;
mutable bool m_platformRequestUpdated;
bool m_reportUploadProgress;
+ bool m_reportLoadTiming;
TargetType m_targetType;
private:
diff --git a/WebCore/platform/network/ResourceResponseBase.cpp b/WebCore/platform/network/ResourceResponseBase.cpp
index 607cd7f..89d31d7 100644
--- a/WebCore/platform/network/ResourceResponseBase.cpp
+++ b/WebCore/platform/network/ResourceResponseBase.cpp
@@ -43,6 +43,8 @@ ResourceResponseBase::ResourceResponseBase()
: m_expectedContentLength(0)
, m_httpStatusCode(0)
, m_lastModifiedDate(0)
+ , m_wasCached(false)
+ , m_connectionID(0)
, m_isNull(true)
, m_haveParsedCacheControlHeader(false)
, m_haveParsedAgeHeader(false)
@@ -68,6 +70,8 @@ ResourceResponseBase::ResourceResponseBase(const KURL& url, const String& mimeTy
, m_suggestedFilename(filename)
, m_httpStatusCode(0)
, m_lastModifiedDate(0)
+ , m_wasCached(false)
+ , m_connectionID(0)
, m_isNull(false)
, m_haveParsedCacheControlHeader(false)
, m_haveParsedAgeHeader(false)
@@ -455,6 +459,32 @@ time_t ResourceResponseBase::lastModifiedDate() const
return m_lastModifiedDate;
}
+bool ResourceResponseBase::wasCached() const
+{
+ lazyInit();
+
+ return m_wasCached;
+}
+
+void ResourceResponseBase::setWasCached(bool value)
+{
+ m_wasCached = value;
+}
+
+unsigned ResourceResponseBase::connectionID() const
+{
+ lazyInit();
+
+ return m_connectionID;
+}
+
+void ResourceResponseBase::setConnectionID(unsigned connectionID)
+{
+ lazyInit();
+
+ m_connectionID = connectionID;
+}
+
ResourceLoadTiming* ResourceResponseBase::resourceLoadTiming() const
{
lazyInit();
diff --git a/WebCore/platform/network/ResourceResponseBase.h b/WebCore/platform/network/ResourceResponseBase.h
index 697a84c..858a612 100644
--- a/WebCore/platform/network/ResourceResponseBase.h
+++ b/WebCore/platform/network/ResourceResponseBase.h
@@ -97,6 +97,12 @@ public:
double expires() const;
double lastModified() const;
+ unsigned connectionID() const;
+ void setConnectionID(unsigned);
+
+ bool wasCached() const;
+ void setWasCached(bool);
+
ResourceLoadTiming* resourceLoadTiming() const;
void setResourceLoadTiming(PassRefPtr<ResourceLoadTiming>);
@@ -130,6 +136,8 @@ protected:
String m_httpStatusText;
HTTPHeaderMap m_httpHeaderFields;
time_t m_lastModifiedDate;
+ bool m_wasCached;
+ unsigned m_connectionID;
RefPtr<ResourceLoadTiming> m_resourceLoadTiming;
bool m_isNull : 1;
diff --git a/WebCore/platform/network/android/ResourceHandleAndroid.cpp b/WebCore/platform/network/android/ResourceHandleAndroid.cpp
index 81b75b0..60d1eb6 100644
--- a/WebCore/platform/network/android/ResourceHandleAndroid.cpp
+++ b/WebCore/platform/network/android/ResourceHandleAndroid.cpp
@@ -156,6 +156,7 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request,
Frame* frame)
{
SyncLoader s(error, response, data);
+<<<<<<< HEAD
ResourceHandle h(request, &s, false, false);
// This blocks until the load is finished.
// Use the request owned by the ResourceHandle. This has had the username
@@ -163,6 +164,11 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request,
// ResourceHandleInternal::ResourceHandleInternal(). This matches the
// behaviour in the asynchronous case.
ResourceLoaderAndroid::start(&h, h.getInternal()->m_request, frame->loader()->client(), false, true);
+=======
+ RefPtr<ResourceHandle> h = adoptRef(new ResourceHandle(request, &s, false, false, false));
+ // This blocks until the load is finished.
+ ResourceLoaderAndroid::start(h.get(), request, frame->loader()->client(), false, true);
+>>>>>>> webkit.org at r63173
}
} // namespace WebCore
diff --git a/WebCore/platform/network/cf/ResourceHandleCFNet.cpp b/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
index f126d27..1139126 100644
--- a/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
+++ b/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
@@ -538,6 +538,12 @@ void ResourceHandle::receivedCredential(const AuthenticationChallenge& challenge
if (challenge != d->m_currentWebChallenge)
return;
+ // FIXME: Support empty credentials. Currently, an empty credential cannot be stored in WebCore credential storage, as that's empty value for its map.
+ if (credential.isEmpty()) {
+ receivedRequestToContinueWithoutCredential(challenge);
+ return;
+ }
+
if (credential.persistence() == CredentialPersistenceForSession) {
// Manage per-session credentials internally, because once NSURLCredentialPersistencePerSession is used, there is no way
// to ignore it for a particular request (short of removing it altogether).
diff --git a/WebCore/platform/network/curl/ResourceHandleCurl.cpp b/WebCore/platform/network/curl/ResourceHandleCurl.cpp
index 1fbafbd..a4c1f8e 100644
--- a/WebCore/platform/network/curl/ResourceHandleCurl.cpp
+++ b/WebCore/platform/network/curl/ResourceHandleCurl.cpp
@@ -190,11 +190,11 @@ bool ResourceHandle::loadsBlocked()
void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials storedCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame*)
{
WebCoreSynchronousLoader syncLoader;
- ResourceHandle handle(request, &syncLoader, true, false);
+ RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, true, false));
ResourceHandleManager* manager = ResourceHandleManager::sharedInstance();
- manager->dispatchSynchronousJob(&handle);
+ manager->dispatchSynchronousJob(handle.get());
error = syncLoader.resourceError();
data = syncLoader.data();
diff --git a/WebCore/platform/network/mac/ResourceHandleMac.mm b/WebCore/platform/network/mac/ResourceHandleMac.mm
index f14c108..9f64d4e 100644
--- a/WebCore/platform/network/mac/ResourceHandleMac.mm
+++ b/WebCore/platform/network/mac/ResourceHandleMac.mm
@@ -583,7 +583,8 @@ void ResourceHandle::receivedCredential(const AuthenticationChallenge& challenge
ASSERT(!challenge.isNull());
if (challenge != d->m_currentWebChallenge)
return;
-
+
+ // FIXME: Support empty credentials. Currently, an empty credential cannot be stored in WebCore credential storage, as that's empty value for its map.
if (credential.isEmpty()) {
receivedRequestToContinueWithoutCredential(challenge);
return;
diff --git a/WebCore/platform/network/qt/ResourceHandleQt.cpp b/WebCore/platform/network/qt/ResourceHandleQt.cpp
index b35df6b..ff75a94 100644
--- a/WebCore/platform/network/qt/ResourceHandleQt.cpp
+++ b/WebCore/platform/network/qt/ResourceHandleQt.cpp
@@ -189,9 +189,9 @@ PassRefPtr<SharedBuffer> ResourceHandle::bufferedData()
void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials /*storedCredentials*/, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame* frame)
{
WebCoreSynchronousLoader syncLoader;
- ResourceHandle handle(request, &syncLoader, true, false);
+ RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, true, false));
- ResourceHandleInternal *d = handle.getInternal();
+ ResourceHandleInternal* d = handle->getInternal();
if (!(d->m_user.isEmpty() || d->m_pass.isEmpty())) {
// If credentials were specified for this request, add them to the url,
// so that they will be passed to QNetworkRequest.
@@ -201,7 +201,7 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, S
d->m_request.setURL(urlWithCredentials);
}
d->m_frame = static_cast<FrameLoaderClientQt*>(frame->loader()->client())->webFrame();
- d->m_job = new QNetworkReplyHandler(&handle, QNetworkReplyHandler::LoadNormal);
+ d->m_job = new QNetworkReplyHandler(handle.get(), QNetworkReplyHandler::LoadNormal);
syncLoader.waitForCompletion();
error = syncLoader.resourceError();
diff --git a/WebCore/platform/network/soup/ResourceHandleSoup.cpp b/WebCore/platform/network/soup/ResourceHandleSoup.cpp
index 15d914f..e4f2a4b 100644
--- a/WebCore/platform/network/soup/ResourceHandleSoup.cpp
+++ b/WebCore/platform/network/soup/ResourceHandleSoup.cpp
@@ -658,9 +658,12 @@ bool ResourceHandle::willLoadFromCache(ResourceRequest&, Frame*)
void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials /*storedCredentials*/, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame* frame)
{
WebCoreSynchronousLoader syncLoader(error, response, data);
- ResourceHandle handle(request, &syncLoader, true, false);
+ // 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, true, false));
+ handle->start(frame);
- handle.start(frame);
syncLoader.run();
}
@@ -929,4 +932,3 @@ SoupSession* ResourceHandle::defaultSession()
}
}
-
diff --git a/WebCore/platform/qt/ClipboardQt.cpp b/WebCore/platform/qt/ClipboardQt.cpp
index f478e64..7d22349 100644
--- a/WebCore/platform/qt/ClipboardQt.cpp
+++ b/WebCore/platform/qt/ClipboardQt.cpp
@@ -50,6 +50,7 @@
#include <QList>
#include <QMimeData>
#include <QStringList>
+#include <QTextCodec>
#include <QUrl>
#include <qdebug.h>
@@ -62,6 +63,11 @@ static bool isTextMimeType(const String& type)
return type == "text/plain" || type.startsWith("text/plain;");
}
+static bool isHtmlMimeType(const String& type)
+{
+ return type == "text/html" || type.startsWith("text/html;");
+}
+
ClipboardQt::ClipboardQt(ClipboardAccessPolicy policy, const QMimeData* readableClipboard)
: Clipboard(policy, true)
, m_readableData(readableClipboard)
@@ -135,15 +141,21 @@ String ClipboardQt::getData(const String& type, bool& success) const
return String();
}
+ if (isHtmlMimeType(type) && m_readableData->hasHtml()) {
+ success = true;
+ return m_readableData->html();
+ }
+
if (isTextMimeType(type) && m_readableData->hasText()) {
success = true;
return m_readableData->text();
}
ASSERT(m_readableData);
- QByteArray data = m_readableData->data(QString(type));
+ QByteArray rawData = m_readableData->data(type);
+ QString data = QTextCodec::codecForName("UTF-16")->toUnicode(rawData);
success = !data.isEmpty();
- return String(data.constData(), data.size());
+ return data;
}
bool ClipboardQt::setData(const String& type, const String& data)
@@ -156,6 +168,8 @@ bool ClipboardQt::setData(const String& type, const String& data)
if (isTextMimeType(type))
m_writableData->setText(QString(data));
+ else if (isHtmlMimeType(type))
+ m_writableData->setHtml(QString(data));
else {
QByteArray array(reinterpret_cast<const char*>(data.characters()), data.length() * 2);
m_writableData->setData(QString(type), array);
diff --git a/WebCore/platform/qt/PlatformKeyboardEventQt.cpp b/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
index 58ab2bf..6dde9c4 100644
--- a/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
+++ b/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
@@ -36,7 +36,7 @@
namespace WebCore {
-static String keyIdentifierForQtKeyCode(int keyCode)
+String keyIdentifierForQtKeyCode(int keyCode)
{
switch (keyCode) {
case Qt::Key_Menu:
@@ -137,7 +137,7 @@ static String keyIdentifierForQtKeyCode(int keyCode)
}
}
-static int windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad = false)
+int windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad)
{
// Determine wheter the event comes from the keypad
if (isKeypad) {
diff --git a/WebCore/platform/text/TextEncodingRegistry.cpp b/WebCore/platform/text/TextEncodingRegistry.cpp
index dad0f39..6ecc36f 100644
--- a/WebCore/platform/text/TextEncodingRegistry.cpp
+++ b/WebCore/platform/text/TextEncodingRegistry.cpp
@@ -52,7 +52,7 @@
#include "gtk/TextCodecGtk.h"
#endif
#if OS(WINCE) && !PLATFORM(QT)
-#include "TextCodecWince.h"
+#include "TextCodecWinCE.h"
#endif
using namespace WTF;
@@ -231,8 +231,8 @@ static void buildBaseTextCodecMaps()
#endif
#if OS(WINCE) && !PLATFORM(QT)
- TextCodecWince::registerBaseEncodingNames(addToTextEncodingNameMap);
- TextCodecWince::registerBaseCodecs(addToTextCodecMap);
+ TextCodecWinCE::registerBaseEncodingNames(addToTextEncodingNameMap);
+ TextCodecWinCE::registerBaseCodecs(addToTextCodecMap);
#endif
}
@@ -259,8 +259,8 @@ static void extendTextCodecMaps()
#endif
#if OS(WINCE) && !PLATFORM(QT)
- TextCodecWince::registerExtendedEncodingNames(addToTextEncodingNameMap);
- TextCodecWince::registerExtendedCodecs(addToTextCodecMap);
+ TextCodecWinCE::registerExtendedEncodingNames(addToTextEncodingNameMap);
+ TextCodecWinCE::registerExtendedCodecs(addToTextCodecMap);
#endif
pruneBlacklistedCodecs();
diff --git a/WebCore/plugins/MimeType.cpp b/WebCore/plugins/DOMMimeType.cpp
index 5faeb5f..e1fa7f1 100644
--- a/WebCore/plugins/MimeType.cpp
+++ b/WebCore/plugins/DOMMimeType.cpp
@@ -17,34 +17,34 @@
*/
#include "config.h"
-#include "MimeType.h"
+#include "DOMMimeType.h"
+#include "DOMPlugin.h"
#include "Frame.h"
#include "FrameLoaderClient.h"
#include "Page.h"
-#include "Plugin.h"
#include "PluginData.h"
#include "Settings.h"
#include "StringBuilder.h"
namespace WebCore {
-MimeType::MimeType(PassRefPtr<PluginData> pluginData, unsigned index)
+DOMMimeType::DOMMimeType(PassRefPtr<PluginData> pluginData, unsigned index)
: m_pluginData(pluginData)
, m_index(index)
{
}
-MimeType::~MimeType()
+DOMMimeType::~DOMMimeType()
{
}
-const String &MimeType::type() const
+const String &DOMMimeType::type() const
{
return mimeClassInfo().type;
}
-String MimeType::suffixes() const
+String DOMMimeType::suffixes() const
{
const Vector<String>& extensions = mimeClassInfo().extensions;
@@ -57,18 +57,18 @@ String MimeType::suffixes() const
return builder.toString();
}
-const String &MimeType::description() const
+const String &DOMMimeType::description() const
{
return mimeClassInfo().desc;
}
-PassRefPtr<Plugin> MimeType::enabledPlugin() const
+PassRefPtr<DOMPlugin> DOMMimeType::enabledPlugin() const
{
const Page* p = m_pluginData->page();
if (!p || !p->mainFrame()->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin))
return 0;
- return Plugin::create(m_pluginData.get(), m_pluginData->mimePluginIndices()[m_index]);
+ return DOMPlugin::create(m_pluginData.get(), m_pluginData->mimePluginIndices()[m_index]);
}
} // namespace WebCore
diff --git a/WebCore/plugins/MimeType.h b/WebCore/plugins/DOMMimeType.h
index c91e0a3..a010e33 100644
--- a/WebCore/plugins/MimeType.h
+++ b/WebCore/plugins/DOMMimeType.h
@@ -17,8 +17,8 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef MimeType_h
-#define MimeType_h
+#ifndef DOMMimeType_h
+#define DOMMimeType_h
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
@@ -28,26 +28,26 @@
namespace WebCore {
- class Plugin;
- class String;
-
- class MimeType : public RefCounted<MimeType> {
- public:
- static PassRefPtr<MimeType> create(PassRefPtr<PluginData> pluginData, unsigned index) { return adoptRef(new MimeType(pluginData, index)); }
- ~MimeType();
-
- const String &type() const;
- String suffixes() const;
- const String &description() const;
- PassRefPtr<Plugin> enabledPlugin() const;
-
- private:
- const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; }
-
- MimeType(PassRefPtr<PluginData>, unsigned index);
- RefPtr<PluginData> m_pluginData;
- unsigned m_index;
- };
+class DOMPlugin;
+class String;
+
+class DOMMimeType : public RefCounted<DOMMimeType> {
+public:
+ static PassRefPtr<DOMMimeType> create(PassRefPtr<PluginData> pluginData, unsigned index) { return adoptRef(new DOMMimeType(pluginData, index)); }
+ ~DOMMimeType();
+
+ const String &type() const;
+ String suffixes() const;
+ const String &description() const;
+ PassRefPtr<DOMPlugin> enabledPlugin() const;
+
+private:
+ const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; }
+
+ DOMMimeType(PassRefPtr<PluginData>, unsigned index);
+ RefPtr<PluginData> m_pluginData;
+ unsigned m_index;
+};
}
diff --git a/WebCore/plugins/MimeType.idl b/WebCore/plugins/DOMMimeType.idl
index 9d84eeb..1d97a6b 100644
--- a/WebCore/plugins/MimeType.idl
+++ b/WebCore/plugins/DOMMimeType.idl
@@ -20,11 +20,11 @@
module window {
- interface MimeType {
+ interface DOMMimeType {
readonly attribute DOMString type;
readonly attribute DOMString suffixes;
readonly attribute DOMString description;
- readonly attribute Plugin enabledPlugin;
+ readonly attribute DOMPlugin enabledPlugin;
};
}
diff --git a/WebCore/plugins/MimeTypeArray.cpp b/WebCore/plugins/DOMMimeTypeArray.cpp
index 9d3ad92..f36f2a2 100644
--- a/WebCore/plugins/MimeTypeArray.cpp
+++ b/WebCore/plugins/DOMMimeTypeArray.cpp
@@ -18,26 +18,26 @@
*/
#include "config.h"
-#include "MimeTypeArray.h"
+#include "DOMMimeTypeArray.h"
#include "AtomicString.h"
+#include "DOMPlugin.h"
#include "Frame.h"
#include "Page.h"
-#include "Plugin.h"
#include "PluginData.h"
namespace WebCore {
-MimeTypeArray::MimeTypeArray(Frame* frame)
+DOMMimeTypeArray::DOMMimeTypeArray(Frame* frame)
: m_frame(frame)
{
}
-MimeTypeArray::~MimeTypeArray()
+DOMMimeTypeArray::~DOMMimeTypeArray()
{
}
-unsigned MimeTypeArray::length() const
+unsigned DOMMimeTypeArray::length() const
{
PluginData* data = getPluginData();
if (!data)
@@ -45,7 +45,7 @@ unsigned MimeTypeArray::length() const
return data->mimes().size();
}
-PassRefPtr<MimeType> MimeTypeArray::item(unsigned index)
+PassRefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index)
{
PluginData* data = getPluginData();
if (!data)
@@ -53,10 +53,10 @@ PassRefPtr<MimeType> MimeTypeArray::item(unsigned index)
const Vector<MimeClassInfo>& mimes = data->mimes();
if (index >= mimes.size())
return 0;
- return MimeType::create(data, index).get();
+ return DOMMimeType::create(data, index).get();
}
-bool MimeTypeArray::canGetItemsForName(const AtomicString& propertyName)
+bool DOMMimeTypeArray::canGetItemsForName(const AtomicString& propertyName)
{
PluginData *data = getPluginData();
if (!data)
@@ -69,7 +69,7 @@ bool MimeTypeArray::canGetItemsForName(const AtomicString& propertyName)
return false;
}
-PassRefPtr<MimeType> MimeTypeArray::namedItem(const AtomicString& propertyName)
+PassRefPtr<DOMMimeType> DOMMimeTypeArray::namedItem(const AtomicString& propertyName)
{
PluginData *data = getPluginData();
if (!data)
@@ -77,12 +77,12 @@ PassRefPtr<MimeType> MimeTypeArray::namedItem(const AtomicString& propertyName)
const Vector<MimeClassInfo>& mimes = data->mimes();
for (unsigned i = 0; i < mimes.size(); ++i) {
if (mimes[i].type == propertyName)
- return MimeType::create(data, i).get();
+ return DOMMimeType::create(data, i).get();
}
return 0;
}
-PluginData* MimeTypeArray::getPluginData() const
+PluginData* DOMMimeTypeArray::getPluginData() const
{
if (!m_frame)
return 0;
diff --git a/WebCore/plugins/MimeTypeArray.h b/WebCore/plugins/DOMMimeTypeArray.h
index a1e3d52..2ccbfa0 100644
--- a/WebCore/plugins/MimeTypeArray.h
+++ b/WebCore/plugins/DOMMimeTypeArray.h
@@ -18,38 +18,38 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef MimeTypeArray_h
-#define MimeTypeArray_h
+#ifndef DOMMimeTypeArray_h
+#define DOMMimeTypeArray_h
-#include "MimeType.h"
+#include "DOMMimeType.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
- class AtomicString;
- class Frame;
- class PluginData;
+class AtomicString;
+class Frame;
+class PluginData;
- class MimeTypeArray : public RefCounted<MimeTypeArray> {
- public:
- static PassRefPtr<MimeTypeArray> create(Frame* frame) { return adoptRef(new MimeTypeArray(frame)); }
- ~MimeTypeArray();
+class DOMMimeTypeArray : public RefCounted<DOMMimeTypeArray> {
+public:
+ static PassRefPtr<DOMMimeTypeArray> create(Frame* frame) { return adoptRef(new DOMMimeTypeArray(frame)); }
+ ~DOMMimeTypeArray();
- void disconnectFrame() { m_frame = 0; }
+ void disconnectFrame() { m_frame = 0; }
- unsigned length() const;
- PassRefPtr<MimeType> item(unsigned index);
- bool canGetItemsForName(const AtomicString& propertyName);
- PassRefPtr<MimeType> namedItem(const AtomicString& propertyName);
+ unsigned length() const;
+ PassRefPtr<DOMMimeType> item(unsigned index);
+ bool canGetItemsForName(const AtomicString& propertyName);
+ PassRefPtr<DOMMimeType> namedItem(const AtomicString& propertyName);
- private:
- MimeTypeArray(Frame*);
- PluginData* getPluginData() const;
+private:
+ DOMMimeTypeArray(Frame*);
+ PluginData* getPluginData() const;
- Frame* m_frame;
- };
+ Frame* m_frame;
+};
} // namespace WebCore
diff --git a/WebCore/plugins/MimeTypeArray.idl b/WebCore/plugins/DOMMimeTypeArray.idl
index ecbdc29..8b79a7e 100644
--- a/WebCore/plugins/MimeTypeArray.idl
+++ b/WebCore/plugins/DOMMimeTypeArray.idl
@@ -23,10 +23,10 @@ module window {
interface [
HasNameGetter,
HasIndexGetter
- ] MimeTypeArray {
+ ] DOMMimeTypeArray {
readonly attribute unsigned long length;
- MimeType item(in unsigned long index);
- MimeType namedItem(in DOMString name);
+ DOMMimeType item(in unsigned long index);
+ DOMMimeType namedItem(in DOMString name);
};
}
diff --git a/WebCore/plugins/Plugin.cpp b/WebCore/plugins/DOMPlugin.cpp
index dcbf3f1..11ec929 100644
--- a/WebCore/plugins/Plugin.cpp
+++ b/WebCore/plugins/DOMPlugin.cpp
@@ -17,7 +17,7 @@
*/
#include "config.h"
-#include "Plugin.h"
+#include "DOMPlugin.h"
#include "AtomicString.h"
#include "PluginData.h"
@@ -25,37 +25,37 @@
namespace WebCore {
-Plugin::Plugin(PluginData* pluginData, unsigned index)
+DOMPlugin::DOMPlugin(PluginData* pluginData, unsigned index)
: m_pluginData(pluginData)
, m_index(index)
{
}
-Plugin::~Plugin()
+DOMPlugin::~DOMPlugin()
{
}
-String Plugin::name() const
+String DOMPlugin::name() const
{
return pluginInfo().name;
}
-String Plugin::filename() const
+String DOMPlugin::filename() const
{
return pluginInfo().file;
}
-String Plugin::description() const
+String DOMPlugin::description() const
{
return pluginInfo().desc;
}
-unsigned Plugin::length() const
+unsigned DOMPlugin::length() const
{
return pluginInfo().mimes.size();
}
-PassRefPtr<MimeType> Plugin::item(unsigned index)
+PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index)
{
if (index >= pluginInfo().mimes.size())
return 0;
@@ -65,12 +65,12 @@ PassRefPtr<MimeType> Plugin::item(unsigned index)
const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
for (unsigned i = 0; i < mimes.size(); ++i) {
if (mimes[i] == mime && m_pluginData->mimePluginIndices()[i] == m_index)
- return MimeType::create(m_pluginData.get(), i).get();
+ return DOMMimeType::create(m_pluginData.get(), i).get();
}
return 0;
}
-bool Plugin::canGetItemsForName(const AtomicString& propertyName)
+bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName)
{
const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
for (unsigned i = 0; i < mimes.size(); ++i)
@@ -79,12 +79,12 @@ bool Plugin::canGetItemsForName(const AtomicString& propertyName)
return false;
}
-PassRefPtr<MimeType> Plugin::namedItem(const AtomicString& propertyName)
+PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName)
{
const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
for (unsigned i = 0; i < mimes.size(); ++i)
if (mimes[i].type == propertyName)
- return MimeType::create(m_pluginData.get(), i).get();
+ return DOMMimeType::create(m_pluginData.get(), i).get();
return 0;
}
diff --git a/WebCore/plugins/Plugin.h b/WebCore/plugins/DOMPlugin.h
index 668a9da..f86234a 100644
--- a/WebCore/plugins/Plugin.h
+++ b/WebCore/plugins/DOMPlugin.h
@@ -17,42 +17,42 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef Plugin_h
-#define Plugin_h
+#ifndef DOMPlugin_h
+#define DOMPlugin_h
-#include "MimeType.h"
+#include "DOMMimeType.h"
#include <wtf/RefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
- class AtomicString;
- class Plugin;
- class PluginData;
- class String;
+class AtomicString;
+class Plugin;
+class PluginData;
+class String;
- class Plugin : public RefCounted<Plugin> {
- public:
- static PassRefPtr<Plugin> create(PluginData* pluginData, unsigned index) { return adoptRef(new Plugin(pluginData, index)); }
- ~Plugin();
+class DOMPlugin : public RefCounted<DOMPlugin> {
+public:
+ static PassRefPtr<DOMPlugin> create(PluginData* pluginData, unsigned index) { return adoptRef(new DOMPlugin(pluginData, index)); }
+ ~DOMPlugin();
- String name() const;
- String filename() const;
- String description() const;
+ String name() const;
+ String filename() const;
+ String description() const;
- unsigned length() const;
+ unsigned length() const;
- PassRefPtr<MimeType> item(unsigned index);
- bool canGetItemsForName(const AtomicString& propertyName);
- PassRefPtr<MimeType> namedItem(const AtomicString& propertyName);
+ PassRefPtr<DOMMimeType> item(unsigned index);
+ bool canGetItemsForName(const AtomicString& propertyName);
+ PassRefPtr<DOMMimeType> namedItem(const AtomicString& propertyName);
- private:
- const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; }
+private:
+ const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; }
- Plugin(PluginData*, unsigned index);
- RefPtr<PluginData> m_pluginData;
- unsigned m_index;
- };
+ DOMPlugin(PluginData*, unsigned index);
+ RefPtr<PluginData> m_pluginData;
+ unsigned m_index;
+};
} // namespace WebCore
diff --git a/WebCore/plugins/Plugin.idl b/WebCore/plugins/DOMPlugin.idl
index b418989..dc2b141 100644
--- a/WebCore/plugins/Plugin.idl
+++ b/WebCore/plugins/DOMPlugin.idl
@@ -23,13 +23,13 @@ module window {
interface [
HasNameGetter,
HasIndexGetter
- ] Plugin {
+ ] DOMPlugin {
readonly attribute DOMString name;
readonly attribute DOMString filename;
readonly attribute DOMString description;
readonly attribute unsigned long length;
- MimeType item(in unsigned long index);
- MimeType namedItem(in DOMString name);
+ DOMMimeType item(in unsigned long index);
+ DOMMimeType namedItem(in DOMString name);
};
}
diff --git a/WebCore/plugins/PluginArray.cpp b/WebCore/plugins/DOMPluginArray.cpp
index 038e4ad..fb11da8 100644
--- a/WebCore/plugins/PluginArray.cpp
+++ b/WebCore/plugins/DOMPluginArray.cpp
@@ -18,26 +18,26 @@
*/
#include "config.h"
-#include "PluginArray.h"
+#include "DOMPluginArray.h"
#include "AtomicString.h"
+#include "DOMPlugin.h"
#include "Frame.h"
#include "Page.h"
-#include "Plugin.h"
#include "PluginData.h"
namespace WebCore {
-PluginArray::PluginArray(Frame* frame)
+DOMPluginArray::DOMPluginArray(Frame* frame)
: m_frame(frame)
{
}
-PluginArray::~PluginArray()
+DOMPluginArray::~DOMPluginArray()
{
}
-unsigned PluginArray::length() const
+unsigned DOMPluginArray::length() const
{
PluginData* data = pluginData();
if (!data)
@@ -45,7 +45,7 @@ unsigned PluginArray::length() const
return data->plugins().size();
}
-PassRefPtr<Plugin> PluginArray::item(unsigned index)
+PassRefPtr<DOMPlugin> DOMPluginArray::item(unsigned index)
{
PluginData* data = pluginData();
if (!data)
@@ -53,10 +53,10 @@ PassRefPtr<Plugin> PluginArray::item(unsigned index)
const Vector<PluginInfo>& plugins = data->plugins();
if (index >= plugins.size())
return 0;
- return Plugin::create(data, index).get();
+ return DOMPlugin::create(data, index).get();
}
-bool PluginArray::canGetItemsForName(const AtomicString& propertyName)
+bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName)
{
PluginData* data = pluginData();
if (!data)
@@ -69,7 +69,7 @@ bool PluginArray::canGetItemsForName(const AtomicString& propertyName)
return false;
}
-PassRefPtr<Plugin> PluginArray::namedItem(const AtomicString& propertyName)
+PassRefPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName)
{
PluginData* data = pluginData();
if (!data)
@@ -77,17 +77,17 @@ PassRefPtr<Plugin> PluginArray::namedItem(const AtomicString& propertyName)
const Vector<PluginInfo>& plugins = data->plugins();
for (unsigned i = 0; i < plugins.size(); ++i) {
if (plugins[i].name == propertyName)
- return Plugin::create(data, i).get();
+ return DOMPlugin::create(data, i).get();
}
return 0;
}
-void PluginArray::refresh(bool reload)
+void DOMPluginArray::refresh(bool reload)
{
Page::refreshPlugins(reload);
}
-PluginData* PluginArray::pluginData() const
+PluginData* DOMPluginArray::pluginData() const
{
if (!m_frame)
return 0;
diff --git a/WebCore/plugins/PluginArray.h b/WebCore/plugins/DOMPluginArray.h
index 435db50..0adb70a 100644
--- a/WebCore/plugins/PluginArray.h
+++ b/WebCore/plugins/DOMPluginArray.h
@@ -18,40 +18,40 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef PluginArray_h
-#define PluginArray_h
+#ifndef DOMPluginArray_h
+#define DOMPluginArray_h
-#include "Plugin.h"
+#include "DOMPlugin.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
- class AtomicString;
- class Frame;
- class PluginData;
+class AtomicString;
+class Frame;
+class PluginData;
- class PluginArray : public RefCounted<PluginArray> {
- public:
- static PassRefPtr<PluginArray> create(Frame* frame) { return adoptRef(new PluginArray(frame)); }
- ~PluginArray();
+class DOMPluginArray : public RefCounted<DOMPluginArray> {
+public:
+ static PassRefPtr<DOMPluginArray> create(Frame* frame) { return adoptRef(new DOMPluginArray(frame)); }
+ ~DOMPluginArray();
- void disconnectFrame() { m_frame = 0; }
+ void disconnectFrame() { m_frame = 0; }
- unsigned length() const;
- PassRefPtr<Plugin> item(unsigned index);
- bool canGetItemsForName(const AtomicString& propertyName);
- PassRefPtr<Plugin> namedItem(const AtomicString& propertyName);
+ unsigned length() const;
+ PassRefPtr<DOMPlugin> item(unsigned index);
+ bool canGetItemsForName(const AtomicString& propertyName);
+ PassRefPtr<DOMPlugin> namedItem(const AtomicString& propertyName);
- void refresh(bool reload);
+ void refresh(bool reload);
- private:
- PluginArray(Frame*);
- PluginData* pluginData() const;
+private:
+ DOMPluginArray(Frame*);
+ PluginData* pluginData() const;
- Frame* m_frame;
- };
+ Frame* m_frame;
+};
} // namespace WebCore
diff --git a/WebCore/plugins/PluginArray.idl b/WebCore/plugins/DOMPluginArray.idl
index d4c10ac..4c0d64c 100644
--- a/WebCore/plugins/PluginArray.idl
+++ b/WebCore/plugins/DOMPluginArray.idl
@@ -23,10 +23,10 @@ module window {
interface [
HasNameGetter,
HasIndexGetter
- ] PluginArray {
+ ] DOMPluginArray {
readonly attribute unsigned long length;
- Plugin item(in unsigned long index);
- Plugin namedItem(in DOMString name);
+ DOMPlugin item(in unsigned long index);
+ DOMPlugin namedItem(in DOMString name);
void refresh(in boolean reload);
};
diff --git a/WebCore/plugins/PluginView.cpp b/WebCore/plugins/PluginView.cpp
index 3518443..2f5f342 100644
--- a/WebCore/plugins/PluginView.cpp
+++ b/WebCore/plugins/PluginView.cpp
@@ -304,7 +304,10 @@ PluginView::~PluginView()
ASSERT(!m_lifeSupportTimer.isActive());
- instanceMap().remove(m_instance);
+ // If we failed to find the plug-in, we'll return early in our constructor, and
+ // m_instance will be 0.
+ if (m_instance)
+ instanceMap().remove(m_instance);
if (m_isWaitingToStart)
m_parentFrame->document()->removeMediaCanStartListener(this);
@@ -881,6 +884,7 @@ PluginView::PluginView(Frame* parentFrame, const IntSize& size, PluginPackage* p
, m_paramNames(0)
, m_paramValues(0)
, m_mimeType(mimeType)
+ , m_instance(0)
#if defined(XP_MACOSX)
, m_isWindowed(false)
#else
diff --git a/WebCore/rendering/InlineFlowBox.cpp b/WebCore/rendering/InlineFlowBox.cpp
index c2d8549..8ac8c40 100644
--- a/WebCore/rendering/InlineFlowBox.cpp
+++ b/WebCore/rendering/InlineFlowBox.cpp
@@ -663,11 +663,24 @@ void InlineFlowBox::paint(PaintInfo& paintInfo, int tx, int ty)
// outlines.
if (renderer()->style()->visibility() == VISIBLE && renderer()->hasOutline() && !isRootInlineBox()) {
RenderInline* inlineFlow = toRenderInline(renderer());
- if ((inlineFlow->continuation() || inlineFlow->isInlineElementContinuation()) && !boxModelObject()->hasSelfPaintingLayer()) {
+
+ RenderBlock* cb = 0;
+ bool containingBlockPaintsContinuationOutline = inlineFlow->continuation() || inlineFlow->isInlineElementContinuation();
+ if (containingBlockPaintsContinuationOutline) {
+ cb = renderer()->containingBlock()->containingBlock();
+
+ for (RenderBoxModelObject* box = boxModelObject(); box != cb; box = box->parent()->enclosingBoxModelObject()) {
+ if (box->hasSelfPaintingLayer()) {
+ containingBlockPaintsContinuationOutline = false;
+ break;
+ }
+ }
+ }
+
+ if (containingBlockPaintsContinuationOutline) {
// Add ourselves to the containing block of the entire continuation so that it can
// paint us atomically.
- RenderBlock* block = renderer()->containingBlock()->containingBlock();
- block->addContinuationWithOutline(toRenderInline(renderer()->node()->renderer()));
+ cb->addContinuationWithOutline(toRenderInline(renderer()->node()->renderer()));
} else if (!inlineFlow->isInlineElementContinuation())
paintInfo.outlineObjects->add(inlineFlow);
}
diff --git a/WebCore/rendering/InlineFlowBox.h b/WebCore/rendering/InlineFlowBox.h
index 9589c0a..b4ba59f 100644
--- a/WebCore/rendering/InlineFlowBox.h
+++ b/WebCore/rendering/InlineFlowBox.h
@@ -193,7 +193,7 @@ inline void InlineFlowBox::setHorizontalOverflowPositions(int leftLayoutOverflow
if (!m_overflow) {
if (leftLayoutOverflow == m_x && rightLayoutOverflow == m_x + m_width && leftVisualOverflow == m_x && rightVisualOverflow == m_x + m_width)
return;
- m_overflow.set(new RenderOverflow(IntRect(m_x, m_y, m_width, m_renderer->style(m_firstLine)->font().height())));
+ m_overflow = adoptPtr(new RenderOverflow(IntRect(m_x, m_y, m_width, m_renderer->style(m_firstLine)->font().height())));
}
m_overflow->setLeftLayoutOverflow(leftLayoutOverflow);
@@ -207,7 +207,7 @@ inline void InlineFlowBox::setVerticalOverflowPositions(int topLayoutOverflow, i
if (!m_overflow) {
if (topLayoutOverflow == m_y && bottomLayoutOverflow == m_y + boxHeight && topVisualOverflow == m_y && bottomVisualOverflow == m_y + boxHeight)
return;
- m_overflow.set(new RenderOverflow(IntRect(m_x, m_y, m_width, boxHeight)));
+ m_overflow = adoptPtr(new RenderOverflow(IntRect(m_x, m_y, m_width, boxHeight)));
}
m_overflow->setTopLayoutOverflow(topLayoutOverflow);
diff --git a/WebCore/rendering/MediaControlElements.cpp b/WebCore/rendering/MediaControlElements.cpp
index d5cb187..d4eb9a9 100644
--- a/WebCore/rendering/MediaControlElements.cpp
+++ b/WebCore/rendering/MediaControlElements.cpp
@@ -378,6 +378,9 @@ MediaControlInputElement::MediaControlInputElement(HTMLMediaElement* mediaElemen
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;
@@ -475,14 +478,14 @@ void MediaControlInputElement::setDisplayType(MediaControlElementType displayTyp
// ----------------------------
-inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement)
- : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_MUTE_BUTTON, "button")
+inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement, ButtonLocation location)
+ : MediaControlInputElement(mediaElement, location == Controller ? MEDIA_CONTROLS_MUTE_BUTTON : MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON, "button")
{
}
-PassRefPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(HTMLMediaElement* mediaElement)
+PassRefPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(HTMLMediaElement* mediaElement, ButtonLocation location)
{
- return adoptRef(new MediaControlMuteButtonElement(mediaElement));
+ return adoptRef(new MediaControlMuteButtonElement(mediaElement, location));
}
void MediaControlMuteButtonElement::defaultEventHandler(Event* event)
diff --git a/WebCore/rendering/MediaControlElements.h b/WebCore/rendering/MediaControlElements.h
index 68c06a3..ceb0255 100644
--- a/WebCore/rendering/MediaControlElements.h
+++ b/WebCore/rendering/MediaControlElements.h
@@ -65,7 +65,8 @@ enum MediaControlElementType {
MediaControlsPanel,
MediaVolumeSliderContainer,
MediaVolumeSlider,
- MediaVolumeSliderThumb
+ MediaVolumeSliderThumb,
+ MediaVolumeSliderMuteButton,
};
HTMLMediaElement* toParentMediaElement(RenderObject*);
@@ -202,12 +203,13 @@ private:
class MediaControlMuteButtonElement : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlMuteButtonElement> create(HTMLMediaElement*);
+ enum ButtonLocation { Controller, VolumeSlider };
+ static PassRefPtr<MediaControlMuteButtonElement> create(HTMLMediaElement*, ButtonLocation);
virtual void defaultEventHandler(Event*);
private:
- MediaControlMuteButtonElement(HTMLMediaElement*);
+ MediaControlMuteButtonElement(HTMLMediaElement*, ButtonLocation);
virtual void updateDisplayType();
};
diff --git a/WebCore/rendering/RenderBlock.cpp b/WebCore/rendering/RenderBlock.cpp
index dd1e8e5..c97d965 100644
--- a/WebCore/rendering/RenderBlock.cpp
+++ b/WebCore/rendering/RenderBlock.cpp
@@ -2128,16 +2128,6 @@ void RenderBlock::paintChildren(PaintInfo& paintInfo, int tx, int ty)
return;
}
- // Check for page-break-inside: avoid, and it it's set, break and bail.
- bool checkInsideAvoid = !childrenInline() && ((checkPageBreaks && child->style()->pageBreakInside() == PBAVOID) || (checkColumnBreaks && child->style()->columnBreakInside() == PBAVOID));
- if (checkInsideAvoid
- && ty + child->y() > paintInfo.rect.y()
- && ty + child->y() < paintInfo.rect.bottom()
- && ty + child->y() + child->height() > paintInfo.rect.bottom()) {
- view()->setBestTruncatedAt(ty + child->y(), this, true);
- return;
- }
-
if (!child->hasSelfPaintingLayer() && !child->isFloating())
child->paint(info, tx, ty);
@@ -2232,8 +2222,18 @@ void RenderBlock::paintObject(PaintInfo& paintInfo, int tx, int ty)
RenderInline* inlineCont = inlineElementContinuation();
if (inlineCont && inlineCont->hasOutline() && inlineCont->style()->visibility() == VISIBLE) {
RenderInline* inlineRenderer = toRenderInline(inlineCont->node()->renderer());
- if (!inlineRenderer->hasSelfPaintingLayer())
- containingBlock()->addContinuationWithOutline(inlineRenderer);
+ RenderBlock* cb = containingBlock();
+
+ bool inlineEnclosedInSelfPaintingLayer = false;
+ for (RenderBoxModelObject* box = inlineRenderer; box != cb; box = box->parent()->enclosingBoxModelObject()) {
+ if (box->hasSelfPaintingLayer()) {
+ inlineEnclosedInSelfPaintingLayer = true;
+ break;
+ }
+ }
+
+ if (!inlineEnclosedInSelfPaintingLayer)
+ cb->addContinuationWithOutline(inlineRenderer);
else if (!inlineRenderer->firstLineBox())
inlineRenderer->paintOutline(paintInfo.context, tx - x() + inlineRenderer->containingBlock()->x(),
ty - y() + inlineRenderer->containingBlock()->y());
diff --git a/WebCore/rendering/RenderBlockLineLayout.cpp b/WebCore/rendering/RenderBlockLineLayout.cpp
index 1a7f983..46dfd29 100644
--- a/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -1696,7 +1696,7 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
// Non-zero only when kerning is enabled, in which case we measure words with their trailing
// space, then subtract its width.
- int wordTrailingSpaceWidth = f.typesettingFeatures() & Kerning ? f.spaceWidth() + wordSpacing : 0;
+ int wordTrailingSpaceWidth = f.typesettingFeatures() & Kerning ? f.width(TextRun(&space, 1)) + wordSpacing : 0;
int wrapW = tmpW + inlineWidth(o, !appliedStartWidth, true);
int charWidth = 0;
diff --git a/WebCore/rendering/RenderBoxModelObject.cpp b/WebCore/rendering/RenderBoxModelObject.cpp
index c81289b..077baeb 100644
--- a/WebCore/rendering/RenderBoxModelObject.cpp
+++ b/WebCore/rendering/RenderBoxModelObject.cpp
@@ -27,7 +27,7 @@
#include "RenderBoxModelObject.h"
#include "GraphicsContext.h"
-#include "HTMLElement.h"
+#include "HTMLFrameOwnerElement.h"
#include "HTMLNames.h"
#include "ImageBuffer.h"
#include "Path.h"
diff --git a/WebCore/rendering/RenderButton.cpp b/WebCore/rendering/RenderButton.cpp
index 3ecd382..8357bd4 100644
--- a/WebCore/rendering/RenderButton.cpp
+++ b/WebCore/rendering/RenderButton.cpp
@@ -108,11 +108,6 @@ void RenderButton::setupInnerStyle(RenderStyle* innerStyle)
// safe to modify.
innerStyle->setBoxFlex(1.0f);
innerStyle->setBoxOrient(style()->boxOrient());
-
- innerStyle->setPaddingTop(Length(theme()->buttonInternalPaddingTop(), Fixed));
- innerStyle->setPaddingRight(Length(theme()->buttonInternalPaddingRight(), Fixed));
- innerStyle->setPaddingBottom(Length(theme()->buttonInternalPaddingBottom(), Fixed));
- innerStyle->setPaddingLeft(Length(theme()->buttonInternalPaddingLeft(), Fixed));
}
void RenderButton::updateFromElement()
diff --git a/WebCore/rendering/RenderEmbeddedObject.cpp b/WebCore/rendering/RenderEmbeddedObject.cpp
index 3d6575c..de9ca17 100644
--- a/WebCore/rendering/RenderEmbeddedObject.cpp
+++ b/WebCore/rendering/RenderEmbeddedObject.cpp
@@ -24,6 +24,8 @@
#include "config.h"
#include "RenderEmbeddedObject.h"
+#include "Chrome.h"
+#include "ChromeClient.h"
#include "CSSValueKeywords.h"
#include "Font.h"
#include "FontSelector.h"
@@ -37,6 +39,7 @@
#include "HTMLParamElement.h"
#include "LocalizedStrings.h"
#include "MIMETypeRegistry.h"
+#include "MouseEvent.h"
#include "Page.h"
#include "Path.h"
#include "PluginWidget.h"
@@ -61,13 +64,23 @@ using namespace HTMLNames;
static const float replacementTextRoundedRectHeight = 18;
static const float replacementTextRoundedRectLeftRightTextMargin = 6;
static const float replacementTextRoundedRectOpacity = 0.20f;
+static const float replacementTextPressedRoundedRectOpacity = 0.65f;
static const float replacementTextRoundedRectRadius = 5;
static const float replacementTextTextOpacity = 0.55f;
+static const float replacementTextPressedTextOpacity = 0.65f;
+static const Color& replacementTextRoundedRectPressedColor()
+{
+ static const Color lightGray(205, 205, 205);
+ return lightGray;
+}
+
RenderEmbeddedObject::RenderEmbeddedObject(Element* element)
: RenderPart(element)
, m_hasFallbackContent(false)
, m_showsMissingPluginIndicator(false)
+ , m_missingPluginIndicatorIsPressed(false)
+ , m_mouseDownWasInMissingPluginIndicator(false)
{
view()->frameView()->setIsVisuallyNonEmpty();
}
@@ -356,6 +369,15 @@ void RenderEmbeddedObject::setShowsCrashedPluginIndicator()
m_replacementText = crashedPluginText();
}
+void RenderEmbeddedObject::setMissingPluginIndicatorIsPressed(bool pressed)
+{
+ if (m_missingPluginIndicatorIsPressed == pressed)
+ return;
+
+ m_missingPluginIndicatorIsPressed = pressed;
+ repaint();
+}
+
void RenderEmbeddedObject::paint(PaintInfo& paintInfo, int tx, int ty)
{
if (!m_replacementText.isNull()) {
@@ -378,8 +400,35 @@ void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
if (context->paintingDisabled())
return;
- FloatRect pluginRect = contentBoxRect();
- pluginRect.move(tx, ty);
+ FloatRect contentRect;
+ Path path;
+ FloatRect replacementTextRect;
+ Font font;
+ TextRun run("");
+ float textWidth;
+ if (!getReplacementTextGeometry(tx, ty, contentRect, path, replacementTextRect, font, run, textWidth))
+ return;
+
+ context->save();
+ context->clip(contentRect);
+ context->beginPath();
+ context->addPath(path);
+ context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedRoundedRectOpacity : replacementTextRoundedRectOpacity);
+ context->setFillColor(m_missingPluginIndicatorIsPressed ? replacementTextRoundedRectPressedColor() : Color::white, style()->colorSpace());
+ context->fillPath();
+
+ 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());
+ context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedTextOpacity : replacementTextTextOpacity);
+ context->setFillColor(Color::black, style()->colorSpace());
+ context->drawBidiText(font, run, FloatPoint(labelX, labelY));
+ context->restore();
+}
+
+bool RenderEmbeddedObject::getReplacementTextGeometry(int tx, int ty, FloatRect& contentRect, Path& path, FloatRect& replacementTextRect, Font& font, TextRun& run, float& textWidth)
+{
+ contentRect = contentBoxRect();
+ contentRect.move(tx, ty);
FontDescription fontDescription;
RenderTheme::defaultTheme()->systemFont(CSSValueWebkitSmallControl, fontDescription);
@@ -387,36 +436,24 @@ void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
Settings* settings = document()->settings();
ASSERT(settings);
if (!settings)
- return;
+ return false;
fontDescription.setRenderingMode(settings->fontRenderingMode());
fontDescription.setComputedSize(fontDescription.specifiedSize());
- Font font(fontDescription, 0, 0);
+ font = Font(fontDescription, 0, 0);
font.update(0);
- TextRun run(m_replacementText.characters(), m_replacementText.length());
+ run = TextRun(m_replacementText.characters(), m_replacementText.length());
run.disableRoundingHacks();
- float textWidth = font.floatWidth(run);
+ textWidth = font.floatWidth(run);
- FloatRect replacementTextRect;
replacementTextRect.setSize(FloatSize(textWidth + replacementTextRoundedRectLeftRightTextMargin * 2, replacementTextRoundedRectHeight));
- replacementTextRect.setLocation(FloatPoint((pluginRect.size().width() / 2 - replacementTextRect.size().width() / 2) + pluginRect.location().x(),
- (pluginRect.size().height() / 2 - replacementTextRect.size().height() / 2) + pluginRect.location().y()));
-
- Path path = Path::createRoundedRectangle(replacementTextRect, FloatSize(replacementTextRoundedRectRadius, replacementTextRoundedRectRadius));
- context->save();
- context->clip(pluginRect);
- context->beginPath();
- context->addPath(path);
- context->setAlpha(replacementTextRoundedRectOpacity);
- context->setFillColor(Color::white, style()->colorSpace());
- context->fillPath();
+ float x = (contentRect.size().width() / 2 - replacementTextRect.size().width() / 2) + contentRect.location().x();
+ float y = (contentRect.size().height() / 2 - replacementTextRect.size().height() / 2) + contentRect.location().y();
+ replacementTextRect.setLocation(FloatPoint(x, y));
+
+ path = Path::createRoundedRectangle(replacementTextRect, FloatSize(replacementTextRoundedRectRadius, replacementTextRoundedRectRadius));
- FloatPoint labelPoint(roundf(replacementTextRect.location().x() + (replacementTextRect.size().width() - textWidth) / 2),
- roundf(replacementTextRect.location().y()+ (replacementTextRect.size().height() - font.height()) / 2 + font.ascent()));
- context->setAlpha(replacementTextTextOpacity);
- context->setFillColor(Color::black, style()->colorSpace());
- context->drawBidiText(font, run, labelPoint);
- context->restore();
+ return true;
}
void RenderEmbeddedObject::layout()
@@ -455,5 +492,63 @@ void RenderEmbeddedObject::viewCleared()
view->setMarginHeight(marginh);
}
}
+
+bool RenderEmbeddedObject::isInMissingPluginIndicator(MouseEvent* event)
+{
+ FloatRect contentRect;
+ Path path;
+ FloatRect replacementTextRect;
+ Font font;
+ TextRun run("");
+ float textWidth;
+ if (!getReplacementTextGeometry(0, 0, contentRect, path, replacementTextRect, font, run, textWidth))
+ return false;
+
+ return path.contains(absoluteToLocal(event->absoluteLocation(), false, true));
+}
+
+void RenderEmbeddedObject::handleMissingPluginIndicatorEvent(Event* event)
+{
+ if (Page* page = document()->page()) {
+ if (!page->chrome()->client()->shouldMissingPluginMessageBeButton())
+ return;
+ }
+
+ if (!event->isMouseEvent())
+ return;
+
+ MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
+ HTMLPlugInElement* element = static_cast<HTMLPlugInElement*>(node());
+ if (event->type() == eventNames().mousedownEvent && static_cast<MouseEvent*>(event)->button() == LeftButton) {
+ m_mouseDownWasInMissingPluginIndicator = isInMissingPluginIndicator(mouseEvent);
+ if (m_mouseDownWasInMissingPluginIndicator) {
+ if (Frame* frame = document()->frame()) {
+ frame->eventHandler()->setCapturingMouseEventsNode(element);
+ element->setIsCapturingMouseEvents(true);
+ }
+ setMissingPluginIndicatorIsPressed(true);
+ }
+ event->setDefaultHandled();
+ }
+ if (event->type() == eventNames().mouseupEvent && static_cast<MouseEvent*>(event)->button() == LeftButton) {
+ if (m_missingPluginIndicatorIsPressed) {
+ if (Frame* frame = document()->frame()) {
+ frame->eventHandler()->setCapturingMouseEventsNode(0);
+ element->setIsCapturingMouseEvents(false);
+ }
+ setMissingPluginIndicatorIsPressed(false);
+ }
+ if (m_mouseDownWasInMissingPluginIndicator && isInMissingPluginIndicator(mouseEvent)) {
+ if (Page* page = document()->page())
+ page->chrome()->client()->missingPluginButtonClicked(element);
+ }
+ m_mouseDownWasInMissingPluginIndicator = false;
+ event->setDefaultHandled();
+ }
+ if (event->type() == eventNames().mousemoveEvent) {
+ setMissingPluginIndicatorIsPressed(m_mouseDownWasInMissingPluginIndicator && isInMissingPluginIndicator(mouseEvent));
+ event->setDefaultHandled();
+ }
+}
}
diff --git a/WebCore/rendering/RenderEmbeddedObject.h b/WebCore/rendering/RenderEmbeddedObject.h
index bfb7b96..0944094 100644
--- a/WebCore/rendering/RenderEmbeddedObject.h
+++ b/WebCore/rendering/RenderEmbeddedObject.h
@@ -27,6 +27,8 @@
namespace WebCore {
+class MouseEvent;
+
// Renderer for embeds and objects, often, but not always, rendered via plug-ins.
// For example, <embed src="foo.html"> does not invoke a plug-in.
class RenderEmbeddedObject : public RenderPart {
@@ -41,6 +43,8 @@ public:
bool hasFallbackContent() const { return m_hasFallbackContent; }
+ void handleMissingPluginIndicatorEvent(Event*);
+
#if USE(ACCELERATED_COMPOSITING)
virtual bool allowsAcceleratedCompositing() const;
#endif
@@ -58,10 +62,16 @@ private:
virtual void layout();
virtual void viewCleared();
+
+ void setMissingPluginIndicatorIsPressed(bool);
+ bool isInMissingPluginIndicator(MouseEvent*);
+ bool getReplacementTextGeometry(int tx, int ty, FloatRect& contentRect, Path&, FloatRect& replacementTextRect, Font&, TextRun&, float& textWidth);
String m_replacementText;
bool m_hasFallbackContent;
bool m_showsMissingPluginIndicator;
+ bool m_missingPluginIndicatorIsPressed;
+ bool m_mouseDownWasInMissingPluginIndicator;
};
inline RenderEmbeddedObject* toRenderEmbeddedObject(RenderObject* object)
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index a672f4b..d9d2be1 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -59,6 +59,7 @@
#include "FrameView.h"
#include "Gradient.h"
#include "GraphicsContext.h"
+#include "HTMLFrameOwnerElement.h"
#include "HTMLNames.h"
#include "HitTestRequest.h"
#include "HitTestResult.h"
diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
index c5a7e19..ae01799 100644
--- a/WebCore/rendering/RenderLayerBacking.cpp
+++ b/WebCore/rendering/RenderLayerBacking.cpp
@@ -156,6 +156,14 @@ void RenderLayerBacking::updateCompositedBounds()
setCompositedBounds(layerBounds);
}
+void RenderLayerBacking::updateAfterWidgetResize()
+{
+ if (renderer()->isRenderIFrame()) {
+ if (RenderLayerCompositor* innerCompositor = RenderLayerCompositor::iframeContentsCompositor(toRenderIFrame(renderer())))
+ innerCompositor->updateContentLayerOffset(contentsBox().location());
+ }
+}
+
void RenderLayerBacking::updateAfterLayout(UpdateDepth updateDepth, bool isUpdateRoot)
{
RenderLayerCompositor* layerCompositor = compositor();
@@ -390,12 +398,7 @@ void RenderLayerBacking::updateGraphicsLayerGeometry()
m_graphicsLayer->setContentsRect(contentsBox());
updateDrawsContent();
-
- // If this is an iframe parent, update the iframe content's box
- if (renderer()->isRenderIFrame()) {
- if (RenderLayerCompositor* innerCompositor = RenderLayerCompositor::iframeContentsCompositor(toRenderIFrame(renderer())))
- innerCompositor->updateContentLayerOffset(contentsBox().location());
- }
+ updateAfterWidgetResize();
}
void RenderLayerBacking::updateInternalHierarchy()
@@ -965,20 +968,15 @@ void RenderLayerBacking::paintIntoLayer(RenderLayer* rootLayer, GraphicsContext*
// Restore the clip.
restoreClip(context, paintDirtyRect, damageRect);
+
+ // Now walk the sorted list of children with negative z-indices. Only RenderLayers without compositing layers will paint.
+ m_owningLayer->paintList(m_owningLayer->negZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0);
}
bool forceBlackText = paintBehavior & PaintBehaviorForceBlackText;
bool selectionOnly = paintBehavior & PaintBehaviorSelectionOnly;
if (shouldPaint && (paintingPhase & GraphicsLayerPaintForeground)) {
- // Now walk the sorted list of children with negative z-indices. Only RenderLayers without compositing layers will paint.
- // FIXME: should these be painted as background?
- Vector<RenderLayer*>* negZOrderList = m_owningLayer->negZOrderList();
- if (negZOrderList) {
- for (Vector<RenderLayer*>::iterator it = negZOrderList->begin(); it != negZOrderList->end(); ++it)
- it[0]->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot);
- }
-
// Set up the clip used when painting our children.
setClip(context, paintDirtyRect, clipRectToApply);
PaintInfo paintInfo(context, clipRectToApply,
@@ -1009,18 +1007,10 @@ void RenderLayerBacking::paintIntoLayer(RenderLayer* rootLayer, GraphicsContext*
}
// Paint any child layers that have overflow.
- Vector<RenderLayer*>* normalFlowList = m_owningLayer->normalFlowList();
- if (normalFlowList) {
- for (Vector<RenderLayer*>::iterator it = normalFlowList->begin(); it != normalFlowList->end(); ++it)
- it[0]->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot);
- }
+ m_owningLayer->paintList(m_owningLayer->normalFlowList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0);
// Now walk the sorted list of children with positive z-indices.
- Vector<RenderLayer*>* posZOrderList = m_owningLayer->posZOrderList();
- if (posZOrderList) {
- for (Vector<RenderLayer*>::iterator it = posZOrderList->begin(); it != posZOrderList->end(); ++it)
- it[0]->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot);
- }
+ m_owningLayer->paintList(m_owningLayer->posZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0);
}
if (shouldPaint && (paintingPhase & GraphicsLayerPaintMask)) {
diff --git a/WebCore/rendering/RenderLayerBacking.h b/WebCore/rendering/RenderLayerBacking.h
index faa553c..16c39da 100644
--- a/WebCore/rendering/RenderLayerBacking.h
+++ b/WebCore/rendering/RenderLayerBacking.h
@@ -110,6 +110,8 @@ public:
IntRect compositedBounds() const;
void setCompositedBounds(const IntRect&);
void updateCompositedBounds();
+
+ void updateAfterWidgetResize();
FloatPoint graphicsLayerToContentsCoordinates(const GraphicsLayer*, const FloatPoint&);
FloatPoint contentsToGraphicsLayerCoordinates(const GraphicsLayer*, const FloatPoint&);
diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp
index d9a8bf1..c485acc 100644
--- a/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/WebCore/rendering/RenderLayerCompositor.cpp
@@ -100,6 +100,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView)
, m_showDebugBorders(false)
, m_showRepaintCounter(false)
, m_compositingConsultsOverlap(true)
+ , m_compositingDependsOnGeometry(false)
, m_compositing(false)
, m_compositingLayersNeedRebuild(false)
, m_rootLayerAttachment(RootLayerUnattached)
@@ -174,7 +175,10 @@ void RenderLayerCompositor::scheduleSync()
void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType updateType, RenderLayer* updateRoot)
{
- bool checkForHierarchyUpdate = false;
+ if (!m_compositingDependsOnGeometry && !m_compositing)
+ return;
+
+ bool checkForHierarchyUpdate = m_compositingDependsOnGeometry;
bool needGeometryUpdate = false;
switch (updateType) {
@@ -193,8 +197,6 @@ void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update
if (!checkForHierarchyUpdate && !needGeometryUpdate)
return;
- ASSERT(inCompositingMode());
-
bool needHierarchyUpdate = m_compositingLayersNeedRebuild;
if (!updateRoot) {
// Only clear the flag if we're updating the entire hierarchy.
@@ -640,7 +642,11 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* layer, O
}
}
}
-
+
+ // If we just entered compositing mode, the root will have become composited.
+ if (layer->isRootLayer() && inCompositingMode())
+ willBeComposited = true;
+
ASSERT(willBeComposited == needsToBeComposited(layer));
// If we have a software transform, and we have layers under us, we need to also
@@ -675,7 +681,7 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* layer, O
// If we're back at the root, and no other layers need to be composited, and the root layer itself doesn't need
// to be composited, then we can drop out of compositing mode altogether.
if (layer->isRootLayer() && !childState.m_subtreeIsCompositing && !requiresCompositingLayer(layer)) {
- m_compositing = false;
+ enableCompositingMode(false);
willBeComposited = false;
}
@@ -1065,7 +1071,7 @@ bool RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame() const
// Parent document content needs to be able to render on top of a composited iframe, so correct behavior
// is to have the parent document become composited too. However, this can cause problems on platforms that
// use native views for frames (like Mac), so disable that behavior on those platforms for now.
- Element* ownerElement = enclosingIFrameElement();
+ HTMLFrameOwnerElement* ownerElement = enclosingIFrameElement();
RenderObject* renderer = ownerElement ? ownerElement->renderer() : 0;
if (!renderer || !renderer->isRenderIFrame())
return false;
@@ -1093,9 +1099,9 @@ bool RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame() const
#endif
}
-Element* RenderLayerCompositor::enclosingIFrameElement() const
+HTMLFrameOwnerElement* RenderLayerCompositor::enclosingIFrameElement() const
{
- if (Element* ownerElement = m_renderView->document()->ownerElement())
+ if (HTMLFrameOwnerElement* ownerElement = m_renderView->document()->ownerElement())
return ownerElement->hasTagName(iframeTag) ? ownerElement : 0;
return 0;
@@ -1269,7 +1275,22 @@ bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer)
bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const
{
- return renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing();
+ if (!renderer->isEmbeddedObject())
+ return false;
+
+ RenderEmbeddedObject* embedRenderer = toRenderEmbeddedObject(renderer);
+ if (!embedRenderer->allowsAcceleratedCompositing())
+ return false;
+
+ m_compositingDependsOnGeometry = true;
+
+ // If we can't reliably know the size of the plugin yet, don't change compositing state.
+ if (renderer->needsLayout())
+ return embedRenderer->hasLayer() && embedRenderer->layer()->isComposited();
+
+ // Don't go into compositing mode if height or width are zero, or size is 1x1.
+ IntRect contentBox = embedRenderer->contentBoxRect();
+ return contentBox.height() * contentBox.width() > 1;
}
bool RenderLayerCompositor::requiresCompositingForIFrame(RenderObject* renderer) const
@@ -1277,13 +1298,24 @@ bool RenderLayerCompositor::requiresCompositingForIFrame(RenderObject* renderer)
if (!renderer->isRenderIFrame())
return false;
- RenderIFrame* iframe = toRenderIFrame(renderer);
+ RenderIFrame* iframeRenderer = toRenderIFrame(renderer);
- if (!iframe->requiresAcceleratedCompositing())
+ if (!iframeRenderer->requiresAcceleratedCompositing())
return false;
-
- RenderLayerCompositor* innerCompositor = iframeContentsCompositor(iframe);
- return innerCompositor->shouldPropagateCompositingToEnclosingIFrame();
+
+ m_compositingDependsOnGeometry = true;
+
+ RenderLayerCompositor* innerCompositor = iframeContentsCompositor(iframeRenderer);
+ if (!innerCompositor->shouldPropagateCompositingToEnclosingIFrame())
+ return false;
+
+ // If we can't reliably know the size of the iframe yet, don't change compositing state.
+ if (renderer->needsLayout())
+ return iframeRenderer->hasLayer() && iframeRenderer->layer()->isComposited();
+
+ // Don't go into compositing mode if height or width are zero.
+ IntRect contentBox = iframeRenderer->contentBoxRect();
+ return contentBox.height() * contentBox.width() > 0;
}
bool RenderLayerCompositor::requiresCompositingForAnimation(RenderObject* renderer) const
@@ -1403,7 +1435,7 @@ void RenderLayerCompositor::attachRootPlatformLayer(RootLayerAttachment attachme
case RootLayerAttachedViaEnclosingIframe: {
// The layer will get hooked up via RenderLayerBacking::updateGraphicsLayerConfiguration()
// for the iframe's renderer in the parent document.
- m_renderView->document()->ownerElement()->setNeedsStyleRecalc(SyntheticStyleChange);
+ scheduleNeedsStyleRecalc(m_renderView->document()->ownerElement());
break;
}
}
@@ -1427,7 +1459,7 @@ void RenderLayerCompositor::detachRootPlatformLayer()
m_rootPlatformLayer->removeFromParent();
if (Element* ownerElement = m_renderView->document()->ownerElement())
- ownerElement->setNeedsStyleRecalc(SyntheticStyleChange);
+ scheduleNeedsStyleRecalc(ownerElement);
break;
}
case RootLayerAttachedViaChromeClient: {
@@ -1461,6 +1493,19 @@ void RenderLayerCompositor::rootLayerAttachmentChanged()
backing->updateDrawsContent();
}
+static void needsStyleRecalcCallback(Node* node)
+{
+ node->setNeedsStyleRecalc(SyntheticStyleChange);
+}
+
+void RenderLayerCompositor::scheduleNeedsStyleRecalc(Element* element)
+{
+ if (ContainerNode::postAttachCallbacksAreSuspended())
+ ContainerNode::queuePostAttachCallback(needsStyleRecalcCallback, element);
+ else
+ element->setNeedsStyleRecalc(SyntheticStyleChange);
+}
+
// IFrames are special, because we hook compositing layers together across iframe boundaries
// when both parent and iframe content are composited. So when this frame becomes composited, we have
// to use a synthetic style change to get the iframes into RenderLayers in order to allow them to composite.
@@ -1472,7 +1517,7 @@ void RenderLayerCompositor::notifyIFramesOfCompositingChange()
for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) {
if (child->document() && child->document()->ownerElement())
- child->document()->ownerElement()->setNeedsStyleRecalc(SyntheticStyleChange);
+ scheduleNeedsStyleRecalc(child->document()->ownerElement());
}
}
diff --git a/WebCore/rendering/RenderLayerCompositor.h b/WebCore/rendering/RenderLayerCompositor.h
index 81f2058..10516ad 100644
--- a/WebCore/rendering/RenderLayerCompositor.h
+++ b/WebCore/rendering/RenderLayerCompositor.h
@@ -34,6 +34,7 @@ namespace WebCore {
#define PROFILE_LAYER_REBUILD 0
class GraphicsLayer;
+class RenderEmbeddedObject;
class RenderIFrame;
#if ENABLE(VIDEO)
class RenderVideo;
@@ -150,7 +151,7 @@ public:
// their parent document.
bool shouldPropagateCompositingToEnclosingIFrame() const;
- Element* enclosingIFrameElement() const;
+ HTMLFrameOwnerElement* enclosingIFrameElement() const;
static RenderLayerCompositor* iframeContentsCompositor(RenderIFrame*);
// Return true if the layers changed.
@@ -201,6 +202,7 @@ private:
void rootLayerAttachmentChanged();
+ void scheduleNeedsStyleRecalc(Element*);
void notifyIFramesOfCompositingChange();
// Whether a running transition or animation enforces the need for a compositing layer.
@@ -224,9 +226,15 @@ private:
bool m_showDebugBorders;
bool m_showRepaintCounter;
bool m_compositingConsultsOverlap;
+
+ // When true, we have to wait until layout has happened before we can decide whether to enter compositing mode,
+ // because only then do we know the final size of plugins and iframes.
+ // FIXME: once set, this is never cleared.
+ mutable bool m_compositingDependsOnGeometry;
+
bool m_compositing;
bool m_compositingLayersNeedRebuild;
-
+
RootLayerAttachment m_rootLayerAttachment;
// Enclosing clipping layer for iframe content
diff --git a/WebCore/rendering/RenderMedia.cpp b/WebCore/rendering/RenderMedia.cpp
index ba60ed0..d7b4a99 100644
--- a/WebCore/rendering/RenderMedia.cpp
+++ b/WebCore/rendering/RenderMedia.cpp
@@ -33,6 +33,7 @@
#include "HTMLNames.h"
#include "MediaControlElements.h"
#include "MouseEvent.h"
+#include "Page.h"
#include "RenderTheme.h"
#include <wtf/CurrentTime.h>
#include <wtf/MathExtras.h>
@@ -135,6 +136,8 @@ void RenderMedia::styleDidChange(StyleDifference diff, const RenderStyle* oldSty
m_timeRemainingDisplay->updateStyle();
if (m_volumeSliderContainer)
m_volumeSliderContainer->updateStyle();
+ if (m_volumeSliderMuteButton)
+ m_volumeSliderMuteButton->updateStyle();
if (m_volumeSlider)
m_volumeSlider->updateStyle();
}
@@ -184,7 +187,7 @@ void RenderMedia::createPanel()
void RenderMedia::createMuteButton()
{
ASSERT(!m_muteButton);
- m_muteButton = MediaControlMuteButtonElement::create(mediaElement());
+ m_muteButton = MediaControlMuteButtonElement::create(mediaElement(), MediaControlMuteButtonElement::Controller);
m_muteButton->attachToParent(m_panel.get());
}
@@ -269,6 +272,14 @@ void RenderMedia::createVolumeSlider()
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);
@@ -316,6 +327,7 @@ void RenderMedia::updateControls()
m_fullscreenButton = 0;
m_volumeSliderContainer = 0;
m_volumeSlider = 0;
+ m_volumeSliderMuteButton = 0;
m_controlsShadowRoot = 0;
m_toggleClosedCaptionsButton = 0;
}
@@ -345,8 +357,10 @@ void RenderMedia::updateControls()
createFullscreenButton();
createMuteButton();
createVolumeSliderContainer();
- if (m_volumeSliderContainer)
+ if (m_volumeSliderContainer) {
createVolumeSlider();
+ createVolumeSliderMuteButton();
+ }
m_panel->attach();
}
}
@@ -396,6 +410,8 @@ void RenderMedia::updateControls()
m_fullscreenButton->update();
if (m_volumeSlider)
m_volumeSlider->update();
+ if (m_volumeSliderMuteButton)
+ m_volumeSliderMuteButton->update();
updateTimeDisplay();
updateControlVisibility();
@@ -499,13 +515,13 @@ void RenderMedia::updateVolumeSliderContainer(bool visible)
RefPtr<RenderStyle> s = m_volumeSliderContainer->styleForElement();
int height = s->height().isPercent() ? 0 : s->height().value();
- int x = m_muteButton->renderBox()->offsetLeft();
- int y = m_muteButton->renderBox()->offsetTop() - height;
- FloatPoint absPoint = m_muteButton->renderer()->localToAbsolute(FloatPoint(x, y), true, true);
- if (absPoint.y() < 0)
- y = m_muteButton->renderBox()->offsetTop() + m_muteButton->renderBox()->height();
- m_volumeSliderContainer->setVisible(true);
+ 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()) {
@@ -519,8 +535,15 @@ void RenderMedia::forwardEvent(Event* event)
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 (m_muteButton && m_muteButton->hitTest(point)) {
+ if (!defaultHandled && m_muteButton && m_muteButton->hitTest(point)) {
m_muteButton->defaultEventHandler(event);
if (event->type() != eventNames().mouseoutEvent)
showVolumeSlider = true;
diff --git a/WebCore/rendering/RenderMedia.h b/WebCore/rendering/RenderMedia.h
index 32d6d65..4c980b5 100644
--- a/WebCore/rendering/RenderMedia.h
+++ b/WebCore/rendering/RenderMedia.h
@@ -104,6 +104,7 @@ private:
void createTimeline();
void createVolumeSliderContainer();
void createVolumeSlider();
+ void createVolumeSliderMuteButton();
void createCurrentTimeDisplay();
void createTimeRemainingDisplay();
void createFullscreenButton();
@@ -131,6 +132,7 @@ private:
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;
diff --git a/WebCore/rendering/RenderMediaControlsChromium.cpp b/WebCore/rendering/RenderMediaControlsChromium.cpp
index ffd7a1e..98fdc7b 100644
--- a/WebCore/rendering/RenderMediaControlsChromium.cpp
+++ b/WebCore/rendering/RenderMediaControlsChromium.cpp
@@ -282,6 +282,7 @@ bool RenderMediaControlsChromium::paintMediaControlsPart(MediaControlElementType
return paintMediaVolumeSliderThumb(object, paintInfo, rect);
case MediaTimelineContainer:
return paintMediaTimelineContainer(object, paintInfo, rect);
+ case MediaVolumeSliderMuteButton:
case MediaFullscreenButton:
case MediaSeekBackButton:
case MediaSeekForwardButton:
diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp
index 156df15..4ff35eb 100644
--- a/WebCore/rendering/RenderObject.cpp
+++ b/WebCore/rendering/RenderObject.cpp
@@ -555,6 +555,19 @@ RenderBox* RenderObject::enclosingBox() const
return 0;
}
+RenderBoxModelObject* RenderObject::enclosingBoxModelObject() const
+{
+ RenderObject* curr = const_cast<RenderObject*>(this);
+ while (curr) {
+ if (curr->isBoxModelObject())
+ return toRenderBoxModelObject(curr);
+ curr = curr->parent();
+ }
+
+ ASSERT_NOT_REACHED();
+ return 0;
+}
+
RenderBlock* RenderObject::firstLineBlock() const
{
return 0;
@@ -1685,6 +1698,14 @@ StyleDifference RenderObject::adjustStyleDifference(StyleDifference diff, unsign
else if (diff < StyleDifferenceRecompositeLayer)
diff = StyleDifferenceRecompositeLayer;
}
+
+ // The answer to requiresLayer() for plugins and iframes can change outside of the style system,
+ // since it depends on whether we decide to composite these elements. When the layer status of
+ // one of these elements changes, we need to force a layout.
+ if (diff == StyleDifferenceEqual && style() && isBoxModelObject()) {
+ if (hasLayer() != toRenderBoxModelObject(this)->requiresLayer())
+ diff = StyleDifferenceLayout;
+ }
#else
UNUSED_PARAM(contextSensitiveProperties);
#endif
diff --git a/WebCore/rendering/RenderObject.h b/WebCore/rendering/RenderObject.h
index 33271df..3f78e45 100644
--- a/WebCore/rendering/RenderObject.h
+++ b/WebCore/rendering/RenderObject.h
@@ -166,7 +166,8 @@ public:
// Convenience function for getting to the nearest enclosing box of a RenderObject.
RenderBox* enclosingBox() const;
-
+ RenderBoxModelObject* enclosingBoxModelObject() const;
+
virtual bool isEmpty() const { return firstChild() == 0; }
#ifndef NDEBUG
diff --git a/WebCore/rendering/RenderPath.cpp b/WebCore/rendering/RenderPath.cpp
index 0010e3f..27d480d 100644
--- a/WebCore/rendering/RenderPath.cpp
+++ b/WebCore/rendering/RenderPath.cpp
@@ -100,13 +100,7 @@ void RenderPath::layout()
LayoutRepainter repainter(*this, checkForRepaintDuringLayout() && selfNeedsLayout());
SVGStyledTransformableElement* element = static_cast<SVGStyledTransformableElement*>(node());
- // We need to update the Path object whenever the underlying SVGStyledTransformableElement uses relative values
- // as the viewport size may have changed. It would be nice to optimize this to detect these changes, and only
- // update when needed, even when using relative values.
bool needsPathUpdate = m_needsPathUpdate;
- if (!needsPathUpdate && element->hasRelativeLengths())
- needsPathUpdate = true;
-
if (needsPathUpdate) {
m_path = element->toPathData();
m_needsPathUpdate = false;
diff --git a/WebCore/rendering/RenderSVGContainer.cpp b/WebCore/rendering/RenderSVGContainer.cpp
index 27584d9..d4ca69f 100644
--- a/WebCore/rendering/RenderSVGContainer.cpp
+++ b/WebCore/rendering/RenderSVGContainer.cpp
@@ -40,29 +40,24 @@ RenderSVGContainer::RenderSVGContainer(SVGStyledElement* node)
{
}
-bool RenderSVGContainer::drawsContents() const
-{
- return m_drawsContents;
-}
-
-void RenderSVGContainer::setDrawsContents(bool drawsContents)
-{
- m_drawsContents = drawsContents;
-}
-
void RenderSVGContainer::layout()
{
ASSERT(needsLayout());
- ASSERT(!view()->layoutStateEnabled()); // RenderSVGRoot disables layoutState for the SVG rendering tree.
- calcViewport(); // Allow RenderSVGViewportContainer to update its viewport
+ // RenderSVGRoot disables layoutState for the SVG rendering tree.
+ ASSERT(!view()->layoutStateEnabled());
+
+ // Allow RenderSVGViewportContainer to update its viewport.
+ calcViewport();
LayoutRepainter repainter(*this, checkForRepaintDuringLayout() || selfWillPaint());
- calculateLocalTransform(); // Allow RenderSVGTransformableContainer to update its transform
+
+ // Allow RenderSVGTransformableContainer to update its transform.
+ calculateLocalTransform();
SVGRenderSupport::layoutChildren(this, selfNeedsLayout());
- repainter.repaintAfterLayout();
+ repainter.repaintAfterLayout();
setNeedsLayout(false);
}
diff --git a/WebCore/rendering/RenderSVGContainer.h b/WebCore/rendering/RenderSVGContainer.h
index f681e50..53f1a97 100644
--- a/WebCore/rendering/RenderSVGContainer.h
+++ b/WebCore/rendering/RenderSVGContainer.h
@@ -39,8 +39,8 @@ public:
RenderObjectChildList* children() { return &m_children; }
// <marker> uses these methods to only allow drawing children during a special marker draw time
- void setDrawsContents(bool);
- bool drawsContents() const;
+ void setDrawsContents(bool drawsContents) { m_drawsContents = drawsContents; }
+ bool drawsContents() const { return m_drawsContents; }
virtual void paint(PaintInfo&, int parentX, int parentY);
@@ -97,5 +97,3 @@ void toRenderSVGContainer(const RenderSVGContainer*);
#endif // ENABLE(SVG)
#endif // RenderSVGContainer_h
-
-// vim:ts=4:noet
diff --git a/WebCore/rendering/RenderSVGResourceFilter.cpp b/WebCore/rendering/RenderSVGResourceFilter.cpp
index 0062015..19a6ccb 100644
--- a/WebCore/rendering/RenderSVGResourceFilter.cpp
+++ b/WebCore/rendering/RenderSVGResourceFilter.cpp
@@ -219,11 +219,13 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*,
sourceGraphicContext->translate(-clippedSourceRect.x(), -clippedSourceRect.y());
sourceGraphicContext->scale(scale);
sourceGraphicContext->clearRect(FloatRect(FloatPoint(), paintRect.size()));
- filterData->sourceGraphicBuffer.set(sourceGraphic.release());
+ filterData->sourceGraphicBuffer = sourceGraphic.release();
filterData->savedContext = context;
context = sourceGraphicContext;
- m_filter.set(object, filterData.release());
+
+ ASSERT(!m_filter.contains(object));
+ m_filter.set(object, filterData.leakPtr());
return true;
}
diff --git a/WebCore/rendering/RenderSVGResourceGradient.cpp b/WebCore/rendering/RenderSVGResourceGradient.cpp
index 7ea70d2..74f5b13 100644
--- a/WebCore/rendering/RenderSVGResourceGradient.cpp
+++ b/WebCore/rendering/RenderSVGResourceGradient.cpp
@@ -73,17 +73,12 @@ void RenderSVGResourceGradient::invalidateClient(RenderObject* object)
}
#if PLATFORM(CG)
-static inline AffineTransform absoluteTransformForRenderer(const RenderObject* object)
+static inline AffineTransform absoluteTransformFromContext(GraphicsContext* context)
{
- AffineTransform absoluteTransform;
-
- const RenderObject* currentObject = object;
- while (currentObject) {
- absoluteTransform = currentObject->localToParentTransform() * absoluteTransform;
- currentObject = currentObject->parent();
- }
-
- return absoluteTransform;
+ // Extract current transformation matrix used in the original context. Note that this coordinate
+ // system is flipped compared to SVGs internal coordinate system, done in WebKit level. Fix
+ // this transformation by flipping the y component.
+ return context->getCTM() * AffineTransform().flipY();
}
static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& context,
@@ -93,7 +88,7 @@ static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& con
{
const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object);
- AffineTransform transform = absoluteTransformForRenderer(textRootBlock);
+ AffineTransform transform(absoluteTransformFromContext(context));
FloatRect maskAbsoluteBoundingBox = transform.mapRect(textRootBlock->repaintRectInLocalCoordinates());
IntRect maskImageRect = enclosingIntRect(maskAbsoluteBoundingBox);
@@ -111,7 +106,7 @@ static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& con
maskImageContext->translate(-maskAbsoluteBoundingBox.x(), -maskAbsoluteBoundingBox.y());
maskImageContext->concatCTM(transform);
- imageBuffer.set(maskImage.release());
+ imageBuffer = maskImage.release();
savedContext = context;
context = maskImageContext;
@@ -124,7 +119,13 @@ static inline AffineTransform clipToTextMask(GraphicsContext* context,
GradientData* gradientData)
{
const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object);
- context->clipToImageBuffer(textRootBlock->repaintRectInLocalCoordinates(), imageBuffer.get());
+
+ // The mask image has been created in the device coordinate space, as the image should not be scaled.
+ // So the actual masking process has to be done in the device coordinate space as well.
+ AffineTransform transform(absoluteTransformFromContext(context));
+ context->concatCTM(transform.inverse());
+ context->clipToImageBuffer(transform.mapRect(textRootBlock->repaintRectInLocalCoordinates()), imageBuffer.get());
+ context->concatCTM(transform);
AffineTransform matrix;
if (gradientData->boundingBoxMode) {
diff --git a/WebCore/rendering/RenderSVGRoot.cpp b/WebCore/rendering/RenderSVGRoot.cpp
index ad3303f..396df19 100644
--- a/WebCore/rendering/RenderSVGRoot.cpp
+++ b/WebCore/rendering/RenderSVGRoot.cpp
@@ -48,6 +48,7 @@ namespace WebCore {
RenderSVGRoot::RenderSVGRoot(SVGStyledElement* node)
: RenderBox(node)
+ , m_isLayoutSizeChanged(false)
{
setReplaced(true);
}
@@ -116,13 +117,14 @@ void RenderSVGRoot::layout()
IntSize oldSize(width(), height());
calcWidth();
calcHeight();
-
calcViewport();
- // RenderSVGRoot needs to take special care to propagate window size changes to the children,
- // if the outermost <svg> is using relative x/y/width/height values. Hence the additonal parameters.
SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
- SVGRenderSupport::layoutChildren(this, needsLayout || (svg->hasRelativeLengths() && oldSize != size()));
+ m_isLayoutSizeChanged = svg->hasRelativeLengths() && oldSize != size();
+
+ SVGRenderSupport::layoutChildren(this, needsLayout);
+ m_isLayoutSizeChanged = false;
+
repainter.repaintAfterLayout();
view()->enableLayoutState();
@@ -200,9 +202,6 @@ void RenderSVGRoot::calcViewport()
{
SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
- if (!selfNeedsLayout() && !svg->hasRelativeLengths())
- return;
-
if (!svg->hasSetContainerSize()) {
// In the normal case of <svg> being stand-alone or in a CSSBoxModel object we use
// RenderBox::width()/height() (which pulls data from RenderStyle)
@@ -270,12 +269,17 @@ FloatRect RenderSVGRoot::strokeBoundingBox() const
FloatRect RenderSVGRoot::repaintRectInLocalCoordinates() const
{
- // FIXME: This does not include the border but it should!
FloatRect repaintRect = SVGRenderSupport::computeContainerBoundingBox(this, SVGRenderSupport::RepaintBoundingBox);
style()->svgStyle()->inflateForShadow(repaintRect);
+ repaintRect.inflate(borderAndPaddingWidth());
return repaintRect;
}
+IntRect RenderSVGRoot::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer)
+{
+ return SVGRenderSupport::clippedOverflowRectForRepaint(this, repaintContainer);
+}
+
void RenderSVGRoot::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed)
{
// Apply our local transforms (except for x/y translation), then our shadow,
diff --git a/WebCore/rendering/RenderSVGRoot.h b/WebCore/rendering/RenderSVGRoot.h
index 48263aa..0a08ab5 100644
--- a/WebCore/rendering/RenderSVGRoot.h
+++ b/WebCore/rendering/RenderSVGRoot.h
@@ -40,6 +40,8 @@ public:
const RenderObjectChildList* children() const { return &m_children; }
RenderObjectChildList* children() { return &m_children; }
+ bool isLayoutSizeChanged() const { return m_isLayoutSizeChanged; }
+
private:
virtual RenderObjectChildList* virtualChildren() { return children(); }
virtual const RenderObjectChildList* virtualChildren() const { return children(); }
@@ -68,6 +70,7 @@ private:
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction);
+ virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed);
virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
@@ -84,6 +87,7 @@ private:
RenderObjectChildList m_children;
FloatSize m_viewportSize;
mutable AffineTransform m_localToParentTransform;
+ bool m_isLayoutSizeChanged : 1;
};
inline RenderSVGRoot* toRenderSVGRoot(RenderObject* object)
diff --git a/WebCore/rendering/RenderSVGViewportContainer.cpp b/WebCore/rendering/RenderSVGViewportContainer.cpp
index ca735d2..f314bde 100644
--- a/WebCore/rendering/RenderSVGViewportContainer.cpp
+++ b/WebCore/rendering/RenderSVGViewportContainer.cpp
@@ -45,18 +45,13 @@ void RenderSVGViewportContainer::applyViewportClip(PaintInfo& paintInfo)
void RenderSVGViewportContainer::calcViewport()
{
- SVGElement* svgelem = static_cast<SVGElement*>(node());
- if (svgelem->hasTagName(SVGNames::svgTag)) {
- SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
-
- if (!selfNeedsLayout() && !svg->hasRelativeLengths())
- return;
-
- float x = svg->x().value(svg);
- float y = svg->y().value(svg);
- float w = svg->width().value(svg);
- float h = svg->height().value(svg);
- m_viewport = FloatRect(x, y, w, h);
+ SVGElement* element = static_cast<SVGElement*>(node());
+ if (element->hasTagName(SVGNames::svgTag)) {
+ SVGSVGElement* svg = static_cast<SVGSVGElement*>(element);
+ m_viewport = FloatRect(svg->x().value(svg)
+ , svg->y().value(svg)
+ , svg->width().value(svg)
+ , svg->height().value(svg));
}
}
diff --git a/WebCore/rendering/RenderTheme.cpp b/WebCore/rendering/RenderTheme.cpp
index 2c6e9da..2147b36 100644
--- a/WebCore/rendering/RenderTheme.cpp
+++ b/WebCore/rendering/RenderTheme.cpp
@@ -1,7 +1,7 @@
/**
* This file is part of the theme implementation for form controls in WebCore.
*
- * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Computer, Inc.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -341,6 +341,8 @@ bool RenderTheme::paint(RenderObject* o, const PaintInfo& paintInfo, const IntRe
if (o->parent()->isSlider())
return paintMediaSliderThumb(o, paintInfo, r);
break;
+ case MediaVolumeSliderMuteButtonPart:
+ return paintMediaMuteButton(o, paintInfo, r);
case MediaVolumeSliderContainerPart:
return paintMediaVolumeSliderContainer(o, paintInfo, r);
case MediaVolumeSliderPart:
@@ -538,6 +540,15 @@ String RenderTheme::formatMediaControlsRemainingTime(float currentTime, float du
return formatMediaControlsTime(currentTime - duration);
}
+IntPoint RenderTheme::volumeSliderOffsetFromMuteButton(Node* muteButton, const IntSize& size) const
+{
+ int y = -size.height();
+ FloatPoint absPoint = muteButton->renderer()->localToAbsolute(FloatPoint(muteButton->renderBox()->offsetLeft(), y), true, true);
+ if (absPoint.y() < 0)
+ y = muteButton->renderBox()->height();
+ return IntPoint(0, y);
+}
+
#endif
Color RenderTheme::activeSelectionBackgroundColor() const
diff --git a/WebCore/rendering/RenderTheme.h b/WebCore/rendering/RenderTheme.h
index 47217ca..1e0b54c 100644
--- a/WebCore/rendering/RenderTheme.h
+++ b/WebCore/rendering/RenderTheme.h
@@ -1,7 +1,7 @@
/*
* This file is part of the theme implementation for form controls in WebCore.
*
- * Copyright (C) 2005, 2006, 2007, 2008 Apple Computer, Inc.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -165,11 +165,6 @@ public:
virtual int popupInternalPaddingBottom(RenderStyle*) const { return 0; }
virtual bool popupOptionSupportsTextIndent() const { return false; }
- virtual int buttonInternalPaddingLeft() const { return 0; }
- virtual int buttonInternalPaddingRight() const { return 0; }
- virtual int buttonInternalPaddingTop() const { return 0; }
- virtual int buttonInternalPaddingBottom() const { return 0; }
-
virtual ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) { return RegularScrollbar; }
// Method for painting the caps lock indicator
@@ -191,6 +186,9 @@ public:
virtual String formatMediaControlsTime(float time) const;
virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const;
+
+ // Returns the media volume slider container's offset from the mute button.
+ virtual IntPoint volumeSliderOffsetFromMuteButton(Node*, const IntSize&) const;
#endif
#if ENABLE(METER_TAG)
diff --git a/WebCore/rendering/RenderThemeMac.h b/WebCore/rendering/RenderThemeMac.h
index 44d9189..95661b8 100644
--- a/WebCore/rendering/RenderThemeMac.h
+++ b/WebCore/rendering/RenderThemeMac.h
@@ -1,7 +1,7 @@
/*
* This file is part of the theme implementation for form controls in WebCore.
*
- * Copyright (C) 2005 Apple Computer, Inc.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -156,12 +156,16 @@ protected:
virtual bool paintMediaControlsBackground(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaTimeRemaining(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&);
// Media controls
virtual String extraMediaControlsStyleSheet();
virtual bool shouldRenderMediaControlPart(ControlPart, Element*);
virtual void adjustMediaSliderThumbSize(RenderObject*) const;
+ virtual IntPoint volumeSliderOffsetFromMuteButton(Node*, const IntSize&) const;
#endif
private:
diff --git a/WebCore/rendering/RenderThemeMac.mm b/WebCore/rendering/RenderThemeMac.mm
index 993bc72..bbf6906 100644
--- a/WebCore/rendering/RenderThemeMac.mm
+++ b/WebCore/rendering/RenderThemeMac.mm
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 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
@@ -1686,14 +1686,16 @@ void RenderThemeMac::adjustSliderThumbSize(RenderObject* o) const
void RenderThemeMac::adjustMediaSliderThumbSize(RenderObject* o) const
{
- if (o->style()->appearance() == MediaSliderThumbPart) {
+ ControlPart part = o->style()->appearance();
+
+ if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) {
int width = mediaSliderThumbWidth;
int height = mediaSliderThumbHeight;
if (mediaControllerTheme() == MediaControllerThemeQuickTime) {
CGSize size;
- wkMeasureMediaUIPart(MediaSliderThumb, MediaControllerThemeQuickTime, NULL, &size);
+ wkMeasureMediaUIPart(part == MediaSliderThumbPart ? MediaSliderThumb : MediaVolumeSliderThumb, MediaControllerThemeQuickTime, NULL, &size);
width = size.width;
height = size.height;
}
@@ -1913,13 +1915,46 @@ bool RenderThemeMac::paintMediaTimeRemaining(RenderObject* o, const PaintInfo& p
return false;
}
+bool RenderThemeMac::paintMediaVolumeSliderContainer(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
+{
+ Node* node = o->node();
+ if (!node)
+ return false;
+
+ LocalCurrentGraphicsContext localContext(paintInfo.context);
+ wkDrawMediaUIPart(MediaVolumeSliderContainer, mediaControllerTheme(), paintInfo.context->platformContext(), r, getMediaUIPartStateFlags(node));
+ return false;
+}
+
+bool RenderThemeMac::paintMediaVolumeSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
+{
+ Node* node = o->node();
+ if (!node)
+ return false;
+
+ LocalCurrentGraphicsContext localContext(paintInfo.context);
+ wkDrawMediaUIPart(MediaVolumeSlider, mediaControllerTheme(), paintInfo.context->platformContext(), r, getMediaUIPartStateFlags(node));
+ return false;
+}
+
+bool RenderThemeMac::paintMediaVolumeSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
+{
+ Node* node = o->node();
+ if (!node)
+ return false;
+
+ LocalCurrentGraphicsContext localContext(paintInfo.context);
+ wkDrawMediaUIPart(MediaVolumeSliderThumb, mediaControllerTheme(), paintInfo.context->platformContext(), r, getMediaUIPartStateFlags(node));
+ return false;
+}
+
String RenderThemeMac::extraMediaControlsStyleSheet()
{
#if PLATFORM(MAC)
if (mediaControllerTheme() == MediaControllerThemeQuickTime)
return String(mediaControlsQuickTimeUserAgentStyleSheet, sizeof(mediaControlsQuickTimeUserAgentStyleSheet));
- else
- return String();
+
+ return String();
#else
ASSERT_NOT_REACHED();
return String();
@@ -1928,16 +1963,38 @@ String RenderThemeMac::extraMediaControlsStyleSheet()
bool RenderThemeMac::shouldRenderMediaControlPart(ControlPart part, Element* element)
{
- if (part == MediaToggleClosedCaptionsButtonPart) {
-
+ switch (part) {
+ case MediaVolumeSliderContainerPart:
+ case MediaVolumeSliderPart:
+ case MediaVolumeSliderMuteButtonPart:
+ case MediaVolumeSliderThumbPart: {
+ HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(element);
+ return mediaControllerTheme() == MediaControllerThemeQuickTime && mediaElement->hasAudio();
+ }
+ case MediaToggleClosedCaptionsButtonPart:
// We rely on QTKit to render captions so don't enable the button unless it will be able to do so.
if (!element->hasTagName(videoTag))
return false;
+ default:
+ break;
}
return RenderTheme::shouldRenderMediaControlPart(part, element);
}
+IntPoint RenderThemeMac::volumeSliderOffsetFromMuteButton(Node* muteButton, const IntSize& size) const
+{
+ static const int xOffset = -4;
+ static const int yOffset = 5;
+
+ float zoomLevel = muteButton->renderer()->style()->effectiveZoom();
+ int y = yOffset * zoomLevel + muteButton->renderBox()->offsetHeight() - size.height();
+ FloatPoint absPoint = muteButton->renderer()->localToAbsolute(FloatPoint(muteButton->renderBox()->offsetLeft(), y), true, true);
+ if (absPoint.y() < 0)
+ y = muteButton->renderBox()->height();
+ return IntPoint(xOffset * zoomLevel, y);
+}
+
#endif // ENABLE(VIDEO)
NSPopUpButtonCell* RenderThemeMac::popupButton() const
diff --git a/WebCore/rendering/RenderThemeWin.cpp b/WebCore/rendering/RenderThemeWin.cpp
index 38daf98..45965e6 100644
--- a/WebCore/rendering/RenderThemeWin.cpp
+++ b/WebCore/rendering/RenderThemeWin.cpp
@@ -761,26 +761,6 @@ void RenderThemeWin::adjustSliderThumbSize(RenderObject* o) const
#endif
}
-int RenderThemeWin::buttonInternalPaddingLeft() const
-{
- return 3;
-}
-
-int RenderThemeWin::buttonInternalPaddingRight() const
-{
- return 3;
-}
-
-int RenderThemeWin::buttonInternalPaddingTop() const
-{
- return 1;
-}
-
-int RenderThemeWin::buttonInternalPaddingBottom() const
-{
- return 1;
-}
-
bool RenderThemeWin::paintSearchField(RenderObject* o, const PaintInfo& i, const IntRect& r)
{
return paintTextField(o, i, r);
diff --git a/WebCore/rendering/RenderThemeWin.h b/WebCore/rendering/RenderThemeWin.h
index 2e80032..0147900 100644
--- a/WebCore/rendering/RenderThemeWin.h
+++ b/WebCore/rendering/RenderThemeWin.h
@@ -94,11 +94,6 @@ public:
virtual bool popupOptionSupportsTextIndent() const { return true; }
- virtual int buttonInternalPaddingLeft() const;
- virtual int buttonInternalPaddingRight() const;
- virtual int buttonInternalPaddingTop() const;
- virtual int buttonInternalPaddingBottom() const;
-
virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&);
diff --git a/WebCore/rendering/RenderThemeWince.cpp b/WebCore/rendering/RenderThemeWince.cpp
index 4fd6de9..117601b 100644
--- a/WebCore/rendering/RenderThemeWince.cpp
+++ b/WebCore/rendering/RenderThemeWince.cpp
@@ -528,26 +528,6 @@ bool RenderThemeWince::paintSliderThumb(RenderObject* o, const PaintInfo& i, con
return rc;
}
-int RenderThemeWince::buttonInternalPaddingLeft() const
-{
- return 3;
-}
-
-int RenderThemeWince::buttonInternalPaddingRight() const
-{
- return 3;
-}
-
-int RenderThemeWince::buttonInternalPaddingTop() const
-{
- return 1;
-}
-
-int RenderThemeWince::buttonInternalPaddingBottom() const
-{
- return 1;
-}
-
void RenderThemeWince::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
{
const int padding = 1;
@@ -665,4 +645,3 @@ bool RenderThemeWince::paintMediaSliderThumb(RenderObject* o, const PaintInfo& p
#endif
}
-
diff --git a/WebCore/rendering/RenderThemeWince.h b/WebCore/rendering/RenderThemeWince.h
index 61a4ac5..c1b57d4 100644
--- a/WebCore/rendering/RenderThemeWince.h
+++ b/WebCore/rendering/RenderThemeWince.h
@@ -93,11 +93,6 @@ namespace WebCore {
virtual bool popupOptionSupportsTextIndent() const { return true; }
- virtual int buttonInternalPaddingLeft() const;
- virtual int buttonInternalPaddingRight() const;
- virtual int buttonInternalPaddingTop() const;
- virtual int buttonInternalPaddingBottom() const;
-
virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&);
diff --git a/WebCore/rendering/RenderView.cpp b/WebCore/rendering/RenderView.cpp
index eb920a2..232dd5d 100644
--- a/WebCore/rendering/RenderView.cpp
+++ b/WebCore/rendering/RenderView.cpp
@@ -27,6 +27,7 @@
#include "Frame.h"
#include "FrameView.h"
#include "GraphicsContext.h"
+#include "HTMLFrameOwnerElement.h"
#include "HitTestResult.h"
#include "RenderLayer.h"
#include "RenderSelectionInfo.h"
diff --git a/WebCore/rendering/RenderWidget.cpp b/WebCore/rendering/RenderWidget.cpp
index bba14e2..bebe6c8 100644
--- a/WebCore/rendering/RenderWidget.cpp
+++ b/WebCore/rendering/RenderWidget.cpp
@@ -32,6 +32,10 @@
#include "RenderView.h"
#include "RenderWidgetProtector.h"
+#if USE(ACCELERATED_COMPOSITING)
+#include "RenderLayerBacking.h"
+#endif
+
using namespace std;
namespace WebCore {
@@ -171,6 +175,12 @@ bool RenderWidget::setWidgetGeometry(const IntRect& frame)
RenderWidgetProtector protector(this);
RefPtr<Node> protectedNode(node());
m_widget->setFrameRect(frame);
+
+#if USE(ACCELERATED_COMPOSITING)
+ if (hasLayer() && layer()->isComposited())
+ layer()->backing()->updateAfterWidgetResize();
+#endif
+
return boundsChanged;
}
diff --git a/WebCore/rendering/RootInlineBox.h b/WebCore/rendering/RootInlineBox.h
index 86f633d..ff98f24 100644
--- a/WebCore/rendering/RootInlineBox.h
+++ b/WebCore/rendering/RootInlineBox.h
@@ -118,7 +118,7 @@ public:
{
ASSERT(!isDirty());
if (!m_floats)
- m_floats.set(new Vector<RenderBox*>());
+ m_floats= adoptPtr(new Vector<RenderBox*>);
return *m_floats;
}
diff --git a/WebCore/rendering/SVGRenderSupport.cpp b/WebCore/rendering/SVGRenderSupport.cpp
index a328031..0d4a42b 100644
--- a/WebCore/rendering/SVGRenderSupport.cpp
+++ b/WebCore/rendering/SVGRenderSupport.cpp
@@ -32,12 +32,14 @@
#include "ImageBuffer.h"
#include "NodeRenderStyle.h"
#include "RenderLayer.h"
+#include "RenderPath.h"
#include "RenderSVGContainer.h"
#include "RenderSVGResource.h"
#include "RenderSVGResourceClipper.h"
#include "RenderSVGResourceFilter.h"
#include "RenderSVGResourceMarker.h"
#include "RenderSVGResourceMasker.h"
+#include "RenderSVGRoot.h"
#include "SVGStyledElement.h"
#include "TransformState.h"
#include <wtf/UnusedParam.h>
@@ -230,25 +232,42 @@ FloatRect SVGRenderSupport::computeContainerBoundingBox(const RenderObject* cont
return boundingBox;
}
+static inline RenderSVGRoot* svgRootTreeObject(RenderObject* start)
+{
+ while (start && !start->isSVGRoot())
+ start = start->parent();
+
+ ASSERT(start);
+ ASSERT(start->isSVGRoot());
+ return toRenderSVGRoot(start);
+}
+
void SVGRenderSupport::layoutChildren(RenderObject* start, bool selfNeedsLayout)
{
+ bool layoutSizeChanged = svgRootTreeObject(start)->isLayoutSizeChanged();
+
for (RenderObject* child = start->firstChild(); child; child = child->nextSibling()) {
- // Only force our kids to layout if we're being asked to relayout as a result of a parent changing
- // FIXME: We should be able to skip relayout of non-relative kids when only bounds size has changed
- // that's a possible future optimization using LayoutState
- // http://bugs.webkit.org/show_bug.cgi?id=15391
bool needsLayout = selfNeedsLayout;
- if (!needsLayout) {
+
+ if (layoutSizeChanged) {
+ // When selfNeedsLayout is false and the layout size changed, we have to check whether this child uses relative lengths
if (SVGElement* element = child->node()->isSVGElement() ? static_cast<SVGElement*>(child->node()) : 0) {
- if (element->isStyled())
- needsLayout = static_cast<SVGStyledElement*>(element)->hasRelativeLengths();
+ if (element->isStyled() && static_cast<SVGStyledElement*>(element)->hasRelativeLengths()) {
+ // When the layout size changed and when using relative values tell the RenderPath to update its Path object
+ if (child->isRenderPath())
+ toRenderPath(child)->setNeedsPathUpdate();
+
+ needsLayout = true;
+ }
}
}
- if (needsLayout)
+ if (needsLayout) {
child->setNeedsLayout(true, false);
+ child->layout();
+ } else
+ child->layoutIfNeeded();
- child->layoutIfNeeded();
ASSERT(!child->needsLayout());
}
}
diff --git a/WebCore/rendering/style/RenderStyle.cpp b/WebCore/rendering/style/RenderStyle.cpp
index a386fc6..ce6c98e 100644
--- a/WebCore/rendering/style/RenderStyle.cpp
+++ b/WebCore/rendering/style/RenderStyle.cpp
@@ -586,7 +586,7 @@ void RenderStyle::setContent(PassRefPtr<StyleImage> image, bool add)
ContentData* newContentData;
if (reuseContent && content) {
content->clear();
- newContentData = content.release();
+ newContentData = content.leakPtr();
} else
newContentData = new ContentData;
@@ -622,7 +622,7 @@ void RenderStyle::setContent(PassRefPtr<StringImpl> s, bool add)
ContentData* newContentData = 0;
if (reuseContent && content) {
content->clear();
- newContentData = content.release();
+ newContentData = content.leakPtr();
} else
newContentData = new ContentData;
@@ -648,7 +648,7 @@ void RenderStyle::setContent(CounterContent* c, bool add)
ContentData* newContentData = 0;
if (reuseContent && content) {
content->clear();
- newContentData = content.release();
+ newContentData = content.leakPtr();
} else
newContentData = new ContentData;
@@ -732,7 +732,7 @@ void RenderStyle::setBoxShadow(ShadowData* shadowData, bool add)
return;
}
- shadowData->setNext(rareData->m_boxShadow.release());
+ shadowData->setNext(rareData->m_boxShadow.leakPtr());
rareData->m_boxShadow.set(shadowData);
}
diff --git a/WebCore/rendering/style/RenderStyle.h b/WebCore/rendering/style/RenderStyle.h
index 748842b..782508e 100644
--- a/WebCore/rendering/style/RenderStyle.h
+++ b/WebCore/rendering/style/RenderStyle.h
@@ -1029,8 +1029,8 @@ public:
rareNonInheritedData.access()->m_transitions.clear();
}
- void inheritAnimations(const AnimationList* parent) { rareNonInheritedData.access()->m_animations.set(parent ? new AnimationList(*parent) : 0); }
- void inheritTransitions(const AnimationList* parent) { rareNonInheritedData.access()->m_transitions.set(parent ? new AnimationList(*parent) : 0); }
+ void inheritAnimations(const AnimationList* parent) { rareNonInheritedData.access()->m_animations = parent ? adoptPtr(new AnimationList(*parent)) : PassOwnPtr<AnimationList>(); }
+ void inheritTransitions(const AnimationList* parent) { rareNonInheritedData.access()->m_transitions = parent ? adoptPtr(new AnimationList(*parent)) : PassOwnPtr<AnimationList>(); }
void adjustAnimations();
void adjustTransitions();
diff --git a/WebCore/rendering/style/RenderStyleConstants.h b/WebCore/rendering/style/RenderStyleConstants.h
index dd82433..70b128b 100644
--- a/WebCore/rendering/style/RenderStyleConstants.h
+++ b/WebCore/rendering/style/RenderStyleConstants.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, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
* Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
*
@@ -70,7 +70,8 @@ enum PseudoId {
NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR, FILE_UPLOAD_BUTTON, INPUT_PLACEHOLDER,
SLIDER_THUMB, 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_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY,
+ 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,
diff --git a/WebCore/rendering/style/SVGRenderStyleDefs.h b/WebCore/rendering/style/SVGRenderStyleDefs.h
index 207cefa..5173894 100644
--- a/WebCore/rendering/style/SVGRenderStyleDefs.h
+++ b/WebCore/rendering/style/SVGRenderStyleDefs.h
@@ -29,10 +29,12 @@
#define SVGRenderStyleDefs_h
#if ENABLE(SVG)
+
#include "Color.h"
#include "PlatformString.h"
#include "ShadowData.h"
#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
@@ -67,8 +69,8 @@
#define SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL_OWNPTR(Data, Group, Variable, Type, Name, Initial) \
Data* Name() const { return Group->Variable.get(); } \
- void set##Type(Data* obj) { \
- Group.access()->Variable.set(obj); \
+ void set##Type(PassOwnPtr<Data> obj) { \
+ Group.access()->Variable = obj; \
} \
static Data* initial##Type() { return Initial; }
@@ -300,4 +302,5 @@ namespace WebCore {
} // namespace WebCore
#endif // ENABLE(SVG)
+
#endif // SVGRenderStyleDefs_h
diff --git a/WebCore/storage/IDBAny.cpp b/WebCore/storage/IDBAny.cpp
index 73b0d74..9a18980 100644
--- a/WebCore/storage/IDBAny.cpp
+++ b/WebCore/storage/IDBAny.cpp
@@ -62,6 +62,12 @@ PassRefPtr<IDBIndexRequest> IDBAny::idbIndexRequest()
return m_idbIndexRequest;
}
+PassRefPtr<IDBKey> IDBAny::idbKey()
+{
+ ASSERT(m_type == IDBKeyType);
+ return m_idbKey;
+}
+
PassRefPtr<IDBObjectStoreRequest> IDBAny::idbObjectStoreRequest()
{
ASSERT(m_type == IDBObjectStoreRequestType);
@@ -100,6 +106,13 @@ void IDBAny::set(PassRefPtr<IDBIndexRequest> value)
m_idbIndexRequest = value;
}
+void IDBAny::set(PassRefPtr<IDBKey> value)
+{
+ ASSERT(m_type == UndefinedType);
+ m_type = IDBKeyType;
+ m_idbKey = value;
+}
+
void IDBAny::set(PassRefPtr<IDBObjectStoreRequest> value)
{
ASSERT(m_type == UndefinedType);
diff --git a/WebCore/storage/IDBAny.h b/WebCore/storage/IDBAny.h
index a734d13..ff2d6b9 100644
--- a/WebCore/storage/IDBAny.h
+++ b/WebCore/storage/IDBAny.h
@@ -36,6 +36,7 @@ namespace WebCore {
class IDBDatabaseRequest;
class IDBIndexRequest;
+class IDBKey;
class IDBObjectStoreRequest;
class IndexedDatabaseRequest;
class SerializedScriptValue;
@@ -50,6 +51,7 @@ public:
NullType,
IDBDatabaseRequestType,
IDBIndexRequestType,
+ IDBKeyType,
IDBObjectStoreRequestType,
IndexedDatabaseRequestType,
SerializedScriptValueType
@@ -59,6 +61,7 @@ public:
// Use type() to figure out which one of these you're allowed to call.
PassRefPtr<IDBDatabaseRequest> idbDatabaseRequest();
PassRefPtr<IDBIndexRequest> idbIndexRequest();
+ PassRefPtr<IDBKey> idbKey();
PassRefPtr<IDBObjectStoreRequest> idbObjectStoreRequest();
PassRefPtr<IndexedDatabaseRequest> indexedDatabaseRequest();
PassRefPtr<SerializedScriptValue> serializedScriptValue();
@@ -67,6 +70,7 @@ public:
void set(); // For "null".
void set(PassRefPtr<IDBDatabaseRequest>);
void set(PassRefPtr<IDBIndexRequest>);
+ void set(PassRefPtr<IDBKey>);
void set(PassRefPtr<IDBObjectStoreRequest>);
void set(PassRefPtr<IndexedDatabaseRequest>);
void set(PassRefPtr<SerializedScriptValue>);
@@ -79,6 +83,7 @@ private:
// Only one of the following should ever be in use at any given time.
RefPtr<IDBDatabaseRequest> m_idbDatabaseRequest;
RefPtr<IDBIndexRequest> m_idbIndexRequest;
+ RefPtr<IDBKey> m_idbKey;
RefPtr<IDBObjectStoreRequest> m_idbObjectStoreRequest;
RefPtr<IndexedDatabaseRequest> m_indexedDatabaseRequest;
RefPtr<SerializedScriptValue> m_serializedScriptValue;
diff --git a/WebCore/storage/IDBAny.idl b/WebCore/storage/IDBAny.idl
index 59da1c7..19d8424 100644
--- a/WebCore/storage/IDBAny.idl
+++ b/WebCore/storage/IDBAny.idl
@@ -10,9 +10,6 @@
* 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
diff --git a/WebCore/storage/IDBDatabaseRequest.cpp b/WebCore/storage/IDBDatabaseRequest.cpp
index c620279..3168d06 100644
--- a/WebCore/storage/IDBDatabaseRequest.cpp
+++ b/WebCore/storage/IDBDatabaseRequest.cpp
@@ -40,6 +40,8 @@ IDBDatabaseRequest::IDBDatabaseRequest(PassRefPtr<IDBDatabase> database)
: m_database(database)
{
m_this = IDBAny::create();
+ // We pass a reference to this object before it can be adopted.
+ relaxAdoptionRequirement();
m_this->set(this);
}
diff --git a/WebCore/storage/IDBDatabaseRequest.h b/WebCore/storage/IDBDatabaseRequest.h
index 6b9e107..23b1ecc 100644
--- a/WebCore/storage/IDBDatabaseRequest.h
+++ b/WebCore/storage/IDBDatabaseRequest.h
@@ -55,7 +55,7 @@ public:
String version() const { return m_database->version(); }
PassRefPtr<DOMStringList> objectStores() const { return m_database->objectStores(); }
- PassRefPtr<IDBRequest> createObjectStore(ScriptExecutionContext*, const String& name, const String& keyPath = "", bool autoIncrement = false);
+ PassRefPtr<IDBRequest> createObjectStore(ScriptExecutionContext*, const String& name, const String& keyPath = String(), bool autoIncrement = false);
PassRefPtr<IDBObjectStoreRequest> objectStore(const String& name, unsigned short mode = 0); // FIXME: Use constant rather than 0.
PassRefPtr<IDBRequest> removeObjectStore(ScriptExecutionContext*, const String& name);
diff --git a/WebCore/storage/IDBDatabaseRequest.idl b/WebCore/storage/IDBDatabaseRequest.idl
index c018bbf..548b221 100644
--- a/WebCore/storage/IDBDatabaseRequest.idl
+++ b/WebCore/storage/IDBDatabaseRequest.idl
@@ -36,7 +36,7 @@ module storage {
// FIXME: Add transaction.
// FIXME: Add setVersion.
- [CallWith=ScriptExecutionContext] IDBRequest createObjectStore(in DOMString name, in [Optional] DOMString path, in [Optional] boolean autoIncrement);
+ [CallWith=ScriptExecutionContext] IDBRequest createObjectStore(in DOMString name, in [Optional, ConvertNullToNullString] DOMString keyPath, in [Optional] boolean autoIncrement);
// FIXME: objectStore needs to be able to raise an IDBDatabaseException.
IDBObjectStoreRequest objectStore(in DOMString name, in [Optional] unsigned short mode);
[CallWith=ScriptExecutionContext] IDBRequest removeObjectStore(in DOMString name);
diff --git a/WebCore/storage/IDBKey.cpp b/WebCore/storage/IDBKey.cpp
index 36a83a6..8ec5dfd 100644
--- a/WebCore/storage/IDBKey.cpp
+++ b/WebCore/storage/IDBKey.cpp
@@ -26,10 +26,10 @@
#include "config.h"
#include "IDBKey.h"
-#include "SerializedScriptValue.h"
-
#if ENABLE(INDEXED_DATABASE)
+#include "SerializedScriptValue.h"
+
namespace WebCore {
IDBKey::IDBKey()
@@ -37,10 +37,6 @@ IDBKey::IDBKey()
{
}
-IDBKey::~IDBKey()
-{
-}
-
IDBKey::IDBKey(int32_t number)
: m_type(NumberType)
, m_number(number)
diff --git a/WebCore/storage/IDBKey.h b/WebCore/storage/IDBKey.h
index 0cd205b..a84ea6a 100644
--- a/WebCore/storage/IDBKey.h
+++ b/WebCore/storage/IDBKey.h
@@ -27,9 +27,7 @@
#define IDBKey_h
#include "PlatformString.h"
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
+#include <wtf/Forward.h>
#if ENABLE(INDEXED_DATABASE)
@@ -50,9 +48,9 @@ public:
{
return adoptRef(new IDBKey(string));
}
- ~IDBKey() { }
+ ~IDBKey();
- // In order of the least to the most precident in terms of sort order.
+ // In order of the least to the highest precedent in terms of sort order.
enum Type {
NullType = 0,
StringType,
diff --git a/WebCore/storage/IDBKeyRange.h b/WebCore/storage/IDBKeyRange.h
index 58c1399..4c5efe2 100644
--- a/WebCore/storage/IDBKeyRange.h
+++ b/WebCore/storage/IDBKeyRange.h
@@ -29,13 +29,12 @@
#if ENABLE(INDEXED_DATABASE)
#include "IDBAny.h"
+#include "SerializedScriptValue.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
namespace WebCore {
-class SerializedScriptValue;
-
class IDBKeyRange : public RefCounted<IDBKeyRange> {
public:
// Keep in sync with what's in the .idl file.
diff --git a/WebCore/storage/IDBKeyTree.h b/WebCore/storage/IDBKeyTree.h
index 0e39e77..70d6f83 100644
--- a/WebCore/storage/IDBKeyTree.h
+++ b/WebCore/storage/IDBKeyTree.h
@@ -26,12 +26,12 @@
#ifndef IDBKeyTree_h
#define IDBKeyTree_h
+#if ENABLE(INDEXED_DATABASE)
+
#include "IDBKey.h"
#include <wtf/AVLTree.h>
#include <wtf/Vector.h>
-#if ENABLE(INDEXED_DATABASE)
-
namespace WebCore {
template <typename ValueType>
@@ -43,9 +43,9 @@ public:
}
~IDBKeyTree();
- PassRefPtr<ValueType> get(PassRefPtr<IDBKey> key);
- void put(PassRefPtr<IDBKey> key, PassRefPtr<ValueType> value);
- void remove(PassRefPtr<IDBKey> key);
+ ValueType* get(IDBKey* key);
+ void put(IDBKey* key, ValueType* value);
+ void remove(IDBKey* key);
private:
struct TreeNode {
@@ -118,34 +118,30 @@ int IDBKeyTree<ValueType>::AVLTreeAbstractor::compare_key_key(key va, key vb)
}
template <typename ValueType>
-PassRefPtr<ValueType> IDBKeyTree<ValueType>::get(PassRefPtr<IDBKey> prpKey)
+ValueType* IDBKeyTree<ValueType>::get(IDBKey* key)
{
- RefPtr<IDBKey> key = prpKey;
- TreeNode* node = m_tree.search(key.get());
+ TreeNode* node = m_tree.search(key);
if (!node)
return 0;
- return node->value;
+ return node->value.get();
}
-
template <typename ValueType>
-void IDBKeyTree<ValueType>::put(PassRefPtr<IDBKey> prpKey, PassRefPtr<ValueType> value)
+void IDBKeyTree<ValueType>::put(IDBKey* key, ValueType* value)
{
- RefPtr<IDBKey> key = prpKey;
- TreeNode* node = m_tree.search(key.get());
+ TreeNode* node = m_tree.search(key);
if (!node) {
node = new TreeNode();
- node->key = key.release();
+ node->key = key;
m_tree.insert(node);
}
node->value = value;
}
template <typename ValueType>
-void IDBKeyTree<ValueType>::remove(PassRefPtr<IDBKey> prpKey)
+void IDBKeyTree<ValueType>::remove(IDBKey* key)
{
- RefPtr<IDBKey> key = prpKey;
- TreeNode* node = m_tree.remove(key.get());
+ TreeNode* node = m_tree.remove(key);
if (node)
delete node;
}
diff --git a/WebCore/storage/IDBObjectStore.h b/WebCore/storage/IDBObjectStore.h
index 837b65a..e78e62a 100644
--- a/WebCore/storage/IDBObjectStore.h
+++ b/WebCore/storage/IDBObjectStore.h
@@ -36,6 +36,8 @@ namespace WebCore {
class DOMStringList;
class IDBCallbacks;
class IDBIndex;
+class IDBKey;
+class SerializedScriptValue;
class IDBObjectStore : public ThreadSafeShared<IDBObjectStore> {
public:
@@ -45,6 +47,10 @@ public:
virtual String keyPath() const = 0;
virtual PassRefPtr<DOMStringList> indexNames() const = 0;
+ virtual void get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>) = 0;
+ virtual void put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>) = 0;
+ virtual void remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>) = 0;
+
virtual void createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks>) = 0;
virtual PassRefPtr<IDBIndex> index(const String& name) = 0;
virtual void removeIndex(const String& name, PassRefPtr<IDBCallbacks>) = 0;
diff --git a/WebCore/storage/IDBObjectStoreImpl.cpp b/WebCore/storage/IDBObjectStoreImpl.cpp
index b84ceb2..d678400 100755
--- a/WebCore/storage/IDBObjectStoreImpl.cpp
+++ b/WebCore/storage/IDBObjectStoreImpl.cpp
@@ -27,9 +27,11 @@
#include "IDBObjectStoreImpl.h"
#include "DOMStringList.h"
+#include "IDBBindingUtilities.h"
#include "IDBCallbacks.h"
#include "IDBDatabaseException.h"
#include "IDBIndexImpl.h"
+#include "IDBKeyTree.h"
#if ENABLE(INDEXED_DATABASE)
@@ -43,6 +45,7 @@ IDBObjectStoreImpl::IDBObjectStoreImpl(const String& name, const String& keyPath
: m_name(name)
, m_keyPath(keyPath)
, m_autoIncrement(autoIncrement)
+ , m_tree(Tree::create())
{
}
@@ -54,6 +57,50 @@ PassRefPtr<DOMStringList> IDBObjectStoreImpl::indexNames() const
return indexNames.release();
}
+void IDBObjectStoreImpl::get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks)
+{
+ RefPtr<SerializedScriptValue> value = m_tree->get(key.get());
+ if (!value) {
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::NOT_FOUND_ERR, "Key does not exist in the object store."));
+ return;
+ }
+ callbacks->onSuccess(value.get());
+}
+
+void IDBObjectStoreImpl::put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> prpKey, bool addOnly, PassRefPtr<IDBCallbacks> callbacks)
+{
+ RefPtr<IDBKey> key = prpKey;
+
+ if (!m_keyPath.isNull()) {
+ if (key) {
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "A key was supplied for an objectStore that has a keyPath."));
+ return;
+ }
+ ASSERT_NOT_REACHED();
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "FIXME: keyPath not yet supported."));
+ return;
+ }
+
+ if (!key) {
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "No key supplied."));
+ return;
+ }
+
+ if (addOnly && m_tree->get(key.get())) {
+ callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::CONSTRAINT_ERR, "Key already exists in the object store."));
+ return;
+ }
+
+ m_tree->put(key.get(), value.get());
+ callbacks->onSuccess(key.get());
+}
+
+void IDBObjectStoreImpl::remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks)
+{
+ m_tree->remove(key.get());
+ callbacks->onSuccess();
+}
+
void IDBObjectStoreImpl::createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks> callbacks)
{
if (m_indexes.contains(name)) {
diff --git a/WebCore/storage/IDBObjectStoreImpl.h b/WebCore/storage/IDBObjectStoreImpl.h
index 89a06db..c4d2eb8 100644
--- a/WebCore/storage/IDBObjectStoreImpl.h
+++ b/WebCore/storage/IDBObjectStoreImpl.h
@@ -34,18 +34,24 @@
namespace WebCore {
+template <typename ValueType> class IDBKeyTree;
+
class IDBObjectStoreImpl : public IDBObjectStore {
public:
static PassRefPtr<IDBObjectStore> create(const String& name, const String& keyPath, bool autoIncrement)
{
return adoptRef(new IDBObjectStoreImpl(name, keyPath, autoIncrement));
}
- virtual ~IDBObjectStoreImpl();
+ ~IDBObjectStoreImpl();
String name() const { return m_name; }
String keyPath() const { return m_keyPath; }
PassRefPtr<DOMStringList> indexNames() const;
+ void get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>);
+ void put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>);
+ void remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>);
+
void createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks>);
PassRefPtr<IDBIndex> index(const String& name);
void removeIndex(const String& name, PassRefPtr<IDBCallbacks>);
@@ -59,6 +65,9 @@ private:
typedef HashMap<String, RefPtr<IDBIndex> > IndexMap;
IndexMap m_indexes;
+
+ typedef IDBKeyTree<SerializedScriptValue> Tree;
+ RefPtr<Tree> m_tree;
};
} // namespace WebCore
diff --git a/WebCore/storage/IDBObjectStoreRequest.cpp b/WebCore/storage/IDBObjectStoreRequest.cpp
index b2c36dc..fdd498b 100644
--- a/WebCore/storage/IDBObjectStoreRequest.cpp
+++ b/WebCore/storage/IDBObjectStoreRequest.cpp
@@ -29,6 +29,7 @@
#include "DOMStringList.h"
#include "IDBAny.h"
#include "IDBIndexRequest.h"
+#include "IDBKey.h"
#include "SerializedScriptValue.h"
#include <wtf/UnusedParam.h>
@@ -36,10 +37,12 @@
namespace WebCore {
-IDBObjectStoreRequest::IDBObjectStoreRequest(PassRefPtr<IDBObjectStore> idbObjectStore)
+IDBObjectStoreRequest::IDBObjectStoreRequest(PassRefPtr<IDBObjectStore> idbObjectStore)
: m_objectStore(idbObjectStore)
{
m_this = IDBAny::create();
+ // We pass a reference to this object before it can be adopted.
+ relaxAdoptionRequirement();
m_this->set(this);
}
@@ -58,47 +61,32 @@ PassRefPtr<DOMStringList> IDBObjectStoreRequest::indexNames() const
return m_objectStore->indexNames();
}
-PassRefPtr<IDBRequest> IDBObjectStoreRequest::get(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> key)
+PassRefPtr<IDBRequest> IDBObjectStoreRequest::get(ScriptExecutionContext* context, PassRefPtr<IDBKey> key)
{
- // FIXME: implement
- UNUSED_PARAM(context);
- UNUSED_PARAM(key);
- return 0;
-}
-
-PassRefPtr<IDBRequest> IDBObjectStoreRequest::add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key)
-{
- // FIXME: implement
- UNUSED_PARAM(context);
- UNUSED_PARAM(value);
- UNUSED_PARAM(key);
- return 0;
+ RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
+ m_objectStore->get(key, request);
+ return request;
}
-PassRefPtr<IDBRequest> IDBObjectStoreRequest::modify(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key)
+PassRefPtr<IDBRequest> IDBObjectStoreRequest::add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key)
{
- // FIXME: implement
- UNUSED_PARAM(context);
- UNUSED_PARAM(value);
- UNUSED_PARAM(key);
- return 0;
+ RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
+ m_objectStore->put(value, key, true, request);
+ return request;
}
-PassRefPtr<IDBRequest> IDBObjectStoreRequest::addOrModify(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key)
+PassRefPtr<IDBRequest> IDBObjectStoreRequest::put(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key)
{
- // FIXME: implement
- UNUSED_PARAM(context);
- UNUSED_PARAM(value);
- UNUSED_PARAM(key);
- return 0;
+ RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
+ m_objectStore->put(value, key, false, request);
+ return request;
}
-PassRefPtr<IDBRequest> IDBObjectStoreRequest::remove(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> key)
+PassRefPtr<IDBRequest> IDBObjectStoreRequest::remove(ScriptExecutionContext* context, PassRefPtr<IDBKey> key)
{
- // FIXME: implement
- UNUSED_PARAM(context);
- UNUSED_PARAM(key);
- return 0;
+ RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
+ m_objectStore->remove(key, request);
+ return request;
}
PassRefPtr<IDBRequest> IDBObjectStoreRequest::createIndex(ScriptExecutionContext* context, const String& name, const String& keyPath, bool unique)
diff --git a/WebCore/storage/IDBObjectStoreRequest.h b/WebCore/storage/IDBObjectStoreRequest.h
index f1a9f5b..af752f5 100644
--- a/WebCore/storage/IDBObjectStoreRequest.h
+++ b/WebCore/storage/IDBObjectStoreRequest.h
@@ -40,6 +40,7 @@ namespace WebCore {
class DOMStringList;
class IDBAny;
class IDBIndexRequest;
+class IDBKey;
class SerializedScriptValue;
class IDBObjectStoreRequest : public RefCounted<IDBObjectStoreRequest> {
@@ -54,11 +55,10 @@ public:
String keyPath() const;
PassRefPtr<DOMStringList> indexNames() const;
- PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> key);
- PassRefPtr<IDBRequest> add(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key = 0);
- PassRefPtr<IDBRequest> modify(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key = 0);
- PassRefPtr<IDBRequest> addOrModify(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key = 0);
- PassRefPtr<IDBRequest> remove(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> key);
+ PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<IDBKey> key);
+ PassRefPtr<IDBRequest> add(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key = 0);
+ PassRefPtr<IDBRequest> put(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key = 0);
+ PassRefPtr<IDBRequest> remove(ScriptExecutionContext*, PassRefPtr<IDBKey> key);
PassRefPtr<IDBRequest> createIndex(ScriptExecutionContext*, const String& name, const String& keyPath, bool unique = false);
PassRefPtr<IDBIndexRequest> index(const String& name);
diff --git a/WebCore/storage/IDBObjectStoreRequest.idl b/WebCore/storage/IDBObjectStoreRequest.idl
index 873629d..a816b73 100644
--- a/WebCore/storage/IDBObjectStoreRequest.idl
+++ b/WebCore/storage/IDBObjectStoreRequest.idl
@@ -28,23 +28,21 @@ module storage {
interface [
Conditional=INDEXED_DATABASE
] IDBObjectStoreRequest {
- [CallWith=ScriptExecutionContext] IDBRequest get(in SerializedScriptValue key);
-
+ [CallWith=ScriptExecutionContext] IDBRequest get(in IDBKey key);
// FIXME: Come to concensus re getAll.
// FIXME: SerializedScriptValue raises an exception if you pass in something that can't be serialized.
// We need to instead "raise" this error via an error callback.
- [CallWith=ScriptExecutionContext] IDBRequest add(in SerializedScriptValue value, in [Optional] SerializedScriptValue key);
- [CallWith=ScriptExecutionContext] IDBRequest modify(in SerializedScriptValue value, in [Optional] SerializedScriptValue key);
- [CallWith=ScriptExecutionContext] IDBRequest addOrModify(in SerializedScriptValue value, in [Optional] SerializedScriptValue key);
- [CallWith=ScriptExecutionContext] IDBRequest remove(in SerializedScriptValue key);
+ [CallWith=ScriptExecutionContext] IDBRequest add(in SerializedScriptValue value, in [Optional] IDBKey key);
+ [CallWith=ScriptExecutionContext] IDBRequest put(in SerializedScriptValue value, in [Optional] IDBKey key);
+ [CallWith=ScriptExecutionContext] IDBRequest remove(in IDBKey key);
// FIXME: write openCursor
- [CallWith=ScriptExecutionContext] IDBRequest createIndex(in DOMString name, in DOMString keyPath, in [Optional] boolean unique);
+ [CallWith=ScriptExecutionContext] IDBRequest createIndex(in DOMString name, in [ConvertNullToNullString] DOMString keyPath, in [Optional] boolean unique);
// FIXME: This needs to raise an IDBDatabaseException on errors.
IDBIndexRequest index(in DOMString name);
[CallWith=ScriptExecutionContext] IDBRequest removeIndex(in DOMString name);
readonly attribute DOMString name;
- readonly attribute DOMString keyPath;
+ readonly attribute [ConvertNullStringTo=Null] DOMString keyPath;
readonly attribute DOMStringList indexNames;
};
}
diff --git a/WebCore/storage/IDBRequest.cpp b/WebCore/storage/IDBRequest.cpp
index 7ec8ee6..78dd15a 100644
--- a/WebCore/storage/IDBRequest.cpp
+++ b/WebCore/storage/IDBRequest.cpp
@@ -87,7 +87,8 @@ void IDBRequest::onSuccess(PassRefPtr<IDBIndex> idbIndex)
void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey)
{
- ASSERT_NOT_REACHED();
+ onEventCommon();
+ m_result->set(idbKey);
}
void IDBRequest::onSuccess(PassRefPtr<IDBObjectStore> idbObjectStore)
diff --git a/WebCore/storage/IndexedDatabaseRequest.cpp b/WebCore/storage/IndexedDatabaseRequest.cpp
index 93e052c..a25fb2b 100644
--- a/WebCore/storage/IndexedDatabaseRequest.cpp
+++ b/WebCore/storage/IndexedDatabaseRequest.cpp
@@ -45,6 +45,8 @@ IndexedDatabaseRequest::IndexedDatabaseRequest(IndexedDatabase* indexedDatabase)
: m_indexedDatabase(indexedDatabase)
{
m_this = IDBAny::create();
+ // We pass a reference to this object before it can be adopted.
+ relaxAdoptionRequirement();
m_this->set(this);
}
@@ -94,4 +96,3 @@ PassRefPtr<IDBKeyRange> IndexedDatabaseRequest::makeBoundKeyRange(PassRefPtr<Ser
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
-
diff --git a/WebCore/storage/StorageAreaSync.cpp b/WebCore/storage/StorageAreaSync.cpp
index e20f11c..f2008ab 100644
--- a/WebCore/storage/StorageAreaSync.cpp
+++ b/WebCore/storage/StorageAreaSync.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
+ * Copyright (C) 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
@@ -49,12 +49,7 @@ static const double StorageSyncInterval = 1.0;
// much harder to starve the rest of LocalStorage and the OS's IO subsystem in general.
static const int MaxiumItemsToSync = 100;
-PassRefPtr<StorageAreaSync> StorageAreaSync::create(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier)
-{
- return adoptRef(new StorageAreaSync(storageSyncManager, storageArea, databaseIdentifier));
-}
-
-StorageAreaSync::StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier)
+inline StorageAreaSync::StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, const String& databaseIdentifier)
: m_syncTimer(this, &StorageAreaSync::syncTimerFired)
, m_itemsCleared(false)
, m_finalSyncScheduled(false)
@@ -70,11 +65,18 @@ StorageAreaSync::StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManag
ASSERT(isMainThread());
ASSERT(m_storageArea);
ASSERT(m_syncManager);
+}
+
+PassRefPtr<StorageAreaSync> StorageAreaSync::create(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, const String& databaseIdentifier)
+{
+ RefPtr<StorageAreaSync> area = adoptRef(new StorageAreaSync(storageSyncManager, storageArea, databaseIdentifier));
// FIXME: If it can't import, then the default WebKit behavior should be that of private browsing,
- // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894
- if (!m_syncManager->scheduleImport(this))
- m_importComplete = true;
+ // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894
+ if (!area->m_syncManager->scheduleImport(area.get()))
+ area->m_importComplete = true;
+
+ return area.release();
}
StorageAreaSync::~StorageAreaSync()
diff --git a/WebCore/storage/StorageAreaSync.h b/WebCore/storage/StorageAreaSync.h
index a26b041..94c4670 100644
--- a/WebCore/storage/StorageAreaSync.h
+++ b/WebCore/storage/StorageAreaSync.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
+ * Copyright (C) 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
@@ -28,7 +28,6 @@
#if ENABLE(DOM_STORAGE)
-#include "PlatformString.h"
#include "SQLiteDatabase.h"
#include "StringHash.h"
#include "Timer.h"
@@ -42,7 +41,7 @@ namespace WebCore {
class StorageAreaSync : public RefCounted<StorageAreaSync> {
public:
- static PassRefPtr<StorageAreaSync> create(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier);
+ static PassRefPtr<StorageAreaSync> create(PassRefPtr<StorageSyncManager>, PassRefPtr<StorageAreaImpl>, const String& databaseIdentifier);
~StorageAreaSync();
void scheduleFinalSync();
@@ -52,7 +51,7 @@ namespace WebCore {
void scheduleClear();
private:
- StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier);
+ StorageAreaSync(PassRefPtr<StorageSyncManager>, PassRefPtr<StorageAreaImpl>, const String& databaseIdentifier);
void dispatchStorageEvent(const String& key, const String& oldValue, const String& newValue, Frame* sourceFrame);
diff --git a/WebCore/svg/SVGAnimatedString.idl b/WebCore/svg/SVGAnimatedString.idl
index 888c762..1531942 100644
--- a/WebCore/svg/SVGAnimatedString.idl
+++ b/WebCore/svg/SVGAnimatedString.idl
@@ -26,9 +26,9 @@
module svg {
interface [Conditional=SVG] SVGAnimatedString {
- attribute core::DOMString baseVal
+ attribute DOMString baseVal
/*setter raises(DOMException)*/;
- readonly attribute core::DOMString animVal;
+ readonly attribute DOMString animVal;
};
}
diff --git a/WebCore/svg/SVGColor.idl b/WebCore/svg/SVGColor.idl
index 32a2683..f4e17ab 100644
--- a/WebCore/svg/SVGColor.idl
+++ b/WebCore/svg/SVGColor.idl
@@ -21,7 +21,7 @@
module svg {
- interface [Conditional=SVG] SVGColor : css::CSSValue {
+ interface [Conditional=SVG] SVGColor : CSSValue {
// Color Types
const unsigned short SVG_COLORTYPE_UNKNOWN = 0;
const unsigned short SVG_COLORTYPE_RGBCOLOR = 1;
@@ -29,17 +29,17 @@ module svg {
const unsigned short SVG_COLORTYPE_CURRENTCOLOR = 3;
readonly attribute unsigned short colorType;
- readonly attribute css::RGBColor rgbColor;
+ readonly attribute RGBColor rgbColor;
/*readonly attribute SVGICCColor iccColor;*/
- void setRGBColor(in core::DOMString rgbColor)
+ void setRGBColor(in DOMString rgbColor)
raises(SVGException);
- void setRGBColorICCColor(in core::DOMString rgbColor,
- in core::DOMString iccColor)
+ void setRGBColorICCColor(in DOMString rgbColor,
+ in DOMString iccColor)
raises(SVGException);
void setColor(in unsigned short colorType,
- in core::DOMString rgbColor,
- in core::DOMString iccColor)
+ in DOMString rgbColor,
+ in DOMString iccColor)
raises(SVGException);
};
diff --git a/WebCore/svg/SVGDocument.idl b/WebCore/svg/SVGDocument.idl
index 26b70d1..812665e 100644
--- a/WebCore/svg/SVGDocument.idl
+++ b/WebCore/svg/SVGDocument.idl
@@ -21,12 +21,12 @@
module svg {
- interface [Conditional=SVG] SVGDocument : core::Document {
+ interface [Conditional=SVG] SVGDocument : Document {
readonly attribute SVGSVGElement rootElement;
// Overwrite the one in events::DocumentEvent
- events::Event createEvent(in core::DOMString eventType)
- raises(core::DOMException);
+ Event createEvent(in DOMString eventType)
+ raises(DOMException);
};
}
diff --git a/WebCore/svg/SVGDocumentExtensions.cpp b/WebCore/svg/SVGDocumentExtensions.cpp
index fc31551..bc4d6e8 100644
--- a/WebCore/svg/SVGDocumentExtensions.cpp
+++ b/WebCore/svg/SVGDocumentExtensions.cpp
@@ -116,6 +116,12 @@ void SVGDocumentExtensions::unpauseAnimations()
bool SVGDocumentExtensions::sampleAnimationAtTime(const String& elementId, SVGSMILElement* element, double time)
{
+#if !ENABLE(SVG_ANIMATION)
+ UNUSED_PARAM(elementId);
+ UNUSED_PARAM(element);
+ UNUSED_PARAM(time);
+ return false;
+#else
ASSERT(element);
SMILTimeContainer* container = element->timeContainer();
if (!container || container->isPaused())
@@ -123,6 +129,7 @@ bool SVGDocumentExtensions::sampleAnimationAtTime(const String& elementId, SVGSM
container->sampleAnimationAtTime(elementId, time);
return true;
+#endif
}
// FIXME: Callers should probably use ScriptController::eventHandlerLineNumber()
diff --git a/WebCore/svg/SVGFontFaceElement.cpp b/WebCore/svg/SVGFontFaceElement.cpp
index 94f3bd5..cf77d5b 100644
--- a/WebCore/svg/SVGFontFaceElement.cpp
+++ b/WebCore/svg/SVGFontFaceElement.cpp
@@ -58,7 +58,6 @@ SVGFontFaceElement::SVGFontFaceElement(const QualifiedName& tagName, Document* d
SVGFontFaceElement::~SVGFontFaceElement()
{
- removeFromMappedElementSheet();
}
static int cssPropertyIdForSVGAttributeName(const QualifiedName& attrName)
diff --git a/WebCore/svg/SVGLangSpace.idl b/WebCore/svg/SVGLangSpace.idl
index 277e514..b982dc5 100644
--- a/WebCore/svg/SVGLangSpace.idl
+++ b/WebCore/svg/SVGLangSpace.idl
@@ -27,9 +27,9 @@
module svg {
interface [Conditional=SVG, ObjCProtocol, OmitConstructor] SVGLangSpace {
- attribute core::DOMString xmllang
+ attribute DOMString xmllang
/*setter raises(DOMException)*/;
- attribute core::DOMString xmlspace
+ attribute DOMString xmlspace
/*setter raises(DOMException)*/;
};
diff --git a/WebCore/svg/SVGPathSegList.cpp b/WebCore/svg/SVGPathSegList.cpp
index d9d6310..e1215e5 100644
--- a/WebCore/svg/SVGPathSegList.cpp
+++ b/WebCore/svg/SVGPathSegList.cpp
@@ -28,6 +28,7 @@
#include "FloatConversion.h"
#include "FloatPoint.h"
+#include "FloatSize.h"
#include "Path.h"
#include "PathTraversalState.h"
#include "SVGPathSegArc.h"
@@ -111,6 +112,7 @@ Path SVGPathSegList::toPathData()
Path pathData;
int len = numberOfItems();
ExceptionCode ec = 0;
+ FloatPoint previousEndPoint(0, 0);
for (int i = 0; i < len; ++i) {
SVGPathSeg* segment = getItem(i, ec).get();
if (ec)
@@ -119,21 +121,37 @@ Path SVGPathSegList::toPathData()
case SVGPathSeg::PATHSEG_MOVETO_ABS:
{
SVGPathSegMovetoAbs* moveTo = static_cast<SVGPathSegMovetoAbs*>(segment);
- pathData.moveTo(FloatPoint(moveTo->x(), moveTo->y()));
+ FloatPoint endPoint(moveTo->x(), moveTo->y());
+ pathData.moveTo(endPoint);
+ previousEndPoint = endPoint;
break;
}
case SVGPathSeg::PATHSEG_LINETO_ABS:
{
SVGPathSegLinetoAbs* lineTo = static_cast<SVGPathSegLinetoAbs*>(segment);
- pathData.addLineTo(FloatPoint(lineTo->x(), lineTo->y()));
+ FloatPoint endPoint(lineTo->x(), lineTo->y());
+ pathData.addLineTo(endPoint);
+ previousEndPoint = endPoint;
break;
}
case SVGPathSeg::PATHSEG_CURVETO_CUBIC_ABS:
{
SVGPathSegCurvetoCubicAbs* curveTo = static_cast<SVGPathSegCurvetoCubicAbs*>(segment);
+ FloatPoint endPoint(curveTo->x(), curveTo->y());
pathData.addBezierCurveTo(FloatPoint(curveTo->x1(), curveTo->y1()),
FloatPoint(curveTo->x2(), curveTo->y2()),
- FloatPoint(curveTo->x(), curveTo->y()));
+ endPoint);
+ previousEndPoint = endPoint;
+ break;
+ }
+ case SVGPathSeg::PATHSEG_CURVETO_CUBIC_REL:
+ {
+ SVGPathSegCurvetoCubicRel* curveTo = static_cast<SVGPathSegCurvetoCubicRel*>(segment);
+ FloatSize endPoint(curveTo->x(), curveTo->y());
+ pathData.addBezierCurveTo(previousEndPoint + FloatSize(curveTo->x1(), curveTo->y1()),
+ previousEndPoint + FloatSize(curveTo->x2(), curveTo->y2()),
+ previousEndPoint + endPoint);
+ previousEndPoint += endPoint;
break;
}
case SVGPathSeg::PATHSEG_CLOSEPATH:
diff --git a/WebCore/svg/SVGSVGElement.cpp b/WebCore/svg/SVGSVGElement.cpp
index a719323..6d88c37 100644
--- a/WebCore/svg/SVGSVGElement.cpp
+++ b/WebCore/svg/SVGSVGElement.cpp
@@ -1,6 +1,6 @@
/*
Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org>
+ 2004, 2005, 2006, 2007, 2008, 2010 Rob Buis <buis@kde.org>
2007 Apple Inc. All rights reserved.
This library is free software; you can redistribute it and/or
@@ -592,6 +592,27 @@ void SVGSVGElement::documentDidBecomeActive()
unpauseAnimations();
}
+// getElementById on SVGSVGElement is restricted to only the child subtree defined by the <svg> element.
+// See http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGSVGElement
+Element* SVGSVGElement::getElementById(const AtomicString& id) const
+{
+ Element* element = document()->getElementById(id);
+ if (element && element->isDescendantOf(this))
+ return element;
+
+ // Fall back to traversing our subtree. Duplicate ids are allowed, the first found will
+ // be returned.
+ for (Node* node = traverseNextNode(this); node; node = node->traverseNextNode(this)) {
+ if (!node->isElementNode())
+ continue;
+
+ Element* element = static_cast<Element*>(node);
+ if (element->hasID() && element->getIdAttribute() == id)
+ return element;
+ }
+ return 0;
+}
+
}
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGSVGElement.h b/WebCore/svg/SVGSVGElement.h
index 88ce958..099f9a1 100644
--- a/WebCore/svg/SVGSVGElement.h
+++ b/WebCore/svg/SVGSVGElement.h
@@ -1,6 +1,6 @@
/*
Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
+ 2004, 2005, 2006, 2007, 2010 Rob Buis <buis@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -129,6 +129,8 @@ namespace WebCore {
bool isOutermostSVG() const;
+ Element* getElementById(const AtomicString&) const;
+
private:
virtual bool selfHasRelativeLengths() const;
diff --git a/WebCore/svg/SVGSVGElement.idl b/WebCore/svg/SVGSVGElement.idl
index 46a17b0..0d9c344 100644
--- a/WebCore/svg/SVGSVGElement.idl
+++ b/WebCore/svg/SVGSVGElement.idl
@@ -1,6 +1,6 @@
/*
Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
- Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
+ Copyright (C) 2004, 2005, 2010 Rob Buis <buis@kde.org>
Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
@@ -37,9 +37,9 @@ module svg {
readonly attribute SVGAnimatedLength y;
readonly attribute SVGAnimatedLength width;
readonly attribute SVGAnimatedLength height;
- attribute core::DOMString contentScriptType
+ attribute DOMString contentScriptType
/*setter raises(DOMException)*/;
- attribute core::DOMString contentStyleType
+ attribute DOMString contentStyleType
/*setter raises(DOMException)*/;
readonly attribute [Immutable] SVGRect viewport;
readonly attribute float pixelUnitToMillimeterX;
@@ -62,9 +62,9 @@ module svg {
boolean animationsPaused();
float getCurrentTime();
void setCurrentTime(in float seconds);
- core::NodeList getIntersectionList(in SVGRect rect,
+ NodeList getIntersectionList(in SVGRect rect,
in SVGElement referenceElement);
- core::NodeList getEnclosureList(in SVGRect rect,
+ NodeList getEnclosureList(in SVGRect rect,
in SVGElement referenceElement);
boolean checkIntersection(in SVGElement element,
in SVGRect rect);
@@ -80,6 +80,7 @@ module svg {
SVGRect createSVGRect();
SVGTransform createSVGTransform();
SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix);
+ Element getElementById(in DOMString elementId);
};
}
diff --git a/WebCore/svg/SVGStringList.idl b/WebCore/svg/SVGStringList.idl
index 7bdd5ed..2af03ad 100644
--- a/WebCore/svg/SVGStringList.idl
+++ b/WebCore/svg/SVGStringList.idl
@@ -29,19 +29,19 @@ module svg {
readonly attribute unsigned long numberOfItems;
void clear()
- raises(core::DOMException);
- core::DOMString initialize(in core::DOMString item)
- raises(core::DOMException, SVGException);
- core::DOMString getItem(in unsigned long index)
- raises(core::DOMException);
- core::DOMString insertItemBefore(in core::DOMString item, in unsigned long index)
- raises(core::DOMException, SVGException);
- core::DOMString replaceItem(in core::DOMString item, in unsigned long index)
- raises(core::DOMException, SVGException);
- core::DOMString removeItem(in unsigned long index)
- raises(core::DOMException);
- core::DOMString appendItem(in core::DOMString item)
- raises(core::DOMException, SVGException);
+ raises(DOMException);
+ DOMString initialize(in DOMString item)
+ raises(DOMException, SVGException);
+ DOMString getItem(in unsigned long index)
+ raises(DOMException);
+ DOMString insertItemBefore(in DOMString item, in unsigned long index)
+ raises(DOMException, SVGException);
+ DOMString replaceItem(in DOMString item, in unsigned long index)
+ raises(DOMException, SVGException);
+ DOMString removeItem(in unsigned long index)
+ raises(DOMException);
+ DOMString appendItem(in DOMString item)
+ raises(DOMException, SVGException);
};
}
diff --git a/WebCore/svg/SVGStylable.idl b/WebCore/svg/SVGStylable.idl
index 2da2b77..c997476 100644
--- a/WebCore/svg/SVGStylable.idl
+++ b/WebCore/svg/SVGStylable.idl
@@ -29,9 +29,9 @@ module svg {
interface [Conditional=SVG, ObjCProtocol, OmitConstructor] SVGStylable {
readonly attribute SVGAnimatedString className;
- readonly attribute css::CSSStyleDeclaration style;
+ readonly attribute CSSStyleDeclaration style;
- css::CSSValue getPresentationAttribute(in core::DOMString name);
+ CSSValue getPresentationAttribute(in DOMString name);
};
}
diff --git a/WebCore/svg/SVGStyleElement.cpp b/WebCore/svg/SVGStyleElement.cpp
index d997074..48fbe69 100644
--- a/WebCore/svg/SVGStyleElement.cpp
+++ b/WebCore/svg/SVGStyleElement.cpp
@@ -114,7 +114,7 @@ void SVGStyleElement::removedFromDocument()
void SVGStyleElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
- StyleElement::process(this);
+ StyleElement::process(this, 0);
}
StyleSheet* SVGStyleElement::sheet()
diff --git a/WebCore/svg/SVGStyleElement.idl b/WebCore/svg/SVGStyleElement.idl
index e47ed1d..a93cfa6 100644
--- a/WebCore/svg/SVGStyleElement.idl
+++ b/WebCore/svg/SVGStyleElement.idl
@@ -28,11 +28,11 @@ module svg {
interface [Conditional=SVG] SVGStyleElement : SVGElement,
SVGLangSpace {
- attribute core::DOMString type
+ attribute DOMString type
setter raises(DOMException);
- attribute core::DOMString media
+ attribute DOMString media
setter raises(DOMException);
- attribute core::DOMString title
+ attribute DOMString title
setter raises(DOMException);
};
diff --git a/WebCore/svg/SVGStyledElement.cpp b/WebCore/svg/SVGStyledElement.cpp
index 1d7e4ec..6b55683 100644
--- a/WebCore/svg/SVGStyledElement.cpp
+++ b/WebCore/svg/SVGStyledElement.cpp
@@ -325,11 +325,11 @@ PassRefPtr<RenderStyle> SVGStyledElement::resolveStyle(RenderStyle* parentStyle)
PassRefPtr<CSSValue> SVGStyledElement::getPresentationAttribute(const String& name)
{
- if (!mappedAttributes())
+ if (!attributeMap())
return 0;
QualifiedName attributeName(nullAtom, name, nullAtom);
- Attribute* attr = mappedAttributes()->getAttributeItem(attributeName);
+ Attribute* attr = attributeMap()->getAttributeItem(attributeName);
if (!attr || !attr->isMappedAttribute() || !attr->style())
return 0;
@@ -366,10 +366,43 @@ AffineTransform SVGStyledElement::localCoordinateSpaceTransform(SVGLocatable::CT
return AffineTransform();
}
-void SVGStyledElement::updateRelativeLengthsInformation(bool, SVGStyledElement*)
+void SVGStyledElement::updateRelativeLengthsInformation(bool hasRelativeLengths, SVGStyledElement* element)
{
- // FIXME: The actual code will land in a follow-up patch.
- // See https://bugs.webkit.org/show_bug.cgi?id=41566
+ // If we're not yet in a document, this function will be called again from insertedIntoDocument(). Do nothing now.
+ if (!inDocument())
+ return;
+
+ // An element wants to notify us that its own relative lengths state changed.
+ // Register it in the relative length map, and register us in the parent relative length map.
+ // Register the parent in the grandparents map, etc. Repeat procedure until the root of the SVG tree.
+
+ if (hasRelativeLengths)
+ m_elementsWithRelativeLengths.add(element);
+ else {
+ if (!m_elementsWithRelativeLengths.contains(element)) {
+ // We were never registered. Do nothing.
+ return;
+ }
+
+ m_elementsWithRelativeLengths.remove(element);
+ }
+
+ // Find first styled parent node, and notify it that we've changed our relative length state.
+ Node* node = parent();
+ while (node) {
+ if (!node->isSVGElement())
+ break;
+
+ SVGElement* element = static_cast<SVGElement*>(node);
+ if (!element->isStyled()) {
+ node = node->parent();
+ continue;
+ }
+
+ // Register us in the parent element map.
+ static_cast<SVGStyledElement*>(element)->updateRelativeLengthsInformation(hasRelativeLengths, this);
+ break;
+ }
}
}
diff --git a/WebCore/svg/SVGStyledElement.h b/WebCore/svg/SVGStyledElement.h
index d0b52db..dcfc96a 100644
--- a/WebCore/svg/SVGStyledElement.h
+++ b/WebCore/svg/SVGStyledElement.h
@@ -40,8 +40,7 @@ namespace WebCore {
virtual String title() const;
- // FIXME: The actual code will land in a follow-up patch.
- bool hasRelativeLengths() const { return selfHasRelativeLengths(); }
+ bool hasRelativeLengths() const { return !m_elementsWithRelativeLengths.isEmpty(); }
virtual bool isStyled() const { return true; }
virtual bool supportsMarkers() const { return false; }
@@ -81,6 +80,7 @@ namespace WebCore {
virtual bool selfHasRelativeLengths() const { return false; }
private:
+ HashSet<SVGStyledElement*> m_elementsWithRelativeLengths;
DECLARE_ANIMATED_PROPERTY(SVGStyledElement, HTMLNames::classAttr, String, ClassName, className)
};
diff --git a/WebCore/svg/SVGTests.idl b/WebCore/svg/SVGTests.idl
index 8a5f7c2..905ba5e 100644
--- a/WebCore/svg/SVGTests.idl
+++ b/WebCore/svg/SVGTests.idl
@@ -31,7 +31,7 @@ module svg {
readonly attribute SVGStringList requiredExtensions;
readonly attribute SVGStringList systemLanguage;
- boolean hasExtension(in core::DOMString extension);
+ boolean hasExtension(in DOMString extension);
};
}
diff --git a/WebCore/svg/SVGUseElement.cpp b/WebCore/svg/SVGUseElement.cpp
index b90bd53..5ca560a 100644
--- a/WebCore/svg/SVGUseElement.cpp
+++ b/WebCore/svg/SVGUseElement.cpp
@@ -63,6 +63,7 @@ SVGUseElement::SVGUseElement(const QualifiedName& tagName, Document* doc)
, m_y(LengthModeHeight)
, m_width(LengthModeWidth)
, m_height(LengthModeHeight)
+ , m_updatesBlocked(false)
, m_isPendingResource(false)
, m_needsShadowTreeRecreation(false)
{
@@ -314,13 +315,17 @@ void SVGUseElement::updateContainerOffsets()
void SVGUseElement::recalcStyle(StyleChange change)
{
// Eventually mark shadow root element needing style recalc
- if (needsStyleRecalc() && m_targetElementInstance) {
+ if (needsStyleRecalc() && m_targetElementInstance && !m_updatesBlocked) {
if (SVGElement* shadowRoot = m_targetElementInstance->shadowTreeElement())
shadowRoot->setNeedsStyleRecalc();
}
SVGStyledTransformableElement::recalcStyle(change);
+ // Assure that the shadow tree has not been marked for recreation, while we're building it.
+ if (m_updatesBlocked)
+ ASSERT(!m_needsShadowTreeRecreation);
+
bool needsStyleUpdate = !m_needsShadowTreeRecreation;
if (m_needsShadowTreeRecreation) {
static_cast<RenderSVGShadowTreeRootContainer*>(renderer())->markShadowTreeForRecreation();
@@ -441,6 +446,26 @@ void SVGUseElement::buildPendingResource()
void SVGUseElement::buildShadowAndInstanceTree(SVGShadowTreeRootElement* shadowRoot)
{
+ struct ShadowTreeUpdateBlocker {
+ ShadowTreeUpdateBlocker(SVGUseElement* currentUseElement)
+ : useElement(currentUseElement)
+ {
+ useElement->setUpdatesBlocked(true);
+ }
+
+ ~ShadowTreeUpdateBlocker()
+ {
+ useElement->setUpdatesBlocked(false);
+ }
+
+ SVGUseElement* useElement;
+ };
+
+ // When cloning the target nodes, they may decide to synchronize style and/or animated SVG attributes.
+ // That causes calls to SVGElementInstance::updateAllInstancesOfElement(), which mark the shadow tree for recreation.
+ // Solution: block any updates to the shadow tree while we're building it.
+ ShadowTreeUpdateBlocker blocker(this);
+
String id = SVGURIReference::getTarget(href());
Element* targetElement = document()->getElementById(id);
if (!targetElement) {
@@ -584,8 +609,8 @@ void SVGUseElement::attach()
void SVGUseElement::detach()
{
- SVGStyledTransformableElement::detach();
m_targetElementInstance = 0;
+ SVGStyledTransformableElement::detach();
}
static bool isDirectReference(Node* n)
@@ -959,6 +984,10 @@ SVGElementInstance* SVGUseElement::instanceForShadowTreeElement(Node* element, S
void SVGUseElement::invalidateShadowTree()
{
+ // Don't mutate the shadow tree while we're building it.
+ if (m_updatesBlocked)
+ return;
+
m_needsShadowTreeRecreation = true;
setNeedsStyleRecalc();
}
diff --git a/WebCore/svg/SVGUseElement.h b/WebCore/svg/SVGUseElement.h
index bfda95e..cbbcd0f 100644
--- a/WebCore/svg/SVGUseElement.h
+++ b/WebCore/svg/SVGUseElement.h
@@ -68,6 +68,8 @@ namespace WebCore {
SVGElementInstance* instanceForShadowTreeElement(Node* element) const;
void invalidateShadowTree();
+ void setUpdatesBlocked(bool blocked) { m_updatesBlocked = blocked; }
+
private:
friend class RenderSVGShadowTreeRootContainer;
bool isPendingResource() const { return m_isPendingResource; }
@@ -110,6 +112,7 @@ namespace WebCore {
void updateContainerOffsets();
void updateContainerSizes();
+ bool m_updatesBlocked;
bool m_isPendingResource;
bool m_needsShadowTreeRecreation;
String m_resourceId;
diff --git a/WebCore/svg/SVGZoomEvent.idl b/WebCore/svg/SVGZoomEvent.idl
index 8327bef..ea05012 100644
--- a/WebCore/svg/SVGZoomEvent.idl
+++ b/WebCore/svg/SVGZoomEvent.idl
@@ -25,7 +25,7 @@
module svg {
- interface [Conditional=SVG] SVGZoomEvent : events::UIEvent {
+ interface [Conditional=SVG] SVGZoomEvent : UIEvent {
readonly attribute [Immutable] SVGRect zoomRectScreen;
readonly attribute float previousScale;
readonly attribute [Immutable] SVGPoint previousTranslate;
diff --git a/WebCore/svg/graphics/SVGImage.cpp b/WebCore/svg/graphics/SVGImage.cpp
index 8260d99..ebd7703 100644
--- a/WebCore/svg/graphics/SVGImage.cpp
+++ b/WebCore/svg/graphics/SVGImage.cpp
@@ -255,7 +255,7 @@ bool SVGImage::dataChanged(bool allDataReceived)
// FIXME: If this SVG ends up loading itself, we might leak the world.
// The comment said that the Cache code does not know about CachedImages
// holding Frames and won't know to break the cycle. But
- m_page.set(new Page(m_chromeClient.get(), dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient, 0, 0, 0));
+ m_page.set(new Page(m_chromeClient.get(), dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient, 0, 0, 0, 0));
m_page->settings()->setMediaEnabled(false);
m_page->settings()->setJavaScriptEnabled(false);
m_page->settings()->setPluginsEnabled(false);
diff --git a/WebCore/websockets/WebSocket.cpp b/WebCore/websockets/WebSocket.cpp
index 561b821..91761fb 100644
--- a/WebCore/websockets/WebSocket.cpp
+++ b/WebCore/websockets/WebSocket.cpp
@@ -179,7 +179,10 @@ void WebSocket::close()
return;
m_state = CLOSED;
m_bufferedAmountAfterClose = m_channel->bufferedAmount();
- m_channel->close();
+ // didClose notification may be already queued, which we will inadvertently process while waiting for bufferedAmount() to return.
+ // In this case m_channel will be set to null during didClose() call, thus we need to test validness of m_channel here.
+ if (m_channel)
+ m_channel->close();
}
const KURL& WebSocket::url() const
diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp b/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp
index f8d1230..fd82591 100644
--- a/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp
+++ b/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp
@@ -300,6 +300,7 @@ bool WorkerThreadableWebSocketChannel::Bridge::send(const String& message)
ASSERT(m_peer);
setMethodNotCompleted();
m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSend, m_peer, message));
+ RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
return clientWrapper && clientWrapper->sent();
@@ -321,6 +322,7 @@ unsigned long WorkerThreadableWebSocketChannel::Bridge::bufferedAmount()
ASSERT(m_peer);
setMethodNotCompleted();
m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadBufferedAmount, m_peer));
+ RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
if (clientWrapper)
@@ -404,6 +406,8 @@ void WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted()
m_workerClientWrapper->clearSyncMethodDone();
}
+// Caller of this function should hold a reference to the bridge, because this function may call WebSocket::didClose() in the end,
+// which causes the bridge to get disconnected from the WebSocket and deleted if there is no other reference.
void WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion()
{
if (!m_workerContext)
@@ -411,8 +415,8 @@ void WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion()
WorkerRunLoop& runLoop = m_workerContext->thread()->runLoop();
MessageQueueWaitResult result = MessageQueueMessageReceived;
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- while (clientWrapper && !clientWrapper->syncMethodDone() && result != MessageQueueTerminated) {
- result = runLoop.runInMode(m_workerContext.get(), m_taskMode);
+ while (m_workerContext && clientWrapper && !clientWrapper->syncMethodDone() && result != MessageQueueTerminated) {
+ result = runLoop.runInMode(m_workerContext.get(), m_taskMode); // May cause this bridge to get disconnected, which makes m_workerContext become null.
clientWrapper = m_workerClientWrapper.get();
}
}
diff --git a/WebCore/workers/DefaultSharedWorkerRepository.cpp b/WebCore/workers/DefaultSharedWorkerRepository.cpp
index 8186f30..4a8e947 100644
--- a/WebCore/workers/DefaultSharedWorkerRepository.cpp
+++ b/WebCore/workers/DefaultSharedWorkerRepository.cpp
@@ -387,7 +387,7 @@ void DefaultSharedWorkerRepository::connectToWorker(PassRefPtr<SharedWorker> wor
if (proxy->thread())
proxy->thread()->runLoop().postTask(SharedWorkerConnectTask::create(port));
else {
- RefPtr<SharedWorkerScriptLoader> loader = adoptRef(new SharedWorkerScriptLoader(worker, port.release(), proxy.release()));
+ RefPtr<SharedWorkerScriptLoader> loader = adoptRef(new SharedWorkerScriptLoader(worker, port, proxy.release()));
loader->load(url);
}
}
diff --git a/WebCore/workers/SharedWorker.cpp b/WebCore/workers/SharedWorker.cpp
index cd856ff..b25b28e 100644
--- a/WebCore/workers/SharedWorker.cpp
+++ b/WebCore/workers/SharedWorker.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * 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
@@ -42,22 +43,32 @@
namespace WebCore {
-SharedWorker::SharedWorker(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec)
+inline SharedWorker::SharedWorker(ScriptExecutionContext* context)
: AbstractWorker(context)
{
- RefPtr<MessageChannel> channel = MessageChannel::create(scriptExecutionContext());
- m_port = channel->port1();
+}
+
+PassRefPtr<SharedWorker> SharedWorker::create(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec)
+{
+ RefPtr<SharedWorker> worker = adoptRef(new SharedWorker(context));
+
+ RefPtr<MessageChannel> channel = MessageChannel::create(context);
+ worker->m_port = channel->port1();
OwnPtr<MessagePortChannel> remotePort = channel->port2()->disentangle(ec);
- ASSERT(!ec);
+ ASSERT(remotePort);
+
+ KURL scriptURL = worker->resolveURL(url, ec);
+ if (scriptURL.isEmpty())
+ return 0;
+
+ SharedWorkerRepository::connect(worker.get(), remotePort.release(), scriptURL, name, ec);
- KURL scriptUrl = resolveURL(url, ec);
- if (ec)
- return;
- SharedWorkerRepository::connect(this, remotePort.release(), scriptUrl, name, ec);
#if ENABLE(INSPECTOR)
- if (InspectorController* inspector = scriptExecutionContext()->inspectorController())
- inspector->didCreateWorker(asID(), scriptUrl.string(), true);
+ if (InspectorController* inspector = context->inspectorController())
+ inspector->didCreateWorker(worker->asID(), scriptURL.string(), true);
#endif
+
+ return worker.release();
}
SharedWorker::~SharedWorker()
diff --git a/WebCore/workers/SharedWorker.h b/WebCore/workers/SharedWorker.h
index 24aa02d..07aff19 100644
--- a/WebCore/workers/SharedWorker.h
+++ b/WebCore/workers/SharedWorker.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * 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
@@ -33,26 +34,21 @@
#include "AbstractWorker.h"
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefPtr.h>
-
#if ENABLE(SHARED_WORKERS)
namespace WebCore {
class SharedWorker : public AbstractWorker {
public:
- static PassRefPtr<SharedWorker> create(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec)
- {
- return adoptRef(new SharedWorker(url, name, context, ec));
- }
- ~SharedWorker();
- MessagePort* port() const { return m_port.get(); }
+ static PassRefPtr<SharedWorker> create(const String& url, const String& name, ScriptExecutionContext*, ExceptionCode&);
+ virtual ~SharedWorker();
- virtual SharedWorker* toSharedWorker() { return this; }
+ MessagePort* port() const { return m_port.get(); }
private:
- SharedWorker(const String& url, const String& name, ScriptExecutionContext*, ExceptionCode&);
+ SharedWorker(ScriptExecutionContext*);
+
+ virtual SharedWorker* toSharedWorker() { return this; }
RefPtr<MessagePort> m_port;
};
diff --git a/WebCore/workers/Worker.cpp b/WebCore/workers/Worker.cpp
index 53ca9ae..fda7c72 100644
--- a/WebCore/workers/Worker.cpp
+++ b/WebCore/workers/Worker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved.
* Copyright (C) 2009 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -50,21 +50,32 @@
namespace WebCore {
-Worker::Worker(const String& url, ScriptExecutionContext* context, ExceptionCode& ec)
+inline Worker::Worker(ScriptExecutionContext* context)
: AbstractWorker(context)
, m_contextProxy(WorkerContextProxy::create(this))
{
- KURL scriptURL = resolveURL(url, ec);
- if (ec)
- return;
+}
+
+PassRefPtr<Worker> Worker::create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec)
+{
+ RefPtr<Worker> worker = adoptRef(new Worker(context));
+
+ KURL scriptURL = worker->resolveURL(url, ec);
+ if (scriptURL.isEmpty())
+ return 0;
+
+ worker->m_scriptLoader = adoptPtr(new WorkerScriptLoader(ResourceRequestBase::TargetIsWorker));
+ worker->m_scriptLoader->loadAsynchronously(context, scriptURL, DenyCrossOriginRequests, worker.get());
+
+ // The worker context does not exist while loading, so we must ensure that the worker object is not collected, nor are its event listeners.
+ worker->setPendingActivity(worker.get());
- m_scriptLoader = new WorkerScriptLoader(ResourceRequestBase::TargetIsWorker);
- m_scriptLoader->loadAsynchronously(scriptExecutionContext(), scriptURL, DenyCrossOriginRequests, this);
- setPendingActivity(this); // The worker context does not exist while loading, so we must ensure that the worker object is not collected, as well as its event listeners.
#if ENABLE(INSPECTOR)
- if (InspectorController* inspector = scriptExecutionContext()->inspectorController())
- inspector->didCreateWorker(asID(), scriptURL.string(), false);
+ if (InspectorController* inspector = context->inspectorController())
+ inspector->didCreateWorker(worker->asID(), scriptURL.string(), false);
#endif
+
+ return worker.release();
}
Worker::~Worker()
diff --git a/WebCore/workers/Worker.h b/WebCore/workers/Worker.h
index 6b8fa84..69ae92e 100644
--- a/WebCore/workers/Worker.h
+++ b/WebCore/workers/Worker.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 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
@@ -53,13 +53,13 @@ namespace WebCore {
class Worker : public AbstractWorker, private WorkerScriptLoaderClient {
public:
- static PassRefPtr<Worker> create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) { return adoptRef(new Worker(url, context, ec)); }
- ~Worker();
+ static PassRefPtr<Worker> create(const String& url, ScriptExecutionContext*, ExceptionCode&);
+ virtual ~Worker();
virtual Worker* toWorker() { return this; }
- void postMessage(PassRefPtr<SerializedScriptValue>, ExceptionCode&);
- void postMessage(PassRefPtr<SerializedScriptValue>, const MessagePortArray*, ExceptionCode&);
+ void postMessage(PassRefPtr<SerializedScriptValue> message, ExceptionCode&);
+ void postMessage(PassRefPtr<SerializedScriptValue> message, const MessagePortArray*, ExceptionCode&);
// FIXME: remove this when we update the ObjC bindings (bug #28774).
void postMessage(PassRefPtr<SerializedScriptValue> message, MessagePort*, ExceptionCode&);
@@ -72,7 +72,7 @@ namespace WebCore {
DEFINE_ATTRIBUTE_EVENT_LISTENER(message);
private:
- Worker(const String&, ScriptExecutionContext*, ExceptionCode&);
+ Worker(ScriptExecutionContext*);
virtual void notifyFinished();
diff --git a/WebCore/workers/WorkerContext.cpp b/WebCore/workers/WorkerContext.cpp
index c710ba6..36a9f94 100644
--- a/WebCore/workers/WorkerContext.cpp
+++ b/WebCore/workers/WorkerContext.cpp
@@ -182,7 +182,7 @@ void WorkerContext::postTask(PassOwnPtr<Task> task)
thread()->runLoop().postTask(task);
}
-int WorkerContext::setTimeout(ScheduledAction* action, int timeout)
+int WorkerContext::setTimeout(PassOwnPtr<ScheduledAction> action, int timeout)
{
return DOMTimer::install(scriptExecutionContext(), action, timeout, true);
}
@@ -192,7 +192,7 @@ void WorkerContext::clearTimeout(int timeoutId)
DOMTimer::removeById(scriptExecutionContext(), timeoutId);
}
-int WorkerContext::setInterval(ScheduledAction* action, int timeout)
+int WorkerContext::setInterval(PassOwnPtr<ScheduledAction> action, int timeout)
{
return DOMTimer::install(scriptExecutionContext(), action, timeout, false);
}
diff --git a/WebCore/workers/WorkerContext.h b/WebCore/workers/WorkerContext.h
index 4091db1..56b0324 100644
--- a/WebCore/workers/WorkerContext.h
+++ b/WebCore/workers/WorkerContext.h
@@ -89,9 +89,9 @@ namespace WebCore {
WorkerNavigator* navigator() const;
// Timers
- int setTimeout(ScheduledAction*, int timeout);
+ int setTimeout(PassOwnPtr<ScheduledAction>, int timeout);
void clearTimeout(int timeoutId);
- int setInterval(ScheduledAction*, int timeout);
+ int setInterval(PassOwnPtr<ScheduledAction>, int timeout);
void clearInterval(int timeoutId);
// ScriptExecutionContext
diff --git a/WebCore/workers/WorkerMessagingProxy.cpp b/WebCore/workers/WorkerMessagingProxy.cpp
index 2180dd4..21994cc 100644
--- a/WebCore/workers/WorkerMessagingProxy.cpp
+++ b/WebCore/workers/WorkerMessagingProxy.cpp
@@ -243,7 +243,7 @@ void WorkerMessagingProxy::startWorkerContext(const KURL& scriptURL, const Strin
void WorkerMessagingProxy::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels)
{
- m_scriptExecutionContext->postTask(MessageWorkerTask::create(message, channels.release(), this));
+ m_scriptExecutionContext->postTask(MessageWorkerTask::create(message, channels, this));
}
void WorkerMessagingProxy::postMessageToWorkerContext(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels)
@@ -253,9 +253,9 @@ void WorkerMessagingProxy::postMessageToWorkerContext(PassRefPtr<SerializedScrip
if (m_workerThread) {
++m_unconfirmedMessageCount;
- m_workerThread->runLoop().postTask(MessageWorkerContextTask::create(message, channels.release()));
+ m_workerThread->runLoop().postTask(MessageWorkerContextTask::create(message, channels));
} else
- m_queuedEarlyTasks.append(MessageWorkerContextTask::create(message, channels.release()));
+ m_queuedEarlyTasks.append(MessageWorkerContextTask::create(message, channels));
}
void WorkerMessagingProxy::postTaskForModeToWorkerContext(PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode)
diff --git a/WebCore/xml/XMLHttpRequest.cpp b/WebCore/xml/XMLHttpRequest.cpp
index da95d32..8762bb5 100644
--- a/WebCore/xml/XMLHttpRequest.cpp
+++ b/WebCore/xml/XMLHttpRequest.cpp
@@ -872,6 +872,10 @@ void XMLHttpRequest::didFail(const ResourceError& error)
return;
}
+ // Network failures are already reported to Web Inspector by ResourceLoader.
+ if (error.domain() == errorDomainWebKitInternal)
+ reportUnsafeUsage(scriptExecutionContext(), "XMLHttpRequest cannot load " + error.failingURL() + ". " + error.localizedDescription());
+
m_exceptionCode = XMLHttpRequestException::NETWORK_ERR;
networkError();
}
diff --git a/WebCore/xml/XPathEvaluator.idl b/WebCore/xml/XPathEvaluator.idl
index c075b01..30df23a 100644
--- a/WebCore/xml/XPathEvaluator.idl
+++ b/WebCore/xml/XPathEvaluator.idl
@@ -21,7 +21,7 @@ module xpath {
interface [CanBeConstructed, Conditional=XPATH] XPathEvaluator {
XPathExpression createExpression(in DOMString expression,
in XPathNSResolver resolver)
- raises(core::DOMException);
+ raises(DOMException);
XPathNSResolver createNSResolver(in Node nodeResolver);
diff --git a/WebCore/xml/XPathFunctions.cpp b/WebCore/xml/XPathFunctions.cpp
index a727680..41bf795 100644
--- a/WebCore/xml/XPathFunctions.cpp
+++ b/WebCore/xml/XPathFunctions.cpp
@@ -516,11 +516,13 @@ Value FunSubstring::evaluate() const
if (pos > long(s.length()))
return "";
- if (haveLength && pos < 1) {
- len -= 1 - pos;
+ if (pos < 1) {
+ if (haveLength) {
+ len -= 1 - pos;
+ if (len < 1)
+ return "";
+ }
pos = 1;
- if (len < 1)
- return "";
}
return s.substring(pos - 1, len);
diff --git a/WebCore/xml/XSLTProcessorLibxslt.cpp b/WebCore/xml/XSLTProcessorLibxslt.cpp
index 4ac9f4c..ed4303d 100644
--- a/WebCore/xml/XSLTProcessorLibxslt.cpp
+++ b/WebCore/xml/XSLTProcessorLibxslt.cpp
@@ -297,7 +297,7 @@ bool XSLTProcessor::transformToString(Node* sourceNode, String& mimeType, String
xsltTransformContextPtr transformContext = xsltNewTransformContext(sheet, sourceDoc);
registerXSLTExtensions(transformContext);
- // <http://bugs.webkit.org/show_bug.cgi?id=16077>: XSLT processor <xsl:sort> algorithm only compares by code point
+ // <http://bugs.webkit.org/show_bug.cgi?id=16077>: XSLT processor <xsl:sort> algorithm only compares by code point.
xsltSetCtxtSortFunc(transformContext, xsltUnicodeSortFunction);
// This is a workaround for a bug in libxslt.
diff --git a/WebKit/CMakeLists.txt b/WebKit/CMakeLists.txt
index 5b0cebd..6e0996c 100644
--- a/WebKit/CMakeLists.txt
+++ b/WebKit/CMakeLists.txt
@@ -2,6 +2,7 @@ SET(WebKit_INCLUDE_DIRECTORIES
"${WEBKIT_DIR}"
"${WEBCORE_DIR}"
"${WEBCORE_DIR}/bindings/js"
+ "${WEBCORE_DIR}/bindings"
"${WEBCORE_DIR}/bridge"
"${WEBCORE_DIR}/bridge/jsc"
"${WEBCORE_DIR}/css"
@@ -57,7 +58,7 @@ ADD_DEFINITIONS(-DBUILDING_WebKit)
INCLUDE_DIRECTORIES(${WebKit_INCLUDE_DIRECTORIES})
ADD_LIBRARY(${WebKit_LIBRARY_NAME} ${WebKit_LIBRARY_TYPE} ${WebKit_SOURCES})
TARGET_LINK_LIBRARIES(${WebKit_LIBRARY_NAME} ${WebKit_LIBRARIES})
-ADD_TARGET_PROPERTIES(${WebKit_LIBRARY_NAME} LINK_FLAGS ${WebKit_LINK_FLAGS})
+ADD_TARGET_PROPERTIES(${WebKit_LIBRARY_NAME} LINK_FLAGS "${WebKit_LINK_FLAGS}")
INSTALL(TARGETS ${WebKit_LIBRARY_NAME} DESTINATION lib)
diff --git a/WebKit/CMakeListsEfl.txt b/WebKit/CMakeListsEfl.txt
index 7eeddeb..2fc964b 100644
--- a/WebKit/CMakeListsEfl.txt
+++ b/WebKit/CMakeListsEfl.txt
@@ -17,7 +17,7 @@ LIST(APPEND WebKit_INCLUDE_DIRECTORIES
${EVAS_INCLUDE_DIRS}
${Gdk_INCLUDE_DIRS}
${Glib_INCLUDE_DIRS}
- ${LIBSOUP2_INCLUDE_DIRS}
+ ${LIBSOUP24_INCLUDE_DIRS}
${LIBXML2_INCLUDE_DIRS}
${LIBXSLT_INCLUDE_DIRS}
${SQLITE_INCLUDE_DIRS}
@@ -50,7 +50,7 @@ LIST(APPEND WebKit_LIBRARIES
${Gdk_LIBRARIES}
${Glib_LIBRARIES}
${Gtk_LIBRARIES}
- ${LIBSOUP_LIBRARIES}
+ ${LIBSOUP24_LIBRARIES}
${LIBXML2_LIBRARIES}
${Pango_LIBRARIES}
${SQLITE_LIBRARIES}
@@ -79,7 +79,7 @@ SET(EWebLauncher_LIBRARIES
${EVAS_LIBRARIES}
${Gdk_LIBRARIES}
${Glib_LIBRARIES}
- ${LIBSOUP2_LIBRARIES}
+ ${LIBSOUP24_LIBRARIES}
${LIBXML2_LIBRARIES}
${LIBXSLT_LIBRARIES}
${SQLITE_LIBRARIES}
@@ -90,11 +90,12 @@ SET(EWebLauncher_LINK_FLAGS
${EDJE_LDFLAGS}
${EFLDEPS_LDFLAGS}
${EVAS_LDFLAGS}
+ ${LIBSOUP24_LDFLAGS}
)
ADD_EXECUTABLE(../Programs/EWebLauncher ${EWebLauncher_SOURCES})
TARGET_LINK_LIBRARIES(../Programs/EWebLauncher ${EWebLauncher_LIBRARIES})
-ADD_TARGET_PROPERTIES(../Programs/EWebLauncher LINK_FLAGS ${EWebLauncher_LINK_FLAGS})
+ADD_TARGET_PROPERTIES(../Programs/EWebLauncher LINK_FLAGS "${EWebLauncher_LINK_FLAGS}")
IF (SHARED_CORE)
SET(LIBS_PRIVATE "-l${WTF_LIBRARY_NAME} -l${JavaScriptCore_LIBRARY_NAME} -l${WebCore_LIBRARY_NAME}")
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 7ba39c3..bbf5170 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,178 @@
+2010-07-12 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed build fix after r60050.
+
+ * CMakeLists.txt: Add WebCore/bindings to the include path.
+
+2010-07-11 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Adam Barth.
+
+ [EFL] Fix style errors in ewk_private.h.
+ https://bugs.webkit.org/show_bug.cgi?id=41742
+
+ * efl/ewk/ewk_private.h:
+
+2010-07-09 Darin Adler <darin@apple.com>
+
+ * StringsNotToBeLocalized.txt: Updated for recent changes.
+
+2010-07-08 Joone Hur <joone@kldp.org>
+
+ Reviewed by Antonio Gomes.
+
+ [EFL] fix cmake build for EWebLauncher
+ https://bugs.webkit.org/show_bug.cgi?id=41830
+
+ * CMakeListsEfl.txt: add ${LIBSOUP24_LDFLAGS} for link flags
+
+2010-07-08 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [EFL] Implement several notification hooks in FrameLoaderClient.
+ We just notify browser, making the appropriate type conversions about
+ the events occurring in WebCore.
+ https://bugs.webkit.org/show_bug.cgi?id=41005
+
+ * efl/WebCoreSupport/FrameLoaderClientEfl.cpp:
+ (WebCore::FrameLoaderClientEfl::dispatchWillSendRequest): alloc 2 new
+ wrapper structures in stack in order to give client the opportunity to
+ change parameters. Then, call the function it defines.
+ (WebCore::FrameLoaderClientEfl::assignIdentifierToInitialRequest):
+ (WebCore::FrameLoaderClientEfl::didPerformFirstNavigation): notify
+ client.
+ (WebCore::FrameLoaderClientEfl::saveViewStateToItem): notify client.
+ (WebCore::FrameLoaderClientEfl::restoreViewState): notify client.
+ (WebCore::FrameLoaderClientEfl::dispatchDidChangeLocationWithinPage):
+ notify browser that the url changed.
+ (WebCore::FrameLoaderClientEfl::dispatchDidReceiveIcon): notify
+ browser.
+ (WebCore::FrameLoaderClientEfl::dispatchDidStartProvisionalLoad):
+ notify browser.
+ (WebCore::FrameLoaderClientEfl::dispatchDidFinishDocumentLoad): notify
+ browser.
+ (WebCore::FrameLoaderClientEfl::dispatchDidFirstLayout): norify
+ browser.
+ (WebCore::FrameLoaderClientEfl::dispatchDidFirstVisuallyNonEmptyLayout):
+ notify browser.
+ (WebCore::FrameLoaderClientEfl::dispatchShow): notify browser.
+ * efl/ewk/ewk_frame.cpp:
+ (ewk_frame_request_will_send): emit signal notifying browser.
+ (ewk_frame_request_assign_identifier): emit signal notifying browser.
+ (ewk_frame_did_perform_first_navigation): emit signal notifying browser.
+ (ewk_frame_view_state_save): emit signal notifying browser.
+ (ewk_frame_load_provisional): emit signal notifying browser.
+ (ewk_frame_load_firstlayout_finished): emit signal notifying browser.
+ (ewk_frame_load_firstlayout_nonempty_finished): emit signal notifying browser.
+ (ewk_frame_load_document_finished): emit signal notifying browser.
+ * efl/ewk/ewk_frame.h: update documentation about signals being sent
+ and implement wrapper struct for ResourceRequest.
+ * efl/ewk/ewk_private.h: export private functions.
+
+2010-07-08 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [EFL] Flush backing store when going to new page.
+ Call client method to flush backing store when going to a new page. This
+ is the notification that data related to current page should be dropped,
+ since a new page is being loaded.
+ https://bugs.webkit.org/show_bug.cgi?id=41008
+
+ * efl/WebCoreSupport/FrameLoaderClientEfl.cpp:
+ (WebCore::FrameLoaderClientEfl::transitionToCommittedForNewPage):
+
+2010-07-07 Lucas De Marchi <lucas.demarchi@profusion.mobi>
+
+ Unreviewed build fix after r62676.
+
+ [EFL] Fix build after Page constructor has changed. By now, the
+ introduced BackForwardControllerClient is not used.
+ https://bugs.webkit.org/show_bug.cgi?id=41825
+
+ * efl/ewk/ewk_view.cpp:
+ (_ewk_view_priv_new): Add missing parameter to WebCore::Page
+ constructor.
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Rename the WebBaseNetscapePluginStream.cpp and .h files to WebNetscapePluginStream.cpp and .h to match the class name.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+2010-07-07 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [EFL] EFLWebKit doesn't support viewport meta tag.
+ Support viewport meta tag on EFL Port.
+ https://bugs.webkit.org/show_bug.cgi?id=40278
+
+ * efl/EWebLauncher/main.c: Process 'viewport,changed' signal.
+ (viewport_set):
+ (on_viewport_changed): Add a callback function for the 'viewport,changed' signal.
+ (browserCreate): Register the callback function for the 'viewport,changed' signal.
+ * efl/WebCoreSupport/ChromeClientEfl.cpp: Implement method to process viewport tag.
+ (WebCore::ChromeClientEfl::didReceiveViewportArguments):
+ * efl/WebCoreSupport/ChromeClientEfl.h: Define method to process viewport tag.
+ * efl/WebCoreSupport/FrameLoaderClientEfl.cpp:
+ (WebCore::FrameLoaderClientEfl::FrameLoaderClientEfl): Implement a function to set layout
+ when website doesn't contain viewport tag.
+ (WebCore::FrameLoaderClientEfl::dispatchDidCommitLoad):
+ (WebCore::FrameLoaderClientEfl::dispatchDidFirstLayout):
+ * efl/WebCoreSupport/FrameLoaderClientEfl.h:
+ (WebCore::FrameLoaderClientEfl::setInitLayoutCompleted):
+ (WebCore::FrameLoaderClientEfl::getInitLayoutCompleted):
+ * efl/ewk/ewk_private.h: Added internal APIs to process viewport tag.
+ * efl/ewk/ewk_view.cpp: Added APIs to process and to handle viewport tag.
+ (_ewk_view_priv_new):
+ (ewk_view_fixed_layout_size_set):
+ (ewk_view_zoom_set):
+ (ewk_view_zoom_weak_set):
+ (ewk_view_zoom_animated_set):
+ (ewk_view_viewport_set): Reports that viewport has changed.
+ (ewk_view_viewport_get): Reports that viewport has changed.
+ (ewk_view_zoom_range_set): Sets the zoom range.
+ (ewk_view_zoom_range_min_get): Gets minimum value of zoom range.
+ (ewk_view_zoom_range_max_get): Gets maximum value of zoom range.
+ (ewk_view_user_scalable_set): Sets if zoom is enabled.
+ (ewk_view_user_scalable_get): Gets if zoom is enabled.
+ * efl/ewk/ewk_view.h:
+
+2010-07-07 Rafael Antognolli <antognolli@profusion.mobi>
+
+ Reviewed by Adam Barth.
+
+ [EFL] Fix cmake build and libsoup detection
+ Some changes should be done to cmake build system to fix the detection of libsoup and correct some link paths:
+ - LINK_FLAGS should be set using quotes, otherwise some wrong
+ substitution takes place;
+ - we should use LIBSOUP24_* instead of LIBSOUP_* since this is the
+ version we are using;
+ - need to set HAVE_LIBSOUP_2_29_90 if we find a version equal or newer
+ than that.
+ https://bugs.webkit.org/show_bug.cgi?id=41717
+
+ * CMakeLists.txt:
+ * CMakeListsEfl.txt:
+
+2010-07-05 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [EFL] Implement downloadURL in ContextMenuClientEfl
+ When user selects a download menu from context menu, send the download
+ request to application.
+ https://bugs.webkit.org/show_bug.cgi?id=41149
+
+ * efl/WebCoreSupport/ContextMenuClientEfl.cpp:
+ (WebCore::ContextMenuClientEfl::downloadURL): Get url for downloading
+ file and Send it to application.
+ * efl/WebCoreSupport/ContextMenuClientEfl.h:
+
2010-06-30 Gyuyoung Kim <gyuyoung.kim@samsung.com>
Reviewed by Kenneth Rohde Christiansen.
diff --git a/WebKit/StringsNotToBeLocalized.txt b/WebKit/StringsNotToBeLocalized.txt
index 9fbaa7f..d23cafa 100644
--- a/WebKit/StringsNotToBeLocalized.txt
+++ b/WebKit/StringsNotToBeLocalized.txt
@@ -67,7 +67,8 @@
"0"
"062AEEE3-9E42-44DC-A8A9-236B216FE011"
"1"
-"10.1.51.95"
+"10.1"
+"10.1.53.60"
"1000"
"12px"
"13"
@@ -688,7 +689,6 @@
"mainFrameTitle"
"mainFrameURL"
"mimeType"
-"name: %@\npath: %@\nmimeTypes:\n%@\npluginDescription:%@"
"nameFieldLabel"
"net.hmdt-web.Shiira"
"oleacc.dll"
@@ -769,9 +769,6 @@ WebKit/mac/Plugins/Hosted/NetscapePluginHostProxy.mm:"message"
WebKit/mac/Plugins/Hosted/NetscapePluginHostProxy.mm:"prompt"
WebKit/mac/Plugins/Hosted/NetscapePluginHostProxy.mm:"title"
WebKit/mac/Plugins/Hosted/ProxyInstance.mm
-WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:" OK\n"
-WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:": "
-WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm:"identity"
WebKit/mac/Plugins/WebBaseNetscapePluginView.mm:"DIRECT"
WebKit/mac/Plugins/WebBaseNetscapePluginView.mm:"PROXY "
WebKit/mac/Plugins/WebBaseNetscapePluginView.mm:"SOCKS "
@@ -781,6 +778,9 @@ WebKit/mac/Plugins/WebBaseNetscapePluginView.mm:"true"
WebKit/mac/Plugins/WebBasePluginPackage.mm:"Java Applet Plugin Enabler"
WebKit/mac/Plugins/WebNetscapePluginPackage.mm:"RealPlayer Plugin"
WebKit/mac/Plugins/WebNetscapePluginPackage.mm:"main"
+WebKit/mac/Plugins/WebNetscapePluginStream.mm:" OK\n"
+WebKit/mac/Plugins/WebNetscapePluginStream.mm:": "
+WebKit/mac/Plugins/WebNetscapePluginStream.mm:"identity"
WebKit/mac/Plugins/WebNetscapePluginView.mm:"height"
WebKit/mac/Plugins/WebNetscapePluginView.mm:"width"
WebKit/mac/WebCoreSupport/WebChromeClient.mm:"dialog"
@@ -838,6 +838,7 @@ WebKit/mac/WebView/WebPreferences.mm:"ISO-8859-1"
WebKit/mac/WebView/WebPreferences.mm:"Identifier"
WebKit/mac/WebView/WebPreferences.mm:"Papyrus"
WebKit/mac/WebView/WebPreferences.mm:"Values"
+WebKit/mac/WebView/WebVideoFullscreenController.mm:"WebKit playing a video fullscreen."
WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm:"maxValue"
WebKit/mac/WebView/WebView.mm:"At least one WebView is still open."
WebKit/mac/WebView/WebView.mm:"At least one WebView was closed with fast teardown."
diff --git a/WebKit/WebKit.xcodeproj/project.pbxproj b/WebKit/WebKit.xcodeproj/project.pbxproj
index 66d2cd3..4c470e6 100644
--- a/WebKit/WebKit.xcodeproj/project.pbxproj
+++ b/WebKit/WebKit.xcodeproj/project.pbxproj
@@ -162,7 +162,7 @@
939810270824BF01008DF038 /* WebStringTruncator.h in Headers */ = {isa = PBXBuildFile; fileRef = F59668C802AD2923018635CA /* WebStringTruncator.h */; settings = {ATTRIBUTES = (Private, ); }; };
939810290824BF01008DF038 /* WebAuthenticationPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = F8CA15B5029A39D901000122 /* WebAuthenticationPanel.h */; };
9398102A0824BF01008DF038 /* WebPanelAuthenticationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 93154EF103A41270008635CE /* WebPanelAuthenticationHandler.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 9398102B0824BF01008DF038 /* WebBaseNetscapePluginStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A672B90263866E01000102 /* WebBaseNetscapePluginStream.h */; };
+ 9398102B0824BF01008DF038 /* WebNetscapePluginStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A672B90263866E01000102 /* WebNetscapePluginStream.h */; };
9398102E0824BF01008DF038 /* WebBasePluginPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E4AF46036652150000E506 /* WebBasePluginPackage.h */; };
939810310824BF01008DF038 /* WebNetscapePluginPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F7171E0288493C018635CA /* WebNetscapePluginPackage.h */; };
939810350824BF01008DF038 /* WebPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 848DFF840365FE6A00CA2ACA /* WebPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -259,7 +259,7 @@
939810CC0824BF01008DF038 /* WebStringTruncator.mm in Sources */ = {isa = PBXBuildFile; fileRef = F59668C902AD2923018635CA /* WebStringTruncator.mm */; };
939810CF0824BF01008DF038 /* WebAuthenticationPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = F8CA15B6029A39D901000122 /* WebAuthenticationPanel.m */; };
939810D00824BF01008DF038 /* WebPanelAuthenticationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 93154EF203A41270008635CE /* WebPanelAuthenticationHandler.m */; };
- 939810D10824BF01008DF038 /* WebBaseNetscapePluginStream.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5A672BA0263866E01000102 /* WebBaseNetscapePluginStream.mm */; };
+ 939810D10824BF01008DF038 /* WebNetscapePluginStream.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5A672BA0263866E01000102 /* WebNetscapePluginStream.mm */; };
939810D30824BF01008DF038 /* WebBasePluginPackage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83E4AF47036652150000E506 /* WebBasePluginPackage.mm */; };
939810D60824BF01008DF038 /* WebNetscapePluginPackage.mm in Sources */ = {isa = PBXBuildFile; fileRef = F5F7171F0288493C018635CA /* WebNetscapePluginPackage.mm */; };
939810DA0824BF01008DF038 /* WebPluginController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8467275D0367158500CA2ACA /* WebPluginController.mm */; };
@@ -679,8 +679,8 @@
F59EAE3E0253C7EE018635CA /* WebCoreStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreStatistics.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F59EAE410253C8DE018635CA /* WebCoreStatistics.mm */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreStatistics.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5A55DC702BAA2E8018635CC /* WebHTMLRepresentationPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebHTMLRepresentationPrivate.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- F5A672B90263866E01000102 /* WebBaseNetscapePluginStream.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebBaseNetscapePluginStream.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
- F5A672BA0263866E01000102 /* WebBaseNetscapePluginStream.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 4; path = WebBaseNetscapePluginStream.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
+ F5A672B90263866E01000102 /* WebNetscapePluginStream.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapePluginStream.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
+ F5A672BA0263866E01000102 /* WebNetscapePluginStream.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 4; path = WebNetscapePluginStream.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5AEBB3D024A527601C1A526 /* WebPreferences.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 4; path = WebPreferences.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
F5B67130023EDF8901C1A525 /* url_icon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = url_icon.tiff; sourceTree = "<group>"; };
F5B92B820223191D01C1A525 /* WebHistoryPrivate.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebHistoryPrivate.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
@@ -1057,8 +1057,8 @@
1A9C78030EBBC455008599D4 /* Events */,
1A1F91430ECBB16F006351DA /* Hosted */,
F5F717230288493C018635CA /* npapi.mm */,
- F5A672B90263866E01000102 /* WebBaseNetscapePluginStream.h */,
- F5A672BA0263866E01000102 /* WebBaseNetscapePluginStream.mm */,
+ F5A672B90263866E01000102 /* WebNetscapePluginStream.h */,
+ F5A672BA0263866E01000102 /* WebNetscapePluginStream.mm */,
1A4DF5E20EC8D104006BD4B4 /* WebBaseNetscapePluginView.h */,
1A4DF5E30EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm */,
0AB752350FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h */,
@@ -1370,7 +1370,7 @@
939810110824BF01008DF038 /* WebBackForwardList.h in Headers */,
51C714FB0B20F79F00E5E33C /* WebBackForwardListInternal.h in Headers */,
22F219CC08D236730030E078 /* WebBackForwardListPrivate.h in Headers */,
- 9398102B0824BF01008DF038 /* WebBaseNetscapePluginStream.h in Headers */,
+ 9398102B0824BF01008DF038 /* WebNetscapePluginStream.h in Headers */,
1A4DF5E40EC8D104006BD4B4 /* WebBaseNetscapePluginView.h in Headers */,
9398102E0824BF01008DF038 /* WebBasePluginPackage.h in Headers */,
5241ADF50B1BC48A004012BD /* WebCache.h in Headers */,
@@ -1789,7 +1789,7 @@
9398111D0824BF01008DF038 /* WebArchive.mm in Sources */,
939810CF0824BF01008DF038 /* WebAuthenticationPanel.m in Sources */,
939810BC0824BF01008DF038 /* WebBackForwardList.mm in Sources */,
- 939810D10824BF01008DF038 /* WebBaseNetscapePluginStream.mm in Sources */,
+ 939810D10824BF01008DF038 /* WebNetscapePluginStream.mm in Sources */,
1A4DF5E50EC8D104006BD4B4 /* WebBaseNetscapePluginView.mm in Sources */,
939810D30824BF01008DF038 /* WebBasePluginPackage.mm in Sources */,
5241ADF60B1BC48A004012BD /* WebCache.mm in Sources */,
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 29cf8f4..4356f21 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,659 @@
+2010-07-12 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r63171.
+ http://trac.webkit.org/changeset/63171
+ https://bugs.webkit.org/show_bug.cgi?id=42144
+
+ Broke Chromium canary (Requested by tkent on #webkit).
+
+ * WebKit.gyp:
+
+2010-07-12 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by David Levin.
+
+ [Chromium] Upstreaming inspector_resources target
+ https://bugs.webkit.org/show_bug.cgi?id=41669
+
+ 'inspector_resource' is currently in src/webkit/webkit.gyp of
+ Chromium tree. We move it to WebKit tree because:
+ - DumpRenderTree in WebKit tree needs it, and
+ - It's hard to refer to WebKit.gypi and WebCore.gypi from
+ webkit_support in both cases of Chromium-tree build and
+ WebKit-tree build.
+
+ * WebKit.gyp:
+
+2010-07-12 Viet-Trung Luu <viettrungluu@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Pass key down events on to plugins.
+ https://bugs.webkit.org/show_bug.cgi?id=42113
+
+ * src/WebPluginContainerImpl.cpp:
+ (WebKit::WebPluginContainerImpl::handleKeyboardEvent):
+
+2010-07-12 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Joseph Pecoraro.
+
+ Web Inspector: provide starts and ends for network phases instead of duration.
+
+ https://bugs.webkit.org/show_bug.cgi?id=42091
+
+ * public/WebURLLoadTiming.h:
+ * public/WebURLResponse.h:
+ * src/WebURLLoadTiming.cpp:
+ (WebKit::WebURLLoadTiming::proxyStart):
+ (WebKit::WebURLLoadTiming::setProxyStart):
+ (WebKit::WebURLLoadTiming::proxyEnd):
+ (WebKit::WebURLLoadTiming::setProxyEnd):
+ (WebKit::WebURLLoadTiming::dnsStart):
+ (WebKit::WebURLLoadTiming::setDNSStart):
+ (WebKit::WebURLLoadTiming::dnsEnd):
+ (WebKit::WebURLLoadTiming::setDNSEnd):
+ (WebKit::WebURLLoadTiming::connectStart):
+ (WebKit::WebURLLoadTiming::setConnectStart):
+ (WebKit::WebURLLoadTiming::connectEnd):
+ (WebKit::WebURLLoadTiming::setConnectEnd):
+ (WebKit::WebURLLoadTiming::sendStart):
+ (WebKit::WebURLLoadTiming::setSendStart):
+ (WebKit::WebURLLoadTiming::sendEnd):
+ (WebKit::WebURLLoadTiming::setSendEnd):
+ (WebKit::WebURLLoadTiming::receiveHeadersStart):
+ (WebKit::WebURLLoadTiming::setReceiveHeadersStart):
+ (WebKit::WebURLLoadTiming::receiveHeadersEnd):
+ (WebKit::WebURLLoadTiming::setReceiveHeadersEnd):
+ (WebKit::WebURLLoadTiming::sslStart):
+ (WebKit::WebURLLoadTiming::setSSLStart):
+ (WebKit::WebURLLoadTiming::sslEnd):
+ (WebKit::WebURLLoadTiming::setSSLEnd):
+ * src/WebURLResponse.cpp:
+ (WebKit::WebURLResponse::wasCached):
+ (WebKit::WebURLResponse::setWasCached):
+
+2010-07-12 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r63156.
+ http://trac.webkit.org/changeset/63156
+ https://bugs.webkit.org/show_bug.cgi?id=42129
+
+ broke chromium compile (Requested by jamesr on #webkit).
+
+ * WebKit.gyp:
+ * public/WebAccessibilityObject.h:
+ * public/WebAttribute.h: Removed.
+ * public/WebDocumentType.h: Removed.
+ * public/WebElement.h:
+ * public/WebNamedNodeMap.h: Removed.
+ * public/WebNode.h:
+ * public/WebRenderStyle.h: Removed.
+ * src/WebAccessibilityObject.cpp:
+ * src/WebAttribute.cpp: Removed.
+ * src/WebDocumentType.cpp: Removed.
+ * src/WebElement.cpp:
+ * src/WebNamedNodeMap.cpp: Removed.
+ * src/WebNode.cpp:
+ * src/WebRenderStyle.cpp: Removed.
+
+2010-07-12 Dominic Mazzoni <dmazzoni@google.com>
+
+ Reviewed by Darin Fisher.
+
+ Add methods to WebAccessibilityObject to access the Node and
+ Document, and then add methods to access some document, node,
+ and element properties needed for Windows accessibility.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41569
+
+ * WebKit.gyp:
+ * public/WebAccessibilityObject.h:
+ * public/WebAttribute.h: Added.
+ (WebKit::WebAttribute::~WebAttribute):
+ (WebKit::WebAttribute::WebAttribute):
+ (WebKit::WebAttribute::operator=):
+ * public/WebDocumentType.h: Added.
+ (WebKit::WebDocumentType::WebDocumentType):
+ (WebKit::WebDocumentType::operator=):
+ (WebKit::WebDocumentType::assign):
+ * public/WebElement.h:
+ * public/WebNamedNodeMap.h: Added.
+ (WebKit::WebNamedNodeMap::~WebNamedNodeMap):
+ (WebKit::WebNamedNodeMap::WebNamedNodeMap):
+ (WebKit::WebNamedNodeMap::operator=):
+ * public/WebNode.h:
+ * public/WebRenderStyle.h: Added.
+ (WebKit::WebRenderStyle::~WebRenderStyle):
+ (WebKit::WebRenderStyle::WebRenderStyle):
+ (WebKit::WebRenderStyle::operator=):
+ * src/WebAccessibilityObject.cpp:
+ (WebKit::WebAccessibilityObject::node):
+ (WebKit::WebAccessibilityObject::document):
+ * src/WebAttribute.cpp: Added.
+ (WebKit::WebAttribute::reset):
+ (WebKit::WebAttribute::assign):
+ (WebKit::WebAttribute::WebAttribute):
+ (WebKit::WebAttribute::localName):
+ (WebKit::WebAttribute::value):
+ * src/WebDocumentType.cpp: Added.
+ (WebKit::WebDocumentType::name):
+ (WebKit::WebDocumentType::WebDocumentType):
+ (WebKit::WebDocumentType::operator=):
+ (WebKit::WebDocumentType::operator PassRefPtr<DocumentType>):
+ * src/WebElement.cpp:
+ (WebKit::WebElement::attributes):
+ * src/WebNamedNodeMap.cpp: Added.
+ (WebKit::WebNamedNodeMap::reset):
+ (WebKit::WebNamedNodeMap::assign):
+ (WebKit::WebNamedNodeMap::WebNamedNodeMap):
+ (WebKit::WebNamedNodeMap::length):
+ (WebKit::WebNamedNodeMap::attributeItem):
+ * src/WebNode.cpp:
+ (WebKit::WebNode::element):
+ (WebKit::WebNode::hasComputedStyle):
+ (WebKit::WebNode::computedStyle):
+ * src/WebRenderStyle.cpp: Added.
+ (WebKit::WebRenderStyle::reset):
+ (WebKit::WebRenderStyle::assign):
+ (WebKit::WebRenderStyle::WebRenderStyle):
+ (WebKit::WebRenderStyle::display):
+
+2010-07-12 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ [Chromium] Crash when stepping on a breakpoint while debugging Web Inspector
+ https://bugs.webkit.org/show_bug.cgi?id=41958
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebView::willEnterModalLoop):
+ (WebKit::WebView::didExitModalLoop):
+
+2010-07-12 Jeremy Orlow <jorlow@chromium.org>
+
+ Speculative fix for visual studio retardedness.
+
+ * public/WebCommon.h:
+
+2010-07-12 Jeremy Orlow <jorlow@chromium.org>
+
+ Build fix. Add an include.
+
+ * public/WebCommon.h:
+
+2010-06-27 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Dumitru Daniliuc.
+
+ Implement IDBObjectStore.get/set/remove
+ https://bugs.webkit.org/show_bug.cgi?id=41250
+
+ Plumbing for new features, IDBKey, and added support
+ for both invalid (i.e. not serializable) and null
+ (i.e. the RefPtr was 0) to SerializedScriptValue.
+
+ * WebKit.gyp:
+ * public/WebIDBCallbacks.h:
+ (WebKit::WebIDBCallbacks::onSuccess):
+ * public/WebIDBKey.h: Added.
+ (WebKit::WebIDBKey::WebIDBKey):
+ (WebKit::WebIDBKey::operator=):
+ (WebKit::WebIDBKey::):
+ * public/WebIDBObjectStore.h:
+ (WebKit::WebIDBObjectStore::get):
+ (WebKit::WebIDBObjectStore::set):
+ (WebKit::WebIDBObjectStore::remove):
+ (WebKit::WebIDBObjectStore::createIndex):
+ (WebKit::WebIDBObjectStore::index):
+ (WebKit::WebIDBObjectStore::removeIndex):
+ * public/WebSerializedScriptValue.h:
+ * src/IDBCallbacksProxy.cpp:
+ (WebCore::IDBCallbacksProxy::onSuccess):
+ * src/IDBCallbacksProxy.h:
+ * src/IDBObjectStoreProxy.cpp:
+ (WebCore::IDBObjectStoreProxy::get):
+ (WebCore::IDBObjectStoreProxy::set):
+ (WebCore::IDBObjectStoreProxy::remove):
+ * src/IDBObjectStoreProxy.h:
+ * src/WebIDBCallbacksImpl.cpp:
+ (WebCore::WebIDBCallbacksImpl::onSuccess):
+ * src/WebIDBCallbacksImpl.h:
+ * src/WebIDBKey.cpp: Added.
+ (WebKit::WebIDBKey::~WebIDBKey):
+ (WebKit::WebIDBKey::createNull):
+ (WebKit::WebIDBKey::createInvalid):
+ (WebKit::WebIDBKey::assign):
+ (WebKit::WebIDBKey::assignNull):
+ (WebKit::WebIDBKey::assignInvalid):
+ (WebKit::WebIDBKey::type):
+ (WebKit::WebIDBKey::string):
+ (WebKit::WebIDBKey::number):
+ (WebKit::WebIDBKey::WebIDBKey):
+ (WebKit::WebIDBKey::operator=):
+ (WebKit::WebIDBKey::operator PassRefPtr<IDBKey>):
+ * src/WebIDBObjectStoreImpl.cpp:
+ (WebKit::WebIDBObjectStoreImpl::get):
+ (WebKit::WebIDBObjectStoreImpl::set):
+ (WebKit::WebIDBObjectStoreImpl::remove):
+ * src/WebIDBObjectStoreImpl.h:
+ * src/WebSerializedScriptValue.cpp:
+ (WebKit::WebSerializedScriptValue::createInvalid):
+
+2010-07-09 John Abd-El-Malek <jam@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Take out WebPlugin::supportsFind since we can accomplish the same thing by having a return value on startFind
+ https://bugs.webkit.org/show_bug.cgi?id=42011
+
+ * public/WebPlugin.h:
+ (WebKit::WebPlugin::startFind):
+
+2010-07-09 Leon Clarke <leonclarke@google.com>
+
+ Reviewed by Adam Barth.
+
+ add support for link prefetching
+ https://bugs.webkit.org/show_bug.cgi?id=3652
+
+ * public/WebURLRequest.h:
+ (WebKit::WebURLRequest::):
+
+2010-07-09 Michael Nordman <michaeln@google.com>
+
+ Reviewed by Dumitru Daniliuc.
+
+ Use class ProgressEvent when raising appcache related progress events and
+ set the 'total', 'loaded', and 'lengthComputable' attributes.
+ Also raise the final progress event with the 'total' and 'loaded' attribute
+ values are equal to one another to keep pace with the spec for this feature.
+ https://bugs.webkit.org/show_bug.cgi?id=37602
+
+ * src/ApplicationCacheHost.cpp:
+ (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
+ (WebCore::ApplicationCacheHost::stopDeferringEvents):
+ (WebCore::ApplicationCacheHost::dispatchDOMEvent):
+ * src/ApplicationCacheHostInternal.h:
+ (WebCore::ApplicationCacheHostInternal::notifyEventListener):
+ (WebCore::ApplicationCacheHostInternal::notifyProgressEventListener):
+
+2010-07-09 David Holloway <dhollowa@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Roll Chromium DEPS forward to r51736.
+ https://bugs.webkit.org/show_bug.cgi?id=41867
+
+ * DEPS:
+
+2010-07-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Not reviewed: chromium build fix.
+
+ * public/WebGLES2Context.h:
+
+2010-07-09 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ NotificationPresenter needs a cancelRequestPermission API
+ https://bugs.webkit.org/show_bug.cgi?id=41783
+
+ Updated the NotificationPresenter API.
+
+ * src/NotificationPresenterImpl.cpp:
+ (WebKit::NotificationPresenterImpl::checkPermission):
+ (WebKit::NotificationPresenterImpl::requestPermission):
+ * src/NotificationPresenterImpl.h:
+ (WebKit::NotificationPresenterImpl::cancelRequestsForPermission):
+
+2010-07-08 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Provide detailed network info in the resources panel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=40227
+
+ * WebKit.gyp:
+ * public/WebDevToolsAgent.h:
+ * public/WebURLLoadTiming.h: Added.
+ (WebKit::WebURLLoadTiming::~WebURLLoadTiming):
+ (WebKit::WebURLLoadTiming::WebURLLoadTiming):
+ (WebKit::WebURLLoadTiming::operator=):
+ (WebKit::WebURLLoadTiming::isNull):
+ * public/WebURLRequest.h:
+ * public/WebURLResponse.h:
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgentImpl::willSendRequest):
+ * src/WebDevToolsAgentImpl.h:
+ * src/WebURLLoadTiming.cpp: Added.
+ (WebKit::WebURLLoadTiming::initialize):
+ (WebKit::WebURLLoadTiming::reset):
+ (WebKit::WebURLLoadTiming::assign):
+ (WebKit::WebURLLoadTiming::setDomainLookupTimes):
+ (WebKit::WebURLLoadTiming::setConnectStartTime):
+ (WebKit::WebURLLoadTiming::setRequestTimes):
+ (WebKit::WebURLLoadTiming::setHeadersAvailableTime):
+ (WebKit::WebURLLoadTiming::WebURLLoadTiming):
+ (WebKit::WebURLLoadTiming::operator=):
+ (WebKit::WebURLLoadTiming::operator PassRefPtr<ResourceLoadTiming>):
+ * src/WebURLRequest.cpp:
+ (WebKit::WebURLRequest::reportLoadTiming):
+ (WebKit::WebURLRequest::setReportLoadTiming):
+ * src/WebURLResponse.cpp:
+ (WebKit::WebURLResponse::setConnectionID):
+ (WebKit::WebURLResponse::setLoadTiming):
+
+2010-07-08 Jay Civelli <jcivelli@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Exposing the EditorClient text field related methods
+ to the WebViewClient. Also adding some more accessors methods
+ to the WebNode and WebInputElement.
+ This is needed to move the password autocomplete out of the
+ Chromium WebKit API to the Chromium code.
+ https://bugs.webkit.org/show_bug.cgi?id=41286
+
+ * public/WebInputElement.h:
+ * public/WebNode.h:
+ (WebKit::operator!=):
+ (WebKit::operator<):
+ * public/WebViewClient.h:
+ (WebKit::WebViewClient::textFieldDidBeginEditing):
+ (WebKit::WebViewClient::textFieldDidEndEditing):
+ (WebKit::WebViewClient::textDidChangeInTextField):
+ (WebKit::WebViewClient::textFieldHandlingKeyDown):
+ (WebKit::WebViewClient::didAcceptAutocompleteSuggestion):
+ * src/EditorClientImpl.cpp:
+ (WebKit::EditorClientImpl::textFieldDidBeginEditing):
+ (WebKit::EditorClientImpl::textFieldDidEndEditing):
+ (WebKit::EditorClientImpl::textDidChangeInTextField):
+ (WebKit::EditorClientImpl::onAutocompleteSuggestionAccepted):
+ (WebKit::EditorClientImpl::doTextFieldCommandFromEvent):
+ * src/WebInputElement.cpp:
+ (WebKit::WebInputElement::readOnly):
+ (WebKit::WebInputElement::setSelectionRange):
+ (WebKit::WebInputElement::selectionStart):
+ (WebKit::WebInputElement::selectionEnd):
+ * src/WebNode.cpp:
+ (WebKit::WebNode::lessThan):
+
+2010-07-08 Aaron Boodman <aa@chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Add the ability for user scripts and user styles to affect just the top frame.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41529
+
+ * public/WebView.h:
+ (WebKit::WebView::):
+ (WebKit::WebView::addUserScript):
+ (WebKit::WebView::addUserStyleSheet):
+ * src/AssertMatchingEnums.cpp:
+ * src/WebViewImpl.cpp:
+ (WebKit::WebView::addUserScript):
+ (WebKit::WebView::addUserStyleSheet):
+
+2010-07-08 James Robinson <jamesr@google.com>
+
+ Reviewed by Darin Fisher.
+
+ Allow resizing and getting the texture ID from an offscreen GLES2Context
+ https://bugs.webkit.org/show_bug.cgi?id=41828
+
+ When using an offscreen GLES2Context the caller needs to be able to resize the backing store
+ managed by the embedder and get access to a texture id to pass to the compositor. WebGL
+ does these actions in an indirect way, it will be refactored to use this path.
+
+ * public/WebGLES2Context.h:
+ * src/GLES2Context.cpp:
+ (WebCore::GLES2Context::resizeOffscreenContent):
+ (WebCore::GLES2Context::getOffscreenContentParentTextureId):
+
+2010-07-08 Vitaly Repeshko <vitalyr@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ [chromium] Fix deletion has begun assert in TestWebPopupMenuImpl.
+ https://bugs.webkit.org/show_bug.cgi?id=41899
+
+ * tests/PopupMenuTest.cpp:
+ (WebKit::TestWebPopupMenuImpl::create):
+ (WebKit::TestWebViewClient::TestWebViewClient):
+ (WebKit::TestWebViewClient::createPopupMenu):
+
+2010-07-08 Vitaly Repeshko <vitalyr@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ [chromium] Fix deletion has begun assertion in TestImage destructor.
+ https://bugs.webkit.org/show_bug.cgi?id=41883
+
+ * tests/DragImageTest.cpp:
+ (WebCore::TestImage::create):
+ (WebCore::TEST):
+
+2010-07-08 Vitaly Repeshko <vitalyr@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Fix adoptRef usage violations (mostly in chromium)
+ https://bugs.webkit.org/show_bug.cgi?id=41863
+
+ * src/IDBCallbacksProxy.cpp:
+ (WebCore::IDBCallbacksProxy::create):
+ * src/WebPopupMenuImpl.cpp:
+ (WebKit::WebPopupMenu::create):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebView::create):
+
+2010-07-07 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Crash when re-entering message loop
+
+ Allow re-entrancy of the message loop by tracking all suspended pages
+ through a PageGroupLoadDeferrer stack.
+ https://bugs.webkit.org/show_bug.cgi?id=41697
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebView::willEnterModalLoop):
+ (WebKit::WebView::didExitModalLoop):
+ * src/js/Tests.js:
+ (.TestSuite.prototype.evaluateInConsole_):
+ (.TestSuite.prototype.testCompletionOnPause):
+ (.TestSuite.prototype.testMessageLoopReentrant.this):
+
+2010-07-08 David Holloway <dhollowa@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Exposes WebNode::unwrap() and WebNode::constUnwrap() for
+ use by other code in WebKit/chromium/src.
+
+ Specific use of these methods is made in WebFrameImpl.cpp. This is
+ preferred to the cast operator call that was happening prior to this
+ change.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41477
+
+ * public/WebNode.h:
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::registerPasswordListener):
+ (WebKit::WebFrameImpl::notifiyPasswordListenerOfAutocomplete):
+ (WebKit::WebFrameImpl::getPasswordListener):
+ * src/WebFrameImpl.h:
+
+2010-07-07 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: convert script offset to webkit format
+ https://bugs.webkit.org/show_bug.cgi?id=41755
+
+ * src/js/DebuggerScript.js:
+ ():
+
+2010-07-07 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [DRT/Chromium] DumpRenderTree should depend on ImageDiff
+ https://bugs.webkit.org/show_bug.cgi?id=41749
+
+ We usually use DumpRenderTree with ImageDiff. So ImageDiff should
+ be built with DumpRenderTree. Without this change, ImageDiff is not
+ built in a case of Chromium tree build.
+ test_shell in Chromium tree also depends on image_diff.
+
+ * WebKit.gyp:
+
+2010-07-07 John Abd-El-Malek <jam@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Add a few more methods to WebPlugin so that Pepper v2 plugins can support copy/zoom/find
+ https://bugs.webkit.org/show_bug.cgi?id=41649
+
+ * public/WebPlugin.h:
+ (WebKit::WebPlugin::hasSelection):
+ (WebKit::WebPlugin::selectionAsText):
+ (WebKit::WebPlugin::selectionAsMarkup):
+ (WebKit::WebPlugin::setZoomFactor):
+ (WebKit::WebPlugin::supportsFind):
+ (WebKit::WebPlugin::startFind):
+ (WebKit::WebPlugin::selectFindResult):
+ (WebKit::WebPlugin::stopFind):
+ * src/ContextMenuClientImpl.cpp:
+ (WebKit::ContextMenuClientImpl::getCustomMenuFromDefaultItems):
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::pluginContainerFromFrame):
+ (WebKit::ChromePluginPrintContext::end):
+ (WebKit::ChromePluginPrintContext::computePageRects):
+ (WebKit::ChromePluginPrintContext::spoolPage):
+ (WebKit::WebFrameImpl::executeCommand):
+ * src/WebFrameImpl.h:
+ * src/WebPluginContainerImpl.cpp:
+ (WebKit::WebPluginContainerImpl::copy):
+ (WebKit::WebPluginContainerImpl::handleKeyboardEvent):
+ * src/WebPluginContainerImpl.h:
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::setZoomLevel):
+
+2010-07-07 James Hawkins <jhawkins@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Chromium] Add setSuggestedValue to WebInputElement
+ https://bugs.webkit.org/show_bug.cgi?id=41785
+
+ * public/WebInputElement.h:
+ * src/WebInputElement.cpp:
+ (WebKit::WebInputElement::setSuggestedValue):
+ (WebKit::WebInputElement::suggestedValue):
+
+2010-07-07 James Robinson <jamesr@chromium.org> and Vincent Scheib <schieb@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ WebCore::GLES2Context should allow creating onscreen and offscreen contexts
+ https://bugs.webkit.org/show_bug.cgi?id=41492
+
+ You should be able to create a GLES2Context for rendering both on screen
+ and off screen (to a texture). Currently WebGL does the latter by side
+ stepping the WebCore::GLES2Context API completely. Longer term it should
+ move over to using this.
+
+ * src/GLES2Context.cpp:
+ (WebCore::GLES2ContextInternal::initializeOnscreen):
+ (WebCore::GLES2ContextInternal::initializeOffscreen):
+ (WebCore::GLES2Context::createOnscreen):
+ (WebCore::GLES2Context::createOffscreen):
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
+ Add basic piping for BackForwardControllerClient.
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::WebViewImpl):
+
+2010-07-07 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r62645.
+ http://trac.webkit.org/changeset/62645
+ https://bugs.webkit.org/show_bug.cgi?id=41757
+
+ "Broken inspector tests on several platforms" (Requested by
+ eseidel on #webkit).
+
+ * src/js/DebuggerScript.js:
+ ():
+
+2010-07-07 Pavel Podivilov <podivilov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: if breakpoints were deactivated, add new breakpoints as disabled.
+ https://bugs.webkit.org/show_bug.cgi?id=41461
+
+ * src/js/DebuggerScript.js:
+ ():
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Try to fix build.
+
+ Why do the Chromium bots stop after the first error they encounter?
+
+ * src/WebWorkerImpl.cpp:
+ (WebKit::WebWorkerImpl::postMessageToWorkerContextTask): Removed
+ unneeded release called on a PassOwnPtr to pass it as an argument of
+ type PassOwnPtr.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Try to fix build.
+
+ * src/WebWorkerBase.cpp:
+ (WebKit::WebWorkerBase::dispatchTaskToMainThread): Use leakPtr instead
+ of release.
+ * src/WebWorkerClientImpl.cpp:
+ (WebKit::WebWorkerClientImpl::postMessageToWorkerObjectTask): Removed
+ unneeded release called on a PassOwnPtr to pass it as an argument of
+ type PassOwnPtr.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Try to fix build.
+
+ * src/WebSharedWorkerImpl.cpp:
+ (WebKit::WebSharedWorkerImpl::connectTask): Removed unneeded release
+ called on a PassOwnPtr to pass it as an argument of type PassOwnPtr.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Try to fix build.
+
+ * src/WebDataSourceImpl.cpp:
+ (WebKit::WebDataSourceImpl::setNextPluginLoadObserver): Call leakPtr
+ here instead of release. Comment makes it really unclear why it's OK!
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Try to fix build.
+
+ * src/SharedWorkerRepository.cpp:
+ (WebCore::SharedWorkerRepository::connect): Removed unneeded release
+ called on a PassOwnPtr to pass it as an argument of type PassOwnPtr.
+
2010-07-05 Yury Semikhatsky <yurys@chromium.org>
Reviewed by Pavel Feldman.
diff --git a/WebKit/chromium/DEPS b/WebKit/chromium/DEPS
index fe3754f..63509ff 100644
--- a/WebKit/chromium/DEPS
+++ b/WebKit/chromium/DEPS
@@ -32,7 +32,7 @@
vars = {
'chromium_svn': 'http://src.chromium.org/svn/trunk/src',
- 'chromium_rev': '51287',
+ 'chromium_rev': '51736',
}
deps = {
diff --git a/WebKit/chromium/WebKit.gyp b/WebKit/chromium/WebKit.gyp
index e2da1b4..8143049 100644
--- a/WebKit/chromium/WebKit.gyp
+++ b/WebKit/chromium/WebKit.gyp
@@ -141,6 +141,7 @@
'public/WebIDBDatabase.h',
'public/WebIDBDatabaseError.h',
'public/WebIDBIndex.h',
+ 'public/WebIDBKey.h',
'public/WebIDBObjectStore.h',
'public/WebIndexedDatabase.h',
'public/WebInputElement.h',
@@ -211,6 +212,7 @@
'public/WebURL.h',
'public/WebURLError.h',
'public/WebURLLoader.h',
+ 'public/WebURLLoadTiming.h',
'public/WebURLLoaderClient.h',
'public/WebURLRequest.h',
'public/WebURLResponse.h',
@@ -364,6 +366,7 @@
'src/WebIDBDatabaseImpl.h',
'src/WebIDBIndexImpl.cpp',
'src/WebIDBIndexImpl.h',
+ 'src/WebIDBKey.cpp',
'src/WebIDBObjectStoreImpl.cpp',
'src/WebIDBObjectStoreImpl.h',
'src/WebImageCG.cpp',
@@ -422,6 +425,7 @@
'src/WebStorageNamespaceImpl.h',
'src/WebString.cpp',
'src/WebURL.cpp',
+ 'src/WebURLLoadTiming.cpp',
'src/WebURLRequest.cpp',
'src/WebURLRequestPrivate.h',
'src/WebURLResponse.cpp',
@@ -604,6 +608,7 @@
'type': 'executable',
'mac_bundle': 1,
'dependencies': [
+ 'ImageDiff',
'webkit',
'../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:wtf_config',
'<(chromium_src_dir)/third_party/icu/icu.gyp:icuuc',
diff --git a/WebKit/chromium/public/WebCommon.h b/WebKit/chromium/public/WebCommon.h
index 7872729..5f441b7 100644
--- a/WebKit/chromium/public/WebCommon.h
+++ b/WebKit/chromium/public/WebCommon.h
@@ -80,9 +80,17 @@
#include <stddef.h> // For size_t
+#if defined(WIN32)
+// Visual Studio doesn't have stdint.h.
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned int uint32_t;
+#endif
+
namespace WebKit {
- // UTF-16 character type
+// UTF-16 character type
#if defined(WIN32)
typedef wchar_t WebUChar;
#else
diff --git a/WebKit/chromium/public/WebDevToolsAgent.h b/WebKit/chromium/public/WebDevToolsAgent.h
index 3bdee3c..0e26cc9 100644
--- a/WebKit/chromium/public/WebDevToolsAgent.h
+++ b/WebKit/chromium/public/WebDevToolsAgent.h
@@ -81,7 +81,7 @@ public:
WEBKIT_API static void setMessageLoopDispatchHandler(MessageLoopDispatchHandler);
virtual void identifierForInitialRequest(unsigned long resourceId, WebFrame*, const WebURLRequest&) = 0;
- virtual void willSendRequest(unsigned long resourceId, const WebURLRequest&) = 0;
+ virtual void willSendRequest(unsigned long resourceId, WebURLRequest&) = 0;
virtual void didReceiveData(unsigned long resourceId, int length) = 0;
virtual void didReceiveResponse(unsigned long resourceId, const WebURLResponse&) = 0;
virtual void didFinishLoading(unsigned long resourceId) = 0;
diff --git a/WebKit/chromium/public/WebGLES2Context.h b/WebKit/chromium/public/WebGLES2Context.h
index a7e9560..c67faf2 100644
--- a/WebKit/chromium/public/WebGLES2Context.h
+++ b/WebKit/chromium/public/WebGLES2Context.h
@@ -36,6 +36,7 @@
namespace WebKit {
+struct WebSize;
class WebView;
// This interface abstracts the creation and management of an
@@ -49,6 +50,14 @@ public:
virtual bool makeCurrent() = 0;
virtual bool destroy() = 0;
virtual bool swapBuffers() = 0;
+
+ // The follow two functions are for managing a context that renders offscreen.
+
+ // Resizes the backing store used for offscreen rendering.
+ virtual void resizeOffscreenContent(const WebSize&) = 0;
+
+ // Returns the ID of the texture used for offscreen rendering in the context of the parent.
+ virtual unsigned getOffscreenContentParentTextureId() = 0;
};
} // namespace WebKit
diff --git a/WebKit/chromium/public/WebIDBCallbacks.h b/WebKit/chromium/public/WebIDBCallbacks.h
index 0e28961..cee8612 100644
--- a/WebKit/chromium/public/WebIDBCallbacks.h
+++ b/WebKit/chromium/public/WebIDBCallbacks.h
@@ -32,6 +32,7 @@ namespace WebKit {
class WebIDBDatabase;
class WebIDBDatabaseError;
+class WebIDBKey;
class WebIDBIndex;
class WebIDBObjectStore;
class WebSerializedScriptValue;
@@ -45,6 +46,7 @@ public:
virtual void onError(const WebIDBDatabaseError&) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess() { WEBKIT_ASSERT_NOT_REACHED(); } // For "null".
virtual void onSuccess(WebIDBDatabase*) { WEBKIT_ASSERT_NOT_REACHED(); }
+ virtual void onSuccess(const WebIDBKey&) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(WebIDBIndex*) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(WebIDBObjectStore*) { WEBKIT_ASSERT_NOT_REACHED(); }
virtual void onSuccess(const WebSerializedScriptValue&) { WEBKIT_ASSERT_NOT_REACHED(); }
diff --git a/WebKit/chromium/public/WebIDBKey.h b/WebKit/chromium/public/WebIDBKey.h
new file mode 100644
index 0000000..876928a
--- /dev/null
+++ b/WebKit/chromium/public/WebIDBKey.h
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+#ifndef WebIDBKey_h
+#define WebIDBKey_h
+
+#include "WebCommon.h"
+#include "WebPrivatePtr.h"
+#include "WebString.h"
+
+namespace WebCore { class IDBKey; }
+
+namespace WebKit {
+
+class WebIDBKey {
+public:
+ ~WebIDBKey();
+
+ WEBKIT_API static WebIDBKey createNull();
+ WEBKIT_API static WebIDBKey createInvalid();
+
+ WebIDBKey(const WebString& string) { assign(string); }
+ WebIDBKey(int32_t number) { assign(number); }
+ WebIDBKey(const WebIDBKey& e) { assign(e); }
+ WebIDBKey& operator=(const WebIDBKey& e)
+ {
+ assign(e);
+ return *this;
+ }
+
+ WEBKIT_API void assign(const WebIDBKey&);
+ WEBKIT_API void assignNull();
+ WEBKIT_API void assign(const WebString&);
+ WEBKIT_API void assign(int32_t);
+ WEBKIT_API void assignInvalid();
+
+ enum Type {
+ NullType = 0,
+ StringType,
+ NumberType,
+ // Types not in WebCore::IDBKey:
+ InvalidType
+ };
+
+ WEBKIT_API Type type() const;
+ WEBKIT_API WebString string() const; // Only valid for StringType.
+ WEBKIT_API int32_t number() const; // Only valid for numberType.
+
+#if WEBKIT_IMPLEMENTATION
+ WebIDBKey(const WTF::PassRefPtr<WebCore::IDBKey>&);
+ WebIDBKey& operator=(const WTF::PassRefPtr<WebCore::IDBKey>&);
+ operator WTF::PassRefPtr<WebCore::IDBKey>() const;
+#endif
+
+private:
+ WebIDBKey() { }
+
+ WebPrivatePtr<WebCore::IDBKey> m_private;
+};
+
+} // namespace WebKit
+
+#endif // WebIDBKey_h
diff --git a/WebKit/chromium/public/WebIDBObjectStore.h b/WebKit/chromium/public/WebIDBObjectStore.h
index fead881..fb81fb9 100755
--- a/WebKit/chromium/public/WebIDBObjectStore.h
+++ b/WebKit/chromium/public/WebIDBObjectStore.h
@@ -53,17 +53,29 @@ public:
WEBKIT_ASSERT_NOT_REACHED();
return WebDOMStringList();
}
- void createIndex(const WebString& name, const WebString& keyPath, bool unique, WebIDBCallbacks*)
+ virtual void get(const WebIDBKey& key, WebIDBCallbacks*)
+ {
+ WEBKIT_ASSERT_NOT_REACHED();
+ }
+ virtual void put(const WebSerializedScriptValue& value, const WebIDBKey& key, bool addOnly, WebIDBCallbacks*)
+ {
+ WEBKIT_ASSERT_NOT_REACHED();
+ }
+ virtual void remove(const WebIDBKey& key, WebIDBCallbacks*)
+ {
+ WEBKIT_ASSERT_NOT_REACHED();
+ }
+ virtual void createIndex(const WebString& name, const WebString& keyPath, bool unique, WebIDBCallbacks*)
{
WEBKIT_ASSERT_NOT_REACHED();
}
// Transfers ownership of the WebIDBIndex to the caller.
- WebIDBIndex* index(const WebString& name)
+ virtual WebIDBIndex* index(const WebString& name)
{
WEBKIT_ASSERT_NOT_REACHED();
return 0;
}
- void removeIndex(const WebString& name, WebIDBCallbacks*)
+ virtual void removeIndex(const WebString& name, WebIDBCallbacks*)
{
WEBKIT_ASSERT_NOT_REACHED();
}
diff --git a/WebKit/chromium/public/WebInputElement.h b/WebKit/chromium/public/WebInputElement.h
index 95f8aa7..d8c8ce7 100644
--- a/WebKit/chromium/public/WebInputElement.h
+++ b/WebKit/chromium/public/WebInputElement.h
@@ -80,6 +80,7 @@ namespace WebKit {
};
WEBKIT_API bool autoComplete() const;
+ WEBKIT_API bool isReadOnly() const;
WEBKIT_API bool isEnabledFormControl() const;
WEBKIT_API InputType inputType() const;
WEBKIT_API int maxLength() const;
@@ -88,12 +89,16 @@ namespace WebKit {
WEBKIT_API int size() const;
WEBKIT_API void setValue(const WebString&);
WEBKIT_API WebString value() const;
+ WEBKIT_API void setSuggestedValue(const WebString&);
+ WEBKIT_API WebString suggestedValue() const;
WEBKIT_API void setPlaceholder(const WebString&);
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();
+ WEBKIT_API int selectionEnd();
#if WEBKIT_IMPLEMENTATION
WebInputElement(const WTF::PassRefPtr<WebCore::HTMLInputElement>&);
diff --git a/WebKit/chromium/public/WebNode.h b/WebKit/chromium/public/WebNode.h
index c7aa8ef..fb0a99e 100644
--- a/WebKit/chromium/public/WebNode.h
+++ b/WebKit/chromium/public/WebNode.h
@@ -61,7 +61,10 @@ public:
WEBKIT_API void assign(const WebNode&);
WEBKIT_API bool equals(const WebNode&) const;
-
+ // Required for using WebNodes in std maps. Note the order used is
+ // arbitrary and should not be expected to have any specific meaning.
+ WEBKIT_API bool lessThan(const WebNode&) const;
+
bool isNull() const { return m_private.isNull(); }
enum NodeType {
@@ -124,7 +127,6 @@ public:
operator WTF::PassRefPtr<WebCore::Node>() const;
#endif
-protected:
#if WEBKIT_IMPLEMENTATION
template<typename T> T* unwrap()
{
@@ -137,6 +139,7 @@ protected:
}
#endif
+protected:
WebPrivatePtr<WebCore::Node> m_private;
};
@@ -150,6 +153,11 @@ inline bool operator!=(const WebNode& a, const WebNode& b)
return !(a == b);
}
+inline bool operator<(const WebNode& a, const WebNode& b)
+{
+ return a.lessThan(b);
+}
+
} // namespace WebKit
#endif
diff --git a/WebKit/chromium/public/WebPlugin.h b/WebKit/chromium/public/WebPlugin.h
index 57f1cba..8e1c946 100644
--- a/WebKit/chromium/public/WebPlugin.h
+++ b/WebKit/chromium/public/WebPlugin.h
@@ -50,6 +50,9 @@ struct WebRect;
struct WebURLError;
template <typename T> class WebVector;
+// FIXME: remove once the chromium is updated.
+#define WEBPLUGIN_FIND_HAS_RETURN_TYPE
+
class WebPlugin {
public:
virtual bool initialize(WebPluginContainer*) = 0;
@@ -94,7 +97,23 @@ public:
// Ends the print operation.
virtual void printEnd() { }
- virtual WebString selectedText() { return WebString(); }
+ virtual bool hasSelection() const { return false; }
+ virtual WebString selectionAsText() const { return WebString(); }
+ virtual WebString selectionAsMarkup() const { return WebString(); }
+
+ // Used for zooming of full page plugins.
+ virtual void setZoomFactor(float scale, bool textOnly) { }
+
+ // Find interface.
+ // Start a new search. The plugin should search for a little bit at a time so that it
+ // doesn't block the thread in case of a large document. The results, along with the
+ // find's identifier, should be sent asynchronously to WebFrameClient's reportFindInPage* methods.
+ // Returns true if the search started, or false if the plugin doesn't support search.
+ virtual bool startFind(const WebString& searchText, bool caseSensitive, int identifier) { return false; }
+ // Tells the plugin to jump forward or backward in the list of find results.
+ virtual void selectFindResult(bool forward) { }
+ // Tells the plugin that the user has stopped the find operation.
+ virtual void stopFind() { }
protected:
~WebPlugin() { }
diff --git a/WebKit/chromium/public/WebSerializedScriptValue.h b/WebKit/chromium/public/WebSerializedScriptValue.h
index dbcb92a..96e6d5b 100644
--- a/WebKit/chromium/public/WebSerializedScriptValue.h
+++ b/WebKit/chromium/public/WebSerializedScriptValue.h
@@ -53,6 +53,9 @@ public:
WEBKIT_API static WebSerializedScriptValue fromString(const WebString&);
+ // Create a WebSerializedScriptValue that represents a serialization error.
+ WEBKIT_API static WebSerializedScriptValue createInvalid();
+
WEBKIT_API void reset();
WEBKIT_API void assign(const WebSerializedScriptValue&);
diff --git a/WebKit/chromium/public/WebURLLoadTiming.h b/WebKit/chromium/public/WebURLLoadTiming.h
new file mode 100644
index 0000000..9412d14
--- /dev/null
+++ b/WebKit/chromium/public/WebURLLoadTiming.h
@@ -0,0 +1,108 @@
+/*
+ * 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 WebURLLoadTiming_h
+#define WebURLLoadTiming_h
+
+#include "WebCommon.h"
+#include "WebPrivatePtr.h"
+
+namespace WebCore { class ResourceLoadTiming; }
+
+namespace WebKit {
+class WebString;
+
+class WebURLLoadTiming {
+public:
+ ~WebURLLoadTiming() { reset(); }
+
+ WebURLLoadTiming() { }
+ WebURLLoadTiming(const WebURLLoadTiming& d) { assign(d); }
+ WebURLLoadTiming& operator=(const WebURLLoadTiming& d)
+ {
+ assign(d);
+ return *this;
+ }
+
+ WEBKIT_API void initialize();
+ WEBKIT_API void reset();
+ WEBKIT_API void assign(const WebURLLoadTiming&);
+
+ bool isNull() const { return m_private.isNull(); }
+
+ WEBKIT_API double requestTime() const;
+ WEBKIT_API void setRequestTime(double time);
+
+ WEBKIT_API int proxyStart() const;
+ WEBKIT_API void setProxyStart(int start);
+
+ WEBKIT_API int proxyEnd() const;
+ WEBKIT_API void setProxyEnd(int end);
+
+ WEBKIT_API int dnsStart() const;
+ WEBKIT_API void setDNSStart(int start);
+
+ WEBKIT_API int dnsEnd() const;
+ WEBKIT_API void setDNSEnd(int end);
+
+ WEBKIT_API int connectStart() const;
+ WEBKIT_API void setConnectStart(int start);
+
+ WEBKIT_API int connectEnd() const;
+ WEBKIT_API void setConnectEnd(int end);
+
+ WEBKIT_API int sendStart() const;
+ WEBKIT_API void setSendStart(int start);
+
+ WEBKIT_API int sendEnd() const;
+ WEBKIT_API void setSendEnd(int end);
+
+ WEBKIT_API int receiveHeadersEnd() const;
+ WEBKIT_API void setReceiveHeadersEnd(int end);
+
+ WEBKIT_API int sslStart() const;
+ WEBKIT_API void setSSLStart(int start);
+
+ WEBKIT_API int sslEnd() const;
+ WEBKIT_API void setSSLEnd(int end);
+
+#if WEBKIT_IMPLEMENTATION
+ WebURLLoadTiming(const WTF::PassRefPtr<WebCore::ResourceLoadTiming>&);
+ WebURLLoadTiming& operator=(const WTF::PassRefPtr<WebCore::ResourceLoadTiming>&);
+ operator WTF::PassRefPtr<WebCore::ResourceLoadTiming>() const;
+#endif
+
+private:
+ WebPrivatePtr<WebCore::ResourceLoadTiming> m_private;
+};
+
+} // namespace WebKit
+
+#endif
diff --git a/WebKit/chromium/public/WebURLRequest.h b/WebKit/chromium/public/WebURLRequest.h
index 408aad7..b60d5be 100644
--- a/WebKit/chromium/public/WebURLRequest.h
+++ b/WebKit/chromium/public/WebURLRequest.h
@@ -69,7 +69,8 @@ public:
TargetIsObject = 7,
TargetIsMedia = 8,
TargetIsWorker = 9,
- TargetIsSharedWorker = 10
+ TargetIsSharedWorker = 10,
+ TargetIsPrefetch = 11,
};
~WebURLRequest() { reset(); }
@@ -129,6 +130,10 @@ public:
WEBKIT_API bool reportUploadProgress() const;
WEBKIT_API void setReportUploadProgress(bool);
+ // Controls whether load timing info is collected for the request.
+ WEBKIT_API bool reportLoadTiming() const;
+ WEBKIT_API void setReportLoadTiming(bool);
+
WEBKIT_API TargetType targetType() const;
WEBKIT_API void setTargetType(TargetType);
diff --git a/WebKit/chromium/public/WebURLResponse.h b/WebKit/chromium/public/WebURLResponse.h
index 293d955..2aa603d 100644
--- a/WebKit/chromium/public/WebURLResponse.h
+++ b/WebKit/chromium/public/WebURLResponse.h
@@ -43,6 +43,7 @@ class WebCString;
class WebHTTPHeaderVisitor;
class WebString;
class WebURL;
+class WebURLLoadTiming;
class WebURLResponsePrivate;
class WebURLResponse {
@@ -72,6 +73,12 @@ public:
WEBKIT_API WebURL url() const;
WEBKIT_API void setURL(const WebURL&);
+ WEBKIT_API unsigned connectionID() const;
+ WEBKIT_API void setConnectionID(unsigned);
+
+ WEBKIT_API WebURLLoadTiming loadTiming();
+ WEBKIT_API void setLoadTiming(const WebURLLoadTiming&);
+
WEBKIT_API double responseTime() const;
WEBKIT_API void setResponseTime(double);
@@ -121,6 +128,10 @@ public:
const WebCore::ResourceResponse& toResourceResponse() const;
#endif
+ // Flag whether this request was served from the disk cache entry.
+ WEBKIT_API bool wasCached() const;
+ WEBKIT_API void setWasCached(bool);
+
// Flag whether this request was loaded via the SPDY protocol or not.
// SPDY is an experimental web protocol, see http://dev.chromium.org/spdy
WEBKIT_API bool wasFetchedViaSPDY() const;
diff --git a/WebKit/chromium/public/WebView.h b/WebKit/chromium/public/WebView.h
index 1efd752..a8f5387 100644
--- a/WebKit/chromium/public/WebView.h
+++ b/WebKit/chromium/public/WebView.h
@@ -54,6 +54,18 @@ struct WebPoint;
class WebView : public WebWidget {
public:
+ // Controls the time that user scripts injected into the document run.
+ enum UserScriptInjectAt {
+ UserScriptInjectAtDocumentStart,
+ UserScriptInjectAtDocumentEnd
+ };
+
+ // Controls which frames user content is injected into.
+ enum UserContentInjectIn {
+ UserContentInjectInAllFrames,
+ UserContentInjectInTopFrameOnly
+ };
+
// Initialization ------------------------------------------------------
// Creates a WebView that is NOT yet initialized. You will need to
@@ -286,18 +298,22 @@ public:
// FIXME: These two methods are DEPRECATED. Remove once Chromium has been rolled.
virtual void addUserScript(const WebString& sourceCode, bool runAtStart)
{
- addUserScript(sourceCode, WebVector<WebString>(), runAtStart);
+ addUserScript(sourceCode, WebVector<WebString>(),
+ runAtStart ? UserScriptInjectAtDocumentStart : UserScriptInjectAtDocumentEnd,
+ UserContentInjectInAllFrames);
}
virtual void addUserStyleSheet(const WebString& sourceCode)
{
- addUserStyleSheet(sourceCode, WebVector<WebString>());
+ addUserStyleSheet(sourceCode, WebVector<WebString>(), UserContentInjectInAllFrames);
}
WEBKIT_API static void addUserScript(const WebString& sourceCode,
const WebVector<WebString>& patterns,
- bool runAtStart);
+ UserScriptInjectAt injectAt,
+ UserContentInjectIn injectIn);
WEBKIT_API static void addUserStyleSheet(const WebString& sourceCode,
- const WebVector<WebString>& patterns);
+ const WebVector<WebString>& patterns,
+ UserContentInjectIn injectIn);
WEBKIT_API static void removeAllUserContent();
// Modal dialog support ------------------------------------------------
diff --git a/WebKit/chromium/public/WebViewClient.h b/WebKit/chromium/public/WebViewClient.h
index a59289d..f21d262 100644
--- a/WebKit/chromium/public/WebViewClient.h
+++ b/WebKit/chromium/public/WebViewClient.h
@@ -45,10 +45,13 @@ namespace WebKit {
class WebAccessibilityObject;
class WebDragData;
+class WebElement;
class WebFileChooserCompletion;
class WebFrame;
class WebGeolocationService;
class WebImage;
+class WebInputElement;
+class WebKeyboardEvent;
class WebNode;
class WebNotificationPresenter;
class WebRange;
@@ -132,6 +135,12 @@ public:
virtual void didExecuteCommand(const WebString& commandName) { }
virtual void didEndEditing() { }
+ // These methods are called when the users edits a text-field.
+ virtual void textFieldDidBeginEditing(const WebInputElement&) { }
+ virtual void textFieldDidEndEditing(const WebInputElement&) { }
+ virtual void textFieldDidChange(const WebInputElement&) { }
+ virtual void textFieldDidReceiveKeyDown(const WebInputElement&, const WebKeyboardEvent&) { }
+
// This method is called in response to WebView's handleInputEvent()
// when the default action for the current keyboard event is not
// suppressed by the page, to give the embedder a chance to handle
@@ -312,6 +321,11 @@ public:
// keys to navigate outside the range of possible selections.
virtual void didClearAutoFillSelection(const WebNode&) { }
+ // 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&) { }
+
// Geolocation ---------------------------------------------------------
// Access the embedder API for geolocation services.
diff --git a/WebKit/chromium/src/ApplicationCacheHost.cpp b/WebKit/chromium/src/ApplicationCacheHost.cpp
index 5fa4a66..b90126f 100644
--- a/WebKit/chromium/src/ApplicationCacheHost.cpp
+++ b/WebKit/chromium/src/ApplicationCacheHost.cpp
@@ -37,6 +37,7 @@
#include "DocumentLoader.h"
#include "DOMApplicationCache.h"
#include "Frame.h"
+#include "ProgressEvent.h"
#include "Settings.h"
#include "WebURL.h"
#include "WebURLError.h"
@@ -195,34 +196,42 @@ void ApplicationCacheHost::setDOMApplicationCache(DOMApplicationCache* domApplic
m_domApplicationCache = domApplicationCache;
}
-void ApplicationCacheHost::notifyDOMApplicationCache(EventID id)
+void ApplicationCacheHost::notifyDOMApplicationCache(EventID id, int total, int done)
{
if (m_defersEvents) {
- m_deferredEvents.append(id);
+ // Event dispatching is deferred until document.onload has fired.
+ m_deferredEvents.append(DeferredEvent(id, total, done));
return;
}
- if (m_domApplicationCache) {
- ExceptionCode ec = 0;
- m_domApplicationCache->dispatchEvent(Event::create(DOMApplicationCache::toEventType(id), false, false), ec);
- ASSERT(!ec);
- }
+ dispatchDOMEvent(id, total, done);
}
void ApplicationCacheHost::stopDeferringEvents()
{
RefPtr<DocumentLoader> protect(documentLoader());
for (unsigned i = 0; i < m_deferredEvents.size(); ++i) {
- EventID id = m_deferredEvents[i];
- if (m_domApplicationCache) {
- ExceptionCode ec = 0;
- m_domApplicationCache->dispatchEvent(Event::create(DOMApplicationCache::toEventType(id), false, false), ec);
- ASSERT(!ec);
- }
+ const DeferredEvent& deferred = m_deferredEvents[i];
+ dispatchDOMEvent(deferred.eventID, deferred.progressTotal, deferred.progressDone);
}
m_deferredEvents.clear();
m_defersEvents = false;
}
+void ApplicationCacheHost::dispatchDOMEvent(EventID id, int total, int done)
+{
+ if (m_domApplicationCache) {
+ const AtomicString& eventType = DOMApplicationCache::toEventType(id);
+ ExceptionCode ec = 0;
+ RefPtr<Event> event;
+ if (id == PROGRESS_EVENT)
+ event = ProgressEvent::create(eventType, true, done, total);
+ else
+ event = Event::create(eventType, false, false);
+ m_domApplicationCache->dispatchEvent(event, ec);
+ ASSERT(!ec);
+ }
+}
+
ApplicationCacheHost::Status ApplicationCacheHost::status() const
{
return m_internal ? static_cast<Status>(m_internal->m_outerHost->status()) : UNCACHED;
diff --git a/WebKit/chromium/src/ApplicationCacheHostInternal.h b/WebKit/chromium/src/ApplicationCacheHostInternal.h
index edaaca9..902b9b5 100644
--- a/WebKit/chromium/src/ApplicationCacheHostInternal.h
+++ b/WebKit/chromium/src/ApplicationCacheHostInternal.h
@@ -55,18 +55,12 @@ public:
virtual void notifyEventListener(WebKit::WebApplicationCacheHost::EventID eventID)
{
- m_innerHost->notifyDOMApplicationCache(static_cast<ApplicationCacheHost::EventID>(eventID));
+ m_innerHost->notifyDOMApplicationCache(static_cast<ApplicationCacheHost::EventID>(eventID), 0, 0);
}
- virtual void notifyProgressEventListener(const WebKit::WebURL&, int num_total, int num_complete)
+ virtual void notifyProgressEventListener(const WebKit::WebURL&, int progressTotal, int progressDone)
{
- // FIXME: Modify webcore's progress event handling to carry the extra info and alter the
- // layout tests to not fail when the more recently specified 'final' event is raised.
- // For now, we're eating the extra info and that last event.
- // See https://bugs.webkit.org/show_bug.cgi?id=37602
- if (num_complete == num_total)
- return;
- notifyEventListener(WebKit::WebApplicationCacheHost::ProgressEvent);
+ m_innerHost->notifyDOMApplicationCache(ApplicationCacheHost::PROGRESS_EVENT, progressTotal, progressDone);
}
static WebKit::WebApplicationCacheHost* toWebApplicationCacheHost(ApplicationCacheHost* innerHost)
diff --git a/WebKit/chromium/src/AssertMatchingEnums.cpp b/WebKit/chromium/src/AssertMatchingEnums.cpp
index 5736ca0..1f946f3 100644
--- a/WebKit/chromium/src/AssertMatchingEnums.cpp
+++ b/WebKit/chromium/src/AssertMatchingEnums.cpp
@@ -37,6 +37,7 @@
#include "ApplicationCacheHost.h"
#include "EditorInsertAction.h"
#include "HTMLInputElement.h"
+#include "IDBKey.h"
#include "MediaPlayer.h"
#include "NotificationPresenter.h"
#include "PasteboardPrivate.h"
@@ -44,11 +45,14 @@
#include "Settings.h"
#include "StringImpl.h"
#include "TextAffinity.h"
+#include "UserContentTypes.h"
+#include "UserScriptTypes.h"
#include "WebAccessibilityObject.h"
#include "WebApplicationCacheHost.h"
#include "WebClipboard.h"
#include "WebCursorInfo.h"
#include "WebEditingAction.h"
+#include "WebIDBKey.h"
#include "WebInputElement.h"
#include "WebMediaPlayer.h"
#include "WebNotificationPresenter.h"
@@ -56,6 +60,7 @@
#include "WebSettings.h"
#include "WebTextAffinity.h"
#include "WebTextCaseSensitivity.h"
+#include "WebView.h"
#include <wtf/Assertions.h>
#define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, webcore_name) \
@@ -312,3 +317,12 @@ COMPILE_ASSERT_MATCHING_ENUM(WebTextAffinityDownstream, DOWNSTREAM);
COMPILE_ASSERT_MATCHING_ENUM(WebTextCaseSensitive, TextCaseSensitive);
COMPILE_ASSERT_MATCHING_ENUM(WebTextCaseInsensitive, TextCaseInsensitive);
+
+COMPILE_ASSERT_MATCHING_ENUM(WebView::UserScriptInjectAtDocumentStart, InjectAtDocumentStart);
+COMPILE_ASSERT_MATCHING_ENUM(WebView::UserScriptInjectAtDocumentEnd, InjectAtDocumentEnd);
+COMPILE_ASSERT_MATCHING_ENUM(WebView::UserContentInjectInAllFrames, InjectInAllFrames);
+COMPILE_ASSERT_MATCHING_ENUM(WebView::UserContentInjectInTopFrameOnly, InjectInTopFrameOnly);
+
+COMPILE_ASSERT_MATCHING_ENUM(WebIDBKey::NullType, IDBKey::NullType);
+COMPILE_ASSERT_MATCHING_ENUM(WebIDBKey::StringType, IDBKey::StringType);
+COMPILE_ASSERT_MATCHING_ENUM(WebIDBKey::NumberType, IDBKey::NumberType);
diff --git a/WebKit/chromium/src/ContextMenuClientImpl.cpp b/WebKit/chromium/src/ContextMenuClientImpl.cpp
index f757d9c..d0d09bf 100644
--- a/WebKit/chromium/src/ContextMenuClientImpl.cpp
+++ b/WebKit/chromium/src/ContextMenuClientImpl.cpp
@@ -54,6 +54,7 @@
#include "WebDataSourceImpl.h"
#include "WebFrameImpl.h"
#include "WebMenuItemInfo.h"
+#include "WebPlugin.h"
#include "WebPluginContainerImpl.h"
#include "WebPoint.h"
#include "WebString.h"
@@ -209,7 +210,7 @@ PlatformMenuDescription ContextMenuClientImpl::getCustomMenuFromDefaultItems(
Widget* widget = toRenderWidget(object)->widget();
if (widget) {
WebPluginContainerImpl* plugin = static_cast<WebPluginContainerImpl*>(widget);
- WebString text = plugin->selectedText();
+ WebString text = plugin->plugin()->selectionAsText();
if (!text.isEmpty()) {
data.selectedText = text;
data.editFlags |= WebContextMenuData::CanCopy;
diff --git a/WebKit/chromium/src/EditorClientImpl.cpp b/WebKit/chromium/src/EditorClientImpl.cpp
index 864988a..4ae4934 100644
--- a/WebKit/chromium/src/EditorClientImpl.cpp
+++ b/WebKit/chromium/src/EditorClientImpl.cpp
@@ -43,9 +43,11 @@
#include "DOMUtilitiesPrivate.h"
#include "WebEditingAction.h"
+#include "WebElement.h"
#include "WebFrameImpl.h"
#include "WebKit.h"
#include "WebInputElement.h"
+#include "WebInputEventConversion.h"
#include "WebNode.h"
#include "WebPasswordAutocompleteListener.h"
#include "WebRange.h"
@@ -90,7 +92,7 @@ bool EditorClientImpl::shouldShowDeleteInterface(HTMLElement* elem)
// Normally, we don't care to show WebCore's deletion UI, so we only enable
// it if in testing mode and the test specifically requests it by using this
// magic class name.
- return WebKit::layoutTestMode()
+ return layoutTestMode()
&& elem->getAttribute(HTMLNames::classAttr) == "needsDeletionUI";
}
@@ -644,12 +646,19 @@ void EditorClientImpl::handleInputMethodKeydown(KeyboardEvent* keyEvent)
// We handle IME within chrome.
}
-void EditorClientImpl::textFieldDidBeginEditing(Element*)
+void EditorClientImpl::textFieldDidBeginEditing(Element* element)
{
+ HTMLInputElement* inputElement = toHTMLInputElement(element);
+ if (m_webView->client() && inputElement)
+ m_webView->client()->textFieldDidBeginEditing(WebInputElement(inputElement));
}
void EditorClientImpl::textFieldDidEndEditing(Element* element)
{
+ HTMLInputElement* inputElement = toHTMLInputElement(element);
+ if (m_webView->client() && inputElement)
+ m_webView->client()->textFieldDidEndEditing(WebInputElement(inputElement));
+
// Notification that focus was lost. Be careful with this, it's also sent
// when the page is being closed.
@@ -664,7 +673,6 @@ void EditorClientImpl::textFieldDidEndEditing(Element* element)
return; // The page is getting closed, don't fill the password.
// Notify any password-listener of the focus change.
- HTMLInputElement* inputElement = WebKit::toHTMLInputElement(element);
if (!inputElement)
return;
@@ -682,15 +690,18 @@ void EditorClientImpl::textFieldDidEndEditing(Element* element)
void EditorClientImpl::textDidChangeInTextField(Element* element)
{
ASSERT(element->hasLocalName(HTMLNames::inputTag));
+ HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(element);
+ if (m_webView->client())
+ m_webView->client()->textFieldDidChange(WebInputElement(inputElement));
+
// Note that we only show the autofill popup in this case if the caret is at
// the end. This matches FireFox and Safari but not IE.
- autofill(static_cast<HTMLInputElement*>(element), false, false,
- true);
+ autofill(inputElement, false, false, true);
}
bool EditorClientImpl::showFormAutofillForNode(Node* node)
{
- HTMLInputElement* inputElement = WebKit::toHTMLInputElement(node);
+ HTMLInputElement* inputElement = toHTMLInputElement(node);
if (inputElement)
return autofill(inputElement, true, true, false);
return false;
@@ -792,6 +803,9 @@ void EditorClientImpl::cancelPendingAutofill()
void EditorClientImpl::onAutocompleteSuggestionAccepted(HTMLInputElement* textField)
{
+ if (m_webView->client())
+ m_webView->client()->didAcceptAutocompleteSuggestion(WebInputElement(textField));
+
WebFrameImpl* webframe = WebFrameImpl::fromFrame(textField->document()->frame());
if (!webframe)
return;
@@ -802,6 +816,12 @@ void EditorClientImpl::onAutocompleteSuggestionAccepted(HTMLInputElement* textFi
bool EditorClientImpl::doTextFieldCommandFromEvent(Element* element,
KeyboardEvent* event)
{
+ HTMLInputElement* inputElement = toHTMLInputElement(element);
+ if (m_webView->client() && inputElement) {
+ m_webView->client()->textFieldDidReceiveKeyDown(WebInputElement(inputElement),
+ WebKeyboardEventBuilder(*event));
+ }
+
// Remember if backspace was pressed for the autofill. It is not clear how to
// find if backspace was pressed from textFieldDidBeginEditing and
// textDidChangeInTextField as when these methods are called the value of the
diff --git a/WebKit/chromium/src/GLES2Context.cpp b/WebKit/chromium/src/GLES2Context.cpp
index b6d619c..f342436 100644
--- a/WebKit/chromium/src/GLES2Context.cpp
+++ b/WebKit/chromium/src/GLES2Context.cpp
@@ -31,6 +31,7 @@
#include "config.h"
#include "GLES2Context.h"
+#include "IntSize.h"
#include "WebGLES2Context.h"
#include "WebKit.h"
#include "WebKitClient.h"
@@ -56,7 +57,8 @@ public:
GLES2ContextInternal() {}
~GLES2ContextInternal() {}
- bool initialize(Page*);
+ bool initializeOnscreen(Page*);
+ bool initializeOffscreen(GLES2Context*);
WebGLES2Context* getWebGLES2Context() { return m_impl; }
@@ -64,7 +66,7 @@ private:
WebGLES2Context* m_impl;
};
-bool GLES2ContextInternal::initialize(Page* page)
+bool GLES2ContextInternal::initializeOnscreen(Page* page)
{
ASSERT(page);
WebViewImpl* webView = WebViewImpl::fromPage(page);
@@ -75,10 +77,22 @@ bool GLES2ContextInternal::initialize(Page* page)
return true;
}
-PassOwnPtr<GLES2Context> GLES2Context::create(Page* page)
+bool GLES2ContextInternal::initializeOffscreen(GLES2Context* parent)
+{
+ m_impl = webKitClient()->createGLES2Context();
+ if (!m_impl)
+ return false;
+ if (!m_impl->initialize(0, parent ? parent->m_internal->m_impl : 0)) {
+ delete m_impl;
+ return false;
+ }
+ return true;
+}
+
+PassOwnPtr<GLES2Context> GLES2Context::createOnscreen(Page* page)
{
GLES2ContextInternal* internal = new GLES2ContextInternal();
- if (!internal->initialize(page)) {
+ if (!internal->initializeOnscreen(page)) {
delete internal;
return 0;
}
@@ -87,6 +101,19 @@ PassOwnPtr<GLES2Context> GLES2Context::create(Page* page)
return result;
}
+PassOwnPtr<GLES2Context> GLES2Context::createOffscreen(GLES2Context* parent)
+{
+ GLES2ContextInternal* internal = new GLES2ContextInternal();
+ if (!internal->initializeOffscreen(parent)) {
+ delete internal;
+ return 0;
+ }
+ PassOwnPtr<GLES2Context> result = new GLES2Context();
+ result->m_internal.set(internal);
+ return result;
+}
+
+
GLES2Context::~GLES2Context()
{
}
@@ -115,4 +142,18 @@ bool GLES2Context::swapBuffers()
return webContext->swapBuffers();
}
+void GLES2Context::resizeOffscreenContent(const IntSize& size)
+{
+ WebGLES2Context* webContext = m_internal->getWebGLES2Context();
+ ASSERT(webContext);
+ webContext->resizeOffscreenContent(size);
+}
+
+unsigned GLES2Context::getOffscreenContentParentTextureId()
+{
+ WebGLES2Context* webContext = m_internal->getWebGLES2Context();
+ ASSERT(webContext);
+ return webContext->getOffscreenContentParentTextureId();
+}
+
} // namespace WebCore
diff --git a/WebKit/chromium/src/IDBCallbacksProxy.cpp b/WebKit/chromium/src/IDBCallbacksProxy.cpp
index 7a6571a..3591bee 100644
--- a/WebKit/chromium/src/IDBCallbacksProxy.cpp
+++ b/WebKit/chromium/src/IDBCallbacksProxy.cpp
@@ -35,6 +35,7 @@
#include "WebIDBDatabaseImpl.h"
#include "WebIDBDatabaseError.h"
#include "WebIDBIndexImpl.h"
+#include "WebIDBKey.h"
#include "WebIDBObjectStoreImpl.h"
#include "WebSerializedScriptValue.h"
@@ -44,7 +45,7 @@ namespace WebCore {
PassRefPtr<IDBCallbacksProxy> IDBCallbacksProxy::create(PassOwnPtr<WebKit::WebIDBCallbacks> callbacks)
{
- return new IDBCallbacksProxy(callbacks);
+ return adoptRef(new IDBCallbacksProxy(callbacks));
}
IDBCallbacksProxy::IDBCallbacksProxy(PassOwnPtr<WebKit::WebIDBCallbacks> callbacks)
@@ -82,7 +83,8 @@ void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBIndex> idbIndex)
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBKey> idbKey)
{
- ASSERT_NOT_REACHED();
+ m_callbacks->onSuccess(WebKit::WebIDBKey(idbKey));
+ m_callbacks.clear();
}
void IDBCallbacksProxy::onSuccess(PassRefPtr<IDBObjectStore> idbObjectStore)
@@ -100,4 +102,3 @@ void IDBCallbacksProxy::onSuccess(PassRefPtr<SerializedScriptValue> serializedSc
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
-
diff --git a/WebKit/chromium/src/IDBCallbacksProxy.h b/WebKit/chromium/src/IDBCallbacksProxy.h
index fc424f8..c5a8858 100644
--- a/WebKit/chromium/src/IDBCallbacksProxy.h
+++ b/WebKit/chromium/src/IDBCallbacksProxy.h
@@ -42,11 +42,6 @@ class WebIDBCallbacks;
namespace WebCore {
-class IDBDatabaseError;
-class IDBDatabase;
-class IDBObjectStore;
-class SerializedScriptValue;
-
class IDBCallbacksProxy : public IDBCallbacks {
public:
static PassRefPtr<IDBCallbacksProxy> create(PassOwnPtr<WebKit::WebIDBCallbacks>);
diff --git a/WebKit/chromium/src/IDBObjectStoreProxy.cpp b/WebKit/chromium/src/IDBObjectStoreProxy.cpp
index 5942e2a..cec4ed3 100755
--- a/WebKit/chromium/src/IDBObjectStoreProxy.cpp
+++ b/WebKit/chromium/src/IDBObjectStoreProxy.cpp
@@ -31,7 +31,9 @@
#include "IDBIndexProxy.h"
#include "WebIDBCallbacksImpl.h"
#include "WebIDBIndex.h"
+#include "WebIDBKey.h"
#include "WebIDBObjectStore.h"
+#include "WebSerializedScriptValue.h"
#if ENABLE(INDEXED_DATABASE)
@@ -66,6 +68,21 @@ PassRefPtr<DOMStringList> IDBObjectStoreProxy::indexNames() const
return m_webIDBObjectStore->indexNames();
}
+void IDBObjectStoreProxy::get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks)
+{
+ m_webIDBObjectStore->get(key, new WebIDBCallbacksImpl(callbacks));
+}
+
+void IDBObjectStoreProxy::put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks> callbacks)
+{
+ m_webIDBObjectStore->put(value, key, addOnly, new WebIDBCallbacksImpl(callbacks));
+}
+
+void IDBObjectStoreProxy::remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks)
+{
+ m_webIDBObjectStore->remove(key, new WebIDBCallbacksImpl(callbacks));
+}
+
void IDBObjectStoreProxy::createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks> callbacks)
{
m_webIDBObjectStore->createIndex(name, keyPath, unique, new WebIDBCallbacksImpl(callbacks));
diff --git a/WebKit/chromium/src/IDBObjectStoreProxy.h b/WebKit/chromium/src/IDBObjectStoreProxy.h
index 78983cb..b8e4a01 100755
--- a/WebKit/chromium/src/IDBObjectStoreProxy.h
+++ b/WebKit/chromium/src/IDBObjectStoreProxy.h
@@ -43,15 +43,19 @@ class IDBIndex;
class IDBObjectStoreProxy : public IDBObjectStore {
public:
static PassRefPtr<IDBObjectStore> create(PassOwnPtr<WebKit::WebIDBObjectStore>);
- virtual ~IDBObjectStoreProxy();
+ ~IDBObjectStoreProxy();
- virtual String name() const;
- virtual String keyPath() const;
- virtual PassRefPtr<DOMStringList> indexNames() const;
+ String name() const;
+ String keyPath() const;
+ PassRefPtr<DOMStringList> indexNames() const;
- virtual void createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks>);
- virtual PassRefPtr<IDBIndex> index(const String& name);
- virtual void removeIndex(const String& name, PassRefPtr<IDBCallbacks>);
+ void get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>);
+ void put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>);
+ void remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>);
+
+ void createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks>);
+ PassRefPtr<IDBIndex> index(const String& name);
+ void removeIndex(const String& name, PassRefPtr<IDBCallbacks>);
private:
IDBObjectStoreProxy(PassOwnPtr<WebKit::WebIDBObjectStore>);
diff --git a/WebKit/chromium/src/NotificationPresenterImpl.cpp b/WebKit/chromium/src/NotificationPresenterImpl.cpp
index dca1856..1931465 100644
--- a/WebKit/chromium/src/NotificationPresenterImpl.cpp
+++ b/WebKit/chromium/src/NotificationPresenterImpl.cpp
@@ -35,6 +35,7 @@
#include "KURL.h"
#include "Notification.h"
+#include "ScriptExecutionContext.h"
#include "SecurityOrigin.h"
#include "WebNotification.h"
@@ -91,15 +92,15 @@ void NotificationPresenterImpl::notificationObjectDestroyed(Notification* notifi
m_presenter->objectDestroyed(PassRefPtr<Notification>(notification));
}
-NotificationPresenter::Permission NotificationPresenterImpl::checkPermission(const KURL& sourceURL)
+NotificationPresenter::Permission NotificationPresenterImpl::checkPermission(ScriptExecutionContext* context)
{
- int result = m_presenter->checkPermission(sourceURL);
+ int result = m_presenter->checkPermission(context->url());
return static_cast<NotificationPresenter::Permission>(result);
}
-void NotificationPresenterImpl::requestPermission(SecurityOrigin* origin, PassRefPtr<VoidCallback> callback)
+void NotificationPresenterImpl::requestPermission(ScriptExecutionContext* context, PassRefPtr<VoidCallback> callback)
{
- m_presenter->requestPermission(WebSecurityOrigin(origin), new VoidCallbackClient(callback));
+ m_presenter->requestPermission(WebSecurityOrigin(context->securityOrigin()), new VoidCallbackClient(callback));
}
} // namespace WebKit
diff --git a/WebKit/chromium/src/NotificationPresenterImpl.h b/WebKit/chromium/src/NotificationPresenterImpl.h
index 479538f..bb156dd 100644
--- a/WebKit/chromium/src/NotificationPresenterImpl.h
+++ b/WebKit/chromium/src/NotificationPresenterImpl.h
@@ -54,8 +54,9 @@ public:
virtual bool show(WebCore::Notification* object);
virtual void cancel(WebCore::Notification* object);
virtual void notificationObjectDestroyed(WebCore::Notification* object);
- virtual WebCore::NotificationPresenter::Permission checkPermission(const WebCore::KURL& sourceURL);
- virtual void requestPermission(WebCore::SecurityOrigin* origin, WTF::PassRefPtr<WebCore::VoidCallback> callback);
+ virtual WebCore::NotificationPresenter::Permission checkPermission(WebCore::ScriptExecutionContext*);
+ virtual void requestPermission(WebCore::ScriptExecutionContext* , WTF::PassRefPtr<WebCore::VoidCallback> callback);
+ virtual void cancelRequestsForPermission(WebCore::ScriptExecutionContext*) {}
private:
// WebNotificationPresenter that this object delegates to.
diff --git a/WebKit/chromium/src/SharedWorkerRepository.cpp b/WebKit/chromium/src/SharedWorkerRepository.cpp
index 2c4e918..88d3ec5 100644
--- a/WebKit/chromium/src/SharedWorkerRepository.cpp
+++ b/WebKit/chromium/src/SharedWorkerRepository.cpp
@@ -220,7 +220,7 @@ void SharedWorkerRepository::connect(PassRefPtr<SharedWorker> worker, PassOwnPtr
// The loader object manages its own lifecycle (and the lifecycles of the two worker objects).
// It will free itself once loading is completed.
- SharedWorkerScriptLoader* loader = new SharedWorkerScriptLoader(worker, url, name, port.release(), webWorker.release());
+ SharedWorkerScriptLoader* loader = new SharedWorkerScriptLoader(worker, url, name, port, webWorker.release());
loader->load();
}
diff --git a/WebKit/chromium/src/WebDataSourceImpl.cpp b/WebKit/chromium/src/WebDataSourceImpl.cpp
index 5a315cf..ac2a02d 100644
--- a/WebKit/chromium/src/WebDataSourceImpl.cpp
+++ b/WebKit/chromium/src/WebDataSourceImpl.cpp
@@ -156,7 +156,7 @@ void WebDataSourceImpl::setNextPluginLoadObserver(PassOwnPtr<WebPluginLoadObserv
{
// This call should always be followed up with the creation of a
// WebDataSourceImpl, so we should never leak this object.
- m_nextPluginLoadObserver = observer.release();
+ m_nextPluginLoadObserver = observer.leakPtr();
}
WebDataSourceImpl::WebDataSourceImpl(const ResourceRequest& request, const SubstituteData& data)
diff --git a/WebKit/chromium/src/WebDevToolsAgentImpl.cpp b/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
index 20ab1d3..4205c62 100644
--- a/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
+++ b/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
@@ -520,10 +520,10 @@ void WebDevToolsAgentImpl::identifierForInitialRequest(
}
}
-void WebDevToolsAgentImpl::willSendRequest(unsigned long resourceId, const WebURLRequest& request)
+void WebDevToolsAgentImpl::willSendRequest(unsigned long resourceId, WebURLRequest& request)
{
if (InspectorController* ic = inspectorController())
- ic->willSendRequest(resourceId, request.toResourceRequest(), ResourceResponse());
+ ic->willSendRequest(resourceId, request.toMutableResourceRequest(), ResourceResponse());
}
void WebDevToolsAgentImpl::didReceiveData(unsigned long resourceId, int length)
@@ -598,6 +598,11 @@ bool WebDevToolsAgentImpl::sendMessageToFrontend(const WebCore::String& message)
if (!devToolsAgent)
return false;
+ if (devToolsAgent->m_apuAgentEnabled && devToolsAgent->m_apuAgentDelegateStub) {
+ devToolsAgent->m_apuAgentDelegateStub->dispatchToApu(message);
+ return true;
+ }
+
WebVector<WebString> arguments(size_t(1));
arguments[0] = message;
WebDevToolsMessageData data;
diff --git a/WebKit/chromium/src/WebDevToolsAgentImpl.h b/WebKit/chromium/src/WebDevToolsAgentImpl.h
index c97b21f..12f51f9 100644
--- a/WebKit/chromium/src/WebDevToolsAgentImpl.h
+++ b/WebKit/chromium/src/WebDevToolsAgentImpl.h
@@ -89,7 +89,7 @@ public:
virtual void setTimelineProfilingEnabled(bool enable);
virtual void identifierForInitialRequest(unsigned long, WebFrame*, const WebURLRequest&);
- virtual void willSendRequest(unsigned long, const WebURLRequest&);
+ virtual void willSendRequest(unsigned long, WebURLRequest&);
virtual void didReceiveData(unsigned long, int length);
virtual void didReceiveResponse(unsigned long, const WebURLResponse&);
virtual void didFinishLoading(unsigned long);
diff --git a/WebKit/chromium/src/WebFrameImpl.cpp b/WebKit/chromium/src/WebFrameImpl.cpp
index ff4883e..535d128 100644
--- a/WebKit/chromium/src/WebFrameImpl.cpp
+++ b/WebKit/chromium/src/WebFrameImpl.cpp
@@ -130,6 +130,7 @@
#include "WebHistoryItem.h"
#include "WebInputElement.h"
#include "WebPasswordAutocompleteListener.h"
+#include "WebPlugin.h"
#include "WebPluginContainerImpl.h"
#include "WebRange.h"
#include "WebRect.h"
@@ -248,9 +249,7 @@ static void frameContentAsPlainText(size_t maxChars, Frame* frame,
}
}
-// If the frame hosts a PluginDocument, this method returns the WebPluginContainerImpl
-// that hosts the plugin.
-static WebPluginContainerImpl* pluginContainerFromFrame(Frame* frame)
+WebPluginContainerImpl* WebFrameImpl::pluginContainerFromFrame(Frame* frame)
{
if (!frame)
return 0;
@@ -348,7 +347,7 @@ public:
virtual void end()
{
- WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(m_frame);
+ WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(m_frame);
if (pluginContainer && pluginContainer->supportsPaginatedPrint())
pluginContainer->printEnd();
else
@@ -363,7 +362,7 @@ public:
virtual void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight)
{
- WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(m_frame);
+ WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(m_frame);
if (pluginContainer && pluginContainer->supportsPaginatedPrint())
m_pageCount = pluginContainer->printBegin(IntRect(printRect), m_printerDPI);
else
@@ -380,7 +379,7 @@ public:
// instead. Returns the scale to be applied.
virtual float spoolPage(GraphicsContext& ctx, int pageNumber)
{
- WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(m_frame);
+ WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(m_frame);
if (pluginContainer && pluginContainer->supportsPaginatedPrint())
pluginContainer->printPage(pageNumber, &ctx);
else
@@ -1094,6 +1093,14 @@ bool WebFrameImpl::executeCommand(const WebString& name)
if (command[command.length() - 1] == UChar(':'))
command = command.substring(0, command.length() - 1);
+ if (command == "Copy") {
+ WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame());
+ if (pluginContainer) {
+ pluginContainer->copy();
+ return true;
+ }
+ }
+
bool rv = true;
// Specially handling commands that Editor::execCommand does not directly
@@ -1164,6 +1171,10 @@ bool WebFrameImpl::isContinuousSpellCheckingEnabled() const
bool WebFrameImpl::hasSelection() const
{
+ WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame());
+ if (pluginContainer)
+ return pluginContainer->plugin()->hasSelection();
+
// frame()->selection()->isNone() never returns true.
return (frame()->selection()->start() != frame()->selection()->end());
}
@@ -1175,6 +1186,10 @@ WebRange WebFrameImpl::selectionRange() const
WebString WebFrameImpl::selectionAsText() const
{
+ WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame());
+ if (pluginContainer)
+ return pluginContainer->plugin()->selectionAsText();
+
RefPtr<Range> range = frame()->selection()->toNormalizedRange();
if (!range.get())
return WebString();
@@ -1189,6 +1204,10 @@ WebString WebFrameImpl::selectionAsText() const
WebString WebFrameImpl::selectionAsMarkup() const
{
+ WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame());
+ if (pluginContainer)
+ return pluginContainer->plugin()->selectionAsMarkup();
+
RefPtr<Range> range = frame()->selection()->toNormalizedRange();
if (!range.get())
return WebString();
@@ -1960,7 +1979,7 @@ bool WebFrameImpl::registerPasswordListener(
WebInputElement inputElement,
WebPasswordAutocompleteListener* listener)
{
- RefPtr<HTMLInputElement> element = inputElement.operator PassRefPtr<HTMLInputElement>();
+ RefPtr<HTMLInputElement> element(inputElement.unwrap<HTMLInputElement>());
if (!m_passwordListeners.add(element, listener).second) {
delete listener;
return false;
@@ -1971,8 +1990,8 @@ bool WebFrameImpl::registerPasswordListener(
void WebFrameImpl::notifiyPasswordListenerOfAutocomplete(
const WebInputElement& inputElement)
{
- RefPtr<HTMLInputElement> element = inputElement.operator PassRefPtr<HTMLInputElement>();
- WebPasswordAutocompleteListener* listener = getPasswordListener(element.get());
+ const HTMLInputElement* element = inputElement.constUnwrap<HTMLInputElement>();
+ WebPasswordAutocompleteListener* listener = getPasswordListener(element);
// Password listeners need to autocomplete other fields that depend on the
// input element with autofill suggestions.
if (listener)
@@ -1980,9 +1999,9 @@ void WebFrameImpl::notifiyPasswordListenerOfAutocomplete(
}
WebPasswordAutocompleteListener* WebFrameImpl::getPasswordListener(
- HTMLInputElement* inputElement)
+ const HTMLInputElement* inputElement)
{
- return m_passwordListeners.get(RefPtr<HTMLInputElement>(inputElement));
+ return m_passwordListeners.get(RefPtr<HTMLInputElement>(const_cast<HTMLInputElement*>(inputElement)));
}
// WebFrameImpl private --------------------------------------------------------
diff --git a/WebKit/chromium/src/WebFrameImpl.h b/WebKit/chromium/src/WebFrameImpl.h
index aa1edd6..2511fce 100644
--- a/WebKit/chromium/src/WebFrameImpl.h
+++ b/WebKit/chromium/src/WebFrameImpl.h
@@ -56,6 +56,7 @@ class WebDataSourceImpl;
class WebInputElement;
class WebFrameClient;
class WebPasswordAutocompleteListener;
+class WebPluginContainerImpl;
class WebView;
class WebViewImpl;
@@ -197,6 +198,10 @@ public:
static WebFrameImpl* fromFrame(WebCore::Frame* frame);
static WebFrameImpl* fromFrameOwnerElement(WebCore::Element* element);
+ // If the frame hosts a PluginDocument, this method returns the WebPluginContainerImpl
+ // that hosts the plugin.
+ static WebPluginContainerImpl* pluginContainerFromFrame(WebCore::Frame*);
+
WebViewImpl* viewImpl() const;
WebCore::Frame* frame() const { return m_frame; }
@@ -231,7 +236,7 @@ public:
// user name input element, or 0 if none available.
// Note that the returned listener is owner by the WebFrameImpl and should not
// be kept around as it is deleted when the page goes away.
- WebPasswordAutocompleteListener* getPasswordListener(WebCore::HTMLInputElement*);
+ WebPasswordAutocompleteListener* getPasswordListener(const WebCore::HTMLInputElement*);
WebFrameClient* client() const { return m_client; }
void setClient(WebFrameClient* client) { m_client = client; }
diff --git a/WebKit/chromium/src/WebIDBCallbacksImpl.cpp b/WebKit/chromium/src/WebIDBCallbacksImpl.cpp
index 891e3b3..21c9eed 100644
--- a/WebKit/chromium/src/WebIDBCallbacksImpl.cpp
+++ b/WebKit/chromium/src/WebIDBCallbacksImpl.cpp
@@ -30,11 +30,13 @@
#include "IDBDatabaseError.h"
#include "IDBDatabaseProxy.h"
#include "IDBIndexProxy.h"
+#include "IDBKey.h"
#include "IDBObjectStoreProxy.h"
#include "WebIDBCallbacks.h"
#include "WebIDBDatabase.h"
#include "WebIDBDatabaseError.h"
#include "WebIDBIndex.h"
+#include "WebIDBKey.h"
#include "WebIDBObjectStore.h"
#include "WebSerializedScriptValue.h"
@@ -69,6 +71,12 @@ void WebIDBCallbacksImpl::onSuccess(WebKit::WebIDBDatabase* webKitInstance)
m_callbacks.clear();
}
+void WebIDBCallbacksImpl::onSuccess(const WebKit::WebIDBKey& key)
+{
+ m_callbacks->onSuccess(key);
+ m_callbacks.clear();
+}
+
void WebIDBCallbacksImpl::onSuccess(WebKit::WebIDBIndex* webKitInstance)
{
m_callbacks->onSuccess(IDBIndexProxy::create(webKitInstance));
diff --git a/WebKit/chromium/src/WebIDBCallbacksImpl.h b/WebKit/chromium/src/WebIDBCallbacksImpl.h
index 519f692..a4d53b5 100644
--- a/WebKit/chromium/src/WebIDBCallbacksImpl.h
+++ b/WebKit/chromium/src/WebIDBCallbacksImpl.h
@@ -44,6 +44,7 @@ public:
virtual void onError(const WebKit::WebIDBDatabaseError&);
virtual void onSuccess(); // For "null".
virtual void onSuccess(WebKit::WebIDBDatabase*);
+ virtual void onSuccess(const WebKit::WebIDBKey&);
virtual void onSuccess(WebKit::WebIDBIndex*);
virtual void onSuccess(WebKit::WebIDBObjectStore*);
virtual void onSuccess(const WebKit::WebSerializedScriptValue&);
diff --git a/WebKit/chromium/src/WebIDBKey.cpp b/WebKit/chromium/src/WebIDBKey.cpp
new file mode 100644
index 0000000..a52ea56
--- /dev/null
+++ b/WebKit/chromium/src/WebIDBKey.cpp
@@ -0,0 +1,118 @@
+/*
+ * 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.
+ *
+ * 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 "WebIDBKey.h"
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBKey.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+WebIDBKey::~WebIDBKey()
+{
+ m_private.reset();
+}
+
+WebIDBKey WebIDBKey::createNull()
+{
+ WebIDBKey key;
+ key.assignNull();
+ return key;
+}
+
+WebIDBKey WebIDBKey::createInvalid()
+{
+ WebIDBKey key;
+ key.assignInvalid();
+ return key;
+}
+
+void WebIDBKey::assign(const WebIDBKey& value)
+{
+ m_private = value.m_private;
+}
+
+void WebIDBKey::assignNull()
+{
+ m_private = IDBKey::create();
+}
+
+void WebIDBKey::assign(const WebString& string)
+{
+ m_private = IDBKey::create(string);
+}
+
+void WebIDBKey::assign(int32_t number)
+{
+ m_private = IDBKey::create(number);
+}
+
+void WebIDBKey::assignInvalid()
+{
+ m_private = 0;
+}
+
+WebIDBKey::Type WebIDBKey::type() const
+{
+ if (!m_private.get())
+ return InvalidType;
+ return Type(m_private->type());
+}
+
+WebString WebIDBKey::string() const
+{
+ return m_private->string();
+}
+
+int32_t WebIDBKey::number() const
+{
+ return m_private->number();
+}
+
+WebIDBKey::WebIDBKey(const PassRefPtr<IDBKey>& value)
+ : m_private(value)
+{
+}
+
+WebIDBKey& WebIDBKey::operator=(const PassRefPtr<IDBKey>& value)
+{
+ m_private = value;
+ return *this;
+}
+
+WebIDBKey::operator PassRefPtr<IDBKey>() const
+{
+ return m_private.get();
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(INDEXED_DATABASE)
diff --git a/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp b/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp
index a41010a..d8e98db 100755
--- a/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp
+++ b/WebKit/chromium/src/WebIDBObjectStoreImpl.cpp
@@ -30,6 +30,8 @@
#include "IDBCallbacksProxy.h"
#include "IDBObjectStore.h"
#include "WebIDBIndexImpl.h"
+#include "WebIDBKey.h"
+#include "WebSerializedScriptValue.h"
#if ENABLE(INDEXED_DATABASE)
@@ -61,6 +63,21 @@ WebDOMStringList WebIDBObjectStoreImpl::indexNames() const
return m_objectStore->indexNames();
}
+void WebIDBObjectStoreImpl::get(const WebIDBKey& key, WebIDBCallbacks* callbacks)
+{
+ m_objectStore->get(key, IDBCallbacksProxy::create(callbacks));
+}
+
+void WebIDBObjectStoreImpl::put(const WebSerializedScriptValue& value, const WebIDBKey& key, bool addOnly, WebIDBCallbacks* callbacks)
+{
+ m_objectStore->put(value, key, addOnly, IDBCallbacksProxy::create(callbacks));
+}
+
+void WebIDBObjectStoreImpl::remove(const WebIDBKey& key, WebIDBCallbacks* callbacks)
+{
+ m_objectStore->remove(key, IDBCallbacksProxy::create(callbacks));
+}
+
void WebIDBObjectStoreImpl::createIndex(const WebString& name, const WebString& keyPath, bool unique, WebIDBCallbacks* callbacks)
{
m_objectStore->createIndex(name, keyPath, unique, IDBCallbacksProxy::create(callbacks));
diff --git a/WebKit/chromium/src/WebIDBObjectStoreImpl.h b/WebKit/chromium/src/WebIDBObjectStoreImpl.h
index f59840f..4064b7f 100755
--- a/WebKit/chromium/src/WebIDBObjectStoreImpl.h
+++ b/WebKit/chromium/src/WebIDBObjectStoreImpl.h
@@ -41,15 +41,19 @@ class WebIDBIndex;
class WebIDBObjectStoreImpl : public WebIDBObjectStore {
public:
WebIDBObjectStoreImpl(WTF::PassRefPtr<WebCore::IDBObjectStore> objectStore);
- virtual ~WebIDBObjectStoreImpl();
+ ~WebIDBObjectStoreImpl();
- virtual WebString name() const;
- virtual WebString keyPath() const;
- virtual WebDOMStringList indexNames() const;
+ WebString name() const;
+ WebString keyPath() const;
+ WebDOMStringList indexNames() const;
- virtual void createIndex(const WebString& name, const WebString& keyPath, bool unique, WebIDBCallbacks* callbacks);
- virtual WebIDBIndex* index(const WebString& name);
- virtual void removeIndex(const WebString& name, WebIDBCallbacks* callbacks);
+ void get(const WebIDBKey& key, WebIDBCallbacks*);
+ void put(const WebSerializedScriptValue& value, const WebIDBKey& key, bool addOnly, WebIDBCallbacks*);
+ void remove(const WebIDBKey& key, WebIDBCallbacks*);
+
+ void createIndex(const WebString& name, const WebString& keyPath, bool unique, WebIDBCallbacks* callbacks);
+ WebIDBIndex* index(const WebString& name);
+ void removeIndex(const WebString& name, WebIDBCallbacks* callbacks);
private:
WTF::RefPtr<WebCore::IDBObjectStore> m_objectStore;
diff --git a/WebKit/chromium/src/WebInputElement.cpp b/WebKit/chromium/src/WebInputElement.cpp
index 18bafd6..3b88335 100644
--- a/WebKit/chromium/src/WebInputElement.cpp
+++ b/WebKit/chromium/src/WebInputElement.cpp
@@ -45,6 +45,11 @@ bool WebInputElement::autoComplete() const
return constUnwrap<HTMLInputElement>()->autoComplete();
}
+bool WebInputElement::isReadOnly() const
+{
+ return constUnwrap<HTMLInputElement>()->readOnly();
+}
+
bool WebInputElement::isEnabledFormControl() const
{
return constUnwrap<HTMLInputElement>()->isEnabledFormControl();
@@ -85,6 +90,16 @@ WebString WebInputElement::value() const
return constUnwrap<HTMLInputElement>()->value();
}
+void WebInputElement::setSuggestedValue(const WebString& value)
+{
+ unwrap<HTMLInputElement>()->setSuggestedValue(value);
+}
+
+WebString WebInputElement::suggestedValue() const
+{
+ return constUnwrap<HTMLInputElement>()->suggestedValue();
+}
+
void WebInputElement::setPlaceholder(const WebString& value)
{
unwrap<HTMLInputElement>()->setPlaceholder(value);
@@ -115,6 +130,16 @@ void WebInputElement::setSelectionRange(int start, int end)
unwrap<HTMLInputElement>()->setSelectionRange(start, end);
}
+int WebInputElement::selectionStart()
+{
+ return unwrap<HTMLInputElement>()->selectionStart();
+}
+
+int WebInputElement::selectionEnd()
+{
+ return unwrap<HTMLInputElement>()->selectionEnd();
+}
+
WebInputElement::WebInputElement(const PassRefPtr<HTMLInputElement>& elem)
: WebFormControlElement(elem)
{
diff --git a/WebKit/chromium/src/WebNode.cpp b/WebKit/chromium/src/WebNode.cpp
index 31ad70f..69c35e7 100644
--- a/WebKit/chromium/src/WebNode.cpp
+++ b/WebKit/chromium/src/WebNode.cpp
@@ -67,6 +67,11 @@ bool WebNode::equals(const WebNode& n) const
return (m_private.get() == n.m_private.get());
}
+bool WebNode::lessThan(const WebNode& n) const
+{
+ return (m_private.get() < n.m_private.get());
+}
+
WebNode::NodeType WebNode::nodeType() const
{
return static_cast<NodeType>(m_private->nodeType());
diff --git a/WebKit/chromium/src/WebPluginContainerImpl.cpp b/WebKit/chromium/src/WebPluginContainerImpl.cpp
index 41758d2..e24e372 100644
--- a/WebKit/chromium/src/WebPluginContainerImpl.cpp
+++ b/WebKit/chromium/src/WebPluginContainerImpl.cpp
@@ -33,14 +33,18 @@
#include "Chrome.h"
#include "ChromeClientImpl.h"
+#include "WebClipboard.h"
#include "WebCursorInfo.h"
#include "WebDataSourceImpl.h"
#include "WebElement.h"
#include "WebInputEvent.h"
#include "WebInputEventConversion.h"
#include "WebKit.h"
+#include "WebKitClient.h"
#include "WebPlugin.h"
#include "WebRect.h"
+#include "WebString.h"
+#include "WebURL.h"
#include "WebURLError.h"
#include "WebURLRequest.h"
#include "WebVector.h"
@@ -57,6 +61,7 @@
#include "HTMLFormElement.h"
#include "HTMLNames.h"
#include "HTMLPlugInElement.h"
+#include "KeyboardCodes.h"
#include "KeyboardEvent.h"
#include "MouseEvent.h"
#include "Page.h"
@@ -246,9 +251,12 @@ void WebPluginContainerImpl::printEnd()
return m_webPlugin->printEnd();
}
-WebString WebPluginContainerImpl::selectedText()
+void WebPluginContainerImpl::copy()
{
- return m_webPlugin->selectedText();
+ if (!plugin()->hasSelection())
+ return;
+
+ webKitClient()->clipboard()->writeHTML(plugin()->selectionAsMarkup(), WebURL(), plugin()->selectionAsText(), false);
}
WebElement WebPluginContainerImpl::element()
@@ -441,6 +449,19 @@ void WebPluginContainerImpl::handleKeyboardEvent(KeyboardEvent* event)
if (webEvent.type == WebInputEvent::Undefined)
return;
+ if (webEvent.type == WebInputEvent::KeyDown) {
+#if defined(OS_MACOSX)
+ if (webEvent.modifiers == WebInputEvent::MetaKey
+#else
+ if (webEvent.modifiers == WebInputEvent::ControlKey
+#endif
+ && webEvent.windowsKeyCode == VKEY_C) {
+ copy();
+ event->setDefaultHandled();
+ return;
+ }
+ }
+
WebCursorInfo cursorInfo;
if (m_webPlugin->handleInputEvent(webEvent, cursorInfo))
event->setDefaultHandled();
diff --git a/WebKit/chromium/src/WebPluginContainerImpl.h b/WebKit/chromium/src/WebPluginContainerImpl.h
index dd0871a..2a46e00 100644
--- a/WebKit/chromium/src/WebPluginContainerImpl.h
+++ b/WebKit/chromium/src/WebPluginContainerImpl.h
@@ -102,7 +102,8 @@ public:
// Ends the print operation.
void printEnd();
- WebString selectedText();
+ // Copy the selected text.
+ void copy();
// Resource load events for the plugin's source data:
void didReceiveResponse(const WebCore::ResourceResponse&);
diff --git a/WebKit/chromium/src/WebPopupMenuImpl.cpp b/WebKit/chromium/src/WebPopupMenuImpl.cpp
index dbf9183..2abdc62 100644
--- a/WebKit/chromium/src/WebPopupMenuImpl.cpp
+++ b/WebKit/chromium/src/WebPopupMenuImpl.cpp
@@ -56,7 +56,8 @@ namespace WebKit {
WebPopupMenu* WebPopupMenu::create(WebWidgetClient* client)
{
- return new WebPopupMenuImpl(client);
+ // Pass the WebPopupMenuImpl's self-reference to the caller.
+ return adoptRef(new WebPopupMenuImpl(client)).leakRef();
}
// WebWidget ------------------------------------------------------------------
diff --git a/WebKit/chromium/src/WebSerializedScriptValue.cpp b/WebKit/chromium/src/WebSerializedScriptValue.cpp
index ce8517a..7149a4d 100644
--- a/WebKit/chromium/src/WebSerializedScriptValue.cpp
+++ b/WebKit/chromium/src/WebSerializedScriptValue.cpp
@@ -43,6 +43,11 @@ WebSerializedScriptValue WebSerializedScriptValue::fromString(const WebString& s
return SerializedScriptValue::createFromWire(s);
}
+WebSerializedScriptValue WebSerializedScriptValue::createInvalid()
+{
+ return SerializedScriptValue::create();
+}
+
void WebSerializedScriptValue::reset()
{
m_private.reset();
diff --git a/WebKit/chromium/src/WebSharedWorkerImpl.cpp b/WebKit/chromium/src/WebSharedWorkerImpl.cpp
index 51bbf1b..e73c0f4 100644
--- a/WebKit/chromium/src/WebSharedWorkerImpl.cpp
+++ b/WebKit/chromium/src/WebSharedWorkerImpl.cpp
@@ -85,7 +85,7 @@ void WebSharedWorkerImpl::connectTask(ScriptExecutionContext* context, WebShared
{
// Wrap the passed-in channel in a MessagePort, and send it off via a connect event.
RefPtr<MessagePort> port = MessagePort::create(*context);
- port->entangle(channel.release());
+ port->entangle(channel);
ASSERT(context->isWorkerContext());
WorkerContext* workerContext = static_cast<WorkerContext*>(context);
ASSERT(workerContext->isSharedWorkerContext());
diff --git a/WebKit/chromium/src/WebURLLoadTiming.cpp b/WebKit/chromium/src/WebURLLoadTiming.cpp
new file mode 100644
index 0000000..27ed362
--- /dev/null
+++ b/WebKit/chromium/src/WebURLLoadTiming.cpp
@@ -0,0 +1,192 @@
+/*
+ * 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 "WebURLLoadTiming.h"
+
+#include "ResourceLoadTiming.h"
+#include "WebString.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void WebURLLoadTiming::initialize()
+{
+ m_private = ResourceLoadTiming::create();
+}
+
+void WebURLLoadTiming::reset()
+{
+ m_private.reset();
+}
+
+void WebURLLoadTiming::assign(const WebURLLoadTiming& other)
+{
+ m_private = other.m_private;
+}
+
+double WebURLLoadTiming::requestTime() const
+{
+ return m_private->requestTime;
+}
+
+void WebURLLoadTiming::setRequestTime(double time)
+{
+ m_private->requestTime = time;
+}
+
+int WebURLLoadTiming::proxyStart() const
+{
+ return m_private->proxyStart;
+}
+
+void WebURLLoadTiming::setProxyStart(int start)
+{
+ m_private->proxyStart = start;
+}
+
+int WebURLLoadTiming::proxyEnd() const
+{
+ return m_private->proxyEnd;
+}
+
+void WebURLLoadTiming::setProxyEnd(int end)
+{
+ m_private->proxyEnd = end;
+}
+
+int WebURLLoadTiming::dnsStart() const
+{
+ return m_private->dnsStart;
+}
+
+void WebURLLoadTiming::setDNSStart(int start)
+{
+ m_private->dnsStart = start;
+}
+
+int WebURLLoadTiming::dnsEnd() const
+{
+ return m_private->dnsEnd;
+}
+
+void WebURLLoadTiming::setDNSEnd(int end)
+{
+ m_private->dnsEnd = end;
+}
+
+int WebURLLoadTiming::connectStart() const
+{
+ return m_private->connectStart;
+}
+
+void WebURLLoadTiming::setConnectStart(int start)
+{
+ m_private->connectStart = start;
+}
+
+int WebURLLoadTiming::connectEnd() const
+{
+ return m_private->connectEnd;
+}
+
+void WebURLLoadTiming::setConnectEnd(int end)
+{
+ m_private->connectEnd = end;
+}
+
+int WebURLLoadTiming::sendStart() const
+{
+ return m_private->sendStart;
+}
+
+void WebURLLoadTiming::setSendStart(int start)
+{
+ m_private->sendStart = start;
+}
+
+int WebURLLoadTiming::sendEnd() const
+{
+ return m_private->sendEnd;
+}
+
+void WebURLLoadTiming::setSendEnd(int end)
+{
+ m_private->sendEnd = end;
+}
+
+int WebURLLoadTiming::receiveHeadersEnd() const
+{
+ return m_private->receiveHeadersEnd;
+}
+
+void WebURLLoadTiming::setReceiveHeadersEnd(int end)
+{
+ m_private->receiveHeadersEnd = end;
+}
+
+int WebURLLoadTiming::sslStart() const
+{
+ return m_private->sslStart;
+}
+
+void WebURLLoadTiming::setSSLStart(int start)
+{
+ m_private->sslStart = start;
+}
+
+int WebURLLoadTiming::sslEnd() const
+{
+ return m_private->sslEnd;
+}
+
+void WebURLLoadTiming::setSSLEnd(int end)
+{
+ m_private->sslEnd = end;
+}
+
+WebURLLoadTiming::WebURLLoadTiming(const PassRefPtr<ResourceLoadTiming>& value)
+ : m_private(value)
+{
+}
+
+WebURLLoadTiming& WebURLLoadTiming::operator=(const PassRefPtr<ResourceLoadTiming>& value)
+{
+ m_private = value;
+ return *this;
+}
+
+WebURLLoadTiming::operator PassRefPtr<ResourceLoadTiming>() const
+{
+ return m_private.get();
+}
+
+} // namespace WebKit
diff --git a/WebKit/chromium/src/WebURLRequest.cpp b/WebKit/chromium/src/WebURLRequest.cpp
index 46fa842..3b2d251 100644
--- a/WebKit/chromium/src/WebURLRequest.cpp
+++ b/WebKit/chromium/src/WebURLRequest.cpp
@@ -194,6 +194,16 @@ void WebURLRequest::setReportUploadProgress(bool reportUploadProgress)
m_private->m_resourceRequest->setReportUploadProgress(reportUploadProgress);
}
+bool WebURLRequest::reportLoadTiming() const
+{
+ return m_private->m_resourceRequest->reportLoadTiming();
+}
+
+void WebURLRequest::setReportLoadTiming(bool reportLoadTiming)
+{
+ m_private->m_resourceRequest->setReportLoadTiming(reportLoadTiming);
+}
+
WebURLRequest::TargetType WebURLRequest::targetType() const
{
return static_cast<TargetType>(m_private->m_resourceRequest->targetType());
diff --git a/WebKit/chromium/src/WebURLResponse.cpp b/WebKit/chromium/src/WebURLResponse.cpp
index 3f3ddba..2b7facc 100644
--- a/WebKit/chromium/src/WebURLResponse.cpp
+++ b/WebKit/chromium/src/WebURLResponse.cpp
@@ -32,12 +32,16 @@
#include "WebURLResponse.h"
#include "ResourceResponse.h"
+#include "ResourceLoadTiming.h"
#include "WebHTTPHeaderVisitor.h"
#include "WebString.h"
#include "WebURL.h"
+#include "WebURLLoadTiming.h"
#include "WebURLResponsePrivate.h"
+#include <wtf/RefPtr.h>
+
using namespace WebCore;
namespace WebKit {
@@ -93,6 +97,27 @@ void WebURLResponse::setURL(const WebURL& url)
m_private->m_resourceResponse->setURL(url);
}
+unsigned WebURLResponse::connectionID() const
+{
+ return m_private->m_resourceResponse->connectionID();
+}
+
+void WebURLResponse::setConnectionID(unsigned connectionID)
+{
+ m_private->m_resourceResponse->setConnectionID(connectionID);
+}
+
+WebURLLoadTiming WebURLResponse::loadTiming()
+{
+ return WebURLLoadTiming(m_private->m_resourceResponse->resourceLoadTiming());
+}
+
+void WebURLResponse::setLoadTiming(const WebURLLoadTiming& timing)
+{
+ RefPtr<ResourceLoadTiming> loadTiming = PassRefPtr<ResourceLoadTiming>(timing);
+ m_private->m_resourceResponse->setResourceLoadTiming(loadTiming.release());
+}
+
double WebURLResponse::responseTime() const
{
return m_private->m_resourceResponse->responseTime();
@@ -267,6 +292,16 @@ const ResourceResponse& WebURLResponse::toResourceResponse() const
return *m_private->m_resourceResponse;
}
+bool WebURLResponse::wasCached() const
+{
+ return m_private->m_resourceResponse->wasCached();
+}
+
+void WebURLResponse::setWasCached(bool value)
+{
+ m_private->m_resourceResponse->setWasCached(value);
+}
+
bool WebURLResponse::wasFetchedViaSPDY() const
{
return m_private->m_resourceResponse->wasFetchedViaSPDY();
diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
index 45b9117..d1ca71e 100644
--- a/WebKit/chromium/src/WebViewImpl.cpp
+++ b/WebKit/chromium/src/WebViewImpl.cpp
@@ -84,6 +84,7 @@
#include "Settings.h"
#include "Timer.h"
#include "TypingCommand.h"
+#include "Vector.h"
#include "WebAccessibilityObject.h"
#include "WebDevToolsAgentPrivate.h"
#include "WebDevToolsAgentImpl.h"
@@ -96,6 +97,8 @@
#include "WebKitClient.h"
#include "WebMediaPlayerAction.h"
#include "WebNode.h"
+#include "WebPlugin.h"
+#include "WebPluginContainerImpl.h"
#include "WebPoint.h"
#include "WebPopupMenuImpl.h"
#include "WebRect.h"
@@ -137,8 +140,8 @@ static const double maxTextSizeMultiplier = 3.0;
const char* pageGroupName = "default";
// Used to defer all page activity in cases where the embedder wishes to run
-// a nested event loop.
-static PageGroupLoadDeferrer* pageGroupLoadDeferrer;
+// a nested event loop. Using a stack enables nesting of message loop invocations.
+static Vector<PageGroupLoadDeferrer*> pageGroupLoadDeferrerStack;
// Ensure that the WebDragOperation enum values stay in sync with the original
// DragOperation constants.
@@ -168,7 +171,8 @@ static const PopupContainerSettings autoFillPopupSettings = {
WebView* WebView::create(WebViewClient* client, WebDevToolsAgentClient* devToolsClient)
{
- return new WebViewImpl(client, devToolsClient);
+ // Pass the WebViewImpl's self-reference to the caller.
+ return adoptRef(new WebViewImpl(client, devToolsClient)).leakRef();
}
void WebView::updateVisitedLinkState(unsigned long long linkHash)
@@ -183,23 +187,23 @@ void WebView::resetVisitedLinkState()
void WebView::willEnterModalLoop()
{
- // It is not valid to nest more than once.
- ASSERT(!pageGroupLoadDeferrer);
-
PageGroup* pageGroup = PageGroup::pageGroup(pageGroupName);
ASSERT(pageGroup);
if (pageGroup->pages().isEmpty())
- return;
-
- // Pick any page in the page group since we are deferring all pages.
- pageGroupLoadDeferrer = new PageGroupLoadDeferrer(*pageGroup->pages().begin(), true);
+ pageGroupLoadDeferrerStack.append(static_cast<PageGroupLoadDeferrer*>(0));
+ else {
+ // Pick any page in the page group since we are deferring all pages.
+ pageGroupLoadDeferrerStack.append(new PageGroupLoadDeferrer(*pageGroup->pages().begin(), true));
+ }
}
void WebView::didExitModalLoop()
{
- delete pageGroupLoadDeferrer;
- pageGroupLoadDeferrer = 0;
+ ASSERT(pageGroupLoadDeferrerStack.size());
+
+ delete pageGroupLoadDeferrerStack.last();
+ pageGroupLoadDeferrerStack.removeLast();
}
void WebViewImpl::initializeMainFrame(WebFrameClient* frameClient)
@@ -263,7 +267,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client, WebDevToolsAgentClient* devTools
if (devToolsClient)
m_devToolsAgent = new WebDevToolsAgentImpl(this, devToolsClient);
- m_page.set(new Page(&m_chromeClientImpl, &m_contextMenuClientImpl, &m_editorClientImpl, &m_dragClientImpl, &m_inspectorClientImpl, 0, 0, 0));
+ m_page.set(new Page(&m_chromeClientImpl, &m_contextMenuClientImpl, &m_editorClientImpl, &m_dragClientImpl, &m_inspectorClientImpl, 0, 0, 0, 0));
// the page will take ownership of the various clients
@@ -1434,8 +1438,11 @@ int WebViewImpl::setZoomLevel(bool textOnly, int zoomLevel)
if (!view)
return m_zoomLevel;
if (zoomFactor != view->zoomFactor()) {
- m_zoomLevel = zoomLevel;
view->setZoomFactor(zoomFactor, textOnly ? ZoomTextOnly : ZoomPage);
+ WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(frame);
+ if (pluginContainer)
+ pluginContainer->plugin()->setZoomFactor(zoomFactor, textOnly);
+ m_zoomLevel = zoomLevel;
}
return m_zoomLevel;
}
@@ -1864,7 +1871,10 @@ void WebViewImpl::setSelectionColors(unsigned activeBackgroundColor,
#endif
}
-void WebView::addUserScript(const WebString& sourceCode, const WebVector<WebString>& patternsIn, bool runAtStart)
+void WebView::addUserScript(const WebString& sourceCode,
+ const WebVector<WebString>& patternsIn,
+ WebView::UserScriptInjectAt injectAt,
+ WebView::UserContentInjectIn injectIn)
{
OwnPtr<Vector<String> > patterns(new Vector<String>);
for (size_t i = 0; i < patternsIn.size(); ++i)
@@ -1873,10 +1883,13 @@ void WebView::addUserScript(const WebString& sourceCode, const WebVector<WebStri
PageGroup* pageGroup = PageGroup::pageGroup(pageGroupName);
RefPtr<DOMWrapperWorld> world(DOMWrapperWorld::create());
pageGroup->addUserScriptToWorld(world.get(), sourceCode, WebURL(), patterns.release(), 0,
- runAtStart ? InjectAtDocumentStart : InjectAtDocumentEnd);
+ static_cast<UserScriptInjectionTime>(injectAt),
+ static_cast<UserContentInjectedFrames>(injectIn));
}
-void WebView::addUserStyleSheet(const WebString& sourceCode, const WebVector<WebString>& patternsIn)
+void WebView::addUserStyleSheet(const WebString& sourceCode,
+ const WebVector<WebString>& patternsIn,
+ WebView::UserContentInjectIn injectIn)
{
OwnPtr<Vector<String> > patterns(new Vector<String>);
for (size_t i = 0; i < patternsIn.size(); ++i)
@@ -1884,7 +1897,8 @@ void WebView::addUserStyleSheet(const WebString& sourceCode, const WebVector<Web
PageGroup* pageGroup = PageGroup::pageGroup(pageGroupName);
RefPtr<DOMWrapperWorld> world(DOMWrapperWorld::create());
- pageGroup->addUserStyleSheetToWorld(world.get(), sourceCode, WebURL(), patterns.release(), 0);
+ pageGroup->addUserStyleSheetToWorld(world.get(), sourceCode, WebURL(), patterns.release(), 0,
+ static_cast<UserContentInjectedFrames>(injectIn));
}
void WebView::removeAllUserContent()
diff --git a/WebKit/chromium/src/WebWorkerBase.cpp b/WebKit/chromium/src/WebWorkerBase.cpp
index 0ad0ccd..9593f5f 100644
--- a/WebKit/chromium/src/WebWorkerBase.cpp
+++ b/WebKit/chromium/src/WebWorkerBase.cpp
@@ -185,7 +185,7 @@ void WebWorkerBase::initializeLoader(const WebURL& url)
void WebWorkerBase::dispatchTaskToMainThread(PassOwnPtr<ScriptExecutionContext::Task> task)
{
- return callOnMainThread(invokeTaskMethod, task.release());
+ callOnMainThread(invokeTaskMethod, task.leakPtr());
}
void WebWorkerBase::invokeTaskMethod(void* param)
diff --git a/WebKit/chromium/src/WebWorkerClientImpl.cpp b/WebKit/chromium/src/WebWorkerClientImpl.cpp
index 13b7fe6..18282e3 100644
--- a/WebKit/chromium/src/WebWorkerClientImpl.cpp
+++ b/WebKit/chromium/src/WebWorkerClientImpl.cpp
@@ -360,7 +360,7 @@ void WebWorkerClientImpl::postMessageToWorkerObjectTask(
if (thisPtr->m_worker) {
OwnPtr<MessagePortArray> ports =
- MessagePort::entanglePorts(*context, channels.release());
+ MessagePort::entanglePorts(*context, channels);
RefPtr<SerializedScriptValue> serializedMessage =
SerializedScriptValue::createFromWire(message);
thisPtr->m_worker->dispatchEvent(MessageEvent::create(ports.release(),
diff --git a/WebKit/chromium/src/WebWorkerImpl.cpp b/WebKit/chromium/src/WebWorkerImpl.cpp
index 857c50f..165af68 100644
--- a/WebKit/chromium/src/WebWorkerImpl.cpp
+++ b/WebKit/chromium/src/WebWorkerImpl.cpp
@@ -86,7 +86,7 @@ void WebWorkerImpl::postMessageToWorkerContextTask(WebCore::ScriptExecutionConte
static_cast<DedicatedWorkerContext*>(context);
OwnPtr<MessagePortArray> ports =
- MessagePort::entanglePorts(*context, channels.release());
+ MessagePort::entanglePorts(*context, channels);
RefPtr<SerializedScriptValue> serializedMessage =
SerializedScriptValue::createFromWire(message);
workerContext->dispatchEvent(MessageEvent::create(
diff --git a/WebKit/chromium/src/js/DebuggerScript.js b/WebKit/chromium/src/js/DebuggerScript.js
index 25d1903..70c2fbe 100644
--- a/WebKit/chromium/src/js/DebuggerScript.js
+++ b/WebKit/chromium/src/js/DebuggerScript.js
@@ -84,7 +84,7 @@ DebuggerScript._formatScript = function(script)
id: script.id,
name: script.name,
source: script.source,
- lineOffset: script.line_offset,
+ lineOffset: DebuggerScript._v8ToWebkitLineNumber(script.line_offset),
lineCount: script.lineCount(),
scriptWorldType: scriptWorldType
};
diff --git a/WebKit/chromium/src/js/Tests.js b/WebKit/chromium/src/js/Tests.js
index cd4d9fb..81432eb 100644
--- a/WebKit/chromium/src/js/Tests.js
+++ b/WebKit/chromium/src/js/Tests.js
@@ -852,7 +852,7 @@ TestSuite.prototype.showMainPageScriptSource_ = function(scriptName, callback)
*/
TestSuite.prototype.evaluateInConsole_ = function(code, callback)
{
- WebInspector.console.visible = true;
+ WebInspector.showConsole();
WebInspector.console.prompt.text = code;
WebInspector.console.promptElement.dispatchEvent( TestSuite.createKeyEvent("Enter"));
@@ -952,8 +952,12 @@ TestSuite.prototype.testCompletionOnPause = function()
showConsole);
function showConsole() {
- test.addSniffer(WebInspector.console, "afterShow", testLocalsCompletion);
- WebInspector.showConsole();
+ if (WebInspector.currentFocusElement === WebInspector.console.promptElement)
+ testLocalsCompletion();
+ else {
+ test.addSniffer(WebInspector.console, "afterShow", testLocalsCompletion);
+ WebInspector.showConsole();
+ }
}
function testLocalsCompletion() {
@@ -1775,7 +1779,7 @@ TestSuite.prototype.testConsoleEval = function()
*/
TestSuite.prototype.testConsoleLog = function()
{
- WebInspector.console.visible = true;
+ WebInspector.showConsole();
var messages = WebInspector.console.messages;
var index = 0;
@@ -1817,7 +1821,7 @@ TestSuite.prototype.testConsoleLog = function()
*/
TestSuite.prototype.testEvalGlobal = function()
{
- WebInspector.console.visible = true;
+ WebInspector.showConsole();
var inputs = ["foo", "foobar"];
var expectations = ["foo", "fooValue", "foobar", "ReferenceError: foobar is not defined"];
@@ -1850,6 +1854,48 @@ TestSuite.prototype.testEvalGlobal = function()
/**
+ * Tests the message loop re-entrancy.
+ */
+TestSuite.prototype.testMessageLoopReentrant = function()
+{
+ var test = this;
+ this.showPanel("scripts");
+
+ var breakpointLine = 16;
+
+ WebInspector.showConsole();
+
+ this._waitUntilScriptsAreParsed(["debugger_test_page.html"],
+ function() {
+ test.showMainPageScriptSource_(
+ "debugger_test_page.html",
+ function(view, url) {
+ view._addBreakpoint(breakpointLine);
+
+ test.evaluateInConsole_(
+ 'setTimeout("calculate()", 0)',
+ function(resultText) {
+ test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText);
+ });
+
+ });
+ });
+
+ // Wait until script is paused.
+ this.addSniffer(
+ WebInspector,
+ "pausedScript",
+ function(callFrames) {
+ test.evaluateInConsole_(
+ 'document.cookie',
+ test.releaseControl.bind(test)); // This callback will be invoked only if the test succeeds (i.e. no crash).
+ });
+
+ this.takeControl();
+};
+
+
+/**
* Tests that Storage panel can be open and that local DOM storage is added
* to the panel.
*/
diff --git a/WebKit/chromium/tests/DragImageTest.cpp b/WebKit/chromium/tests/DragImageTest.cpp
index 7b7d4ee..8ce6fe2 100644
--- a/WebKit/chromium/tests/DragImageTest.cpp
+++ b/WebKit/chromium/tests/DragImageTest.cpp
@@ -43,6 +43,11 @@ namespace {
class TestImage : public Image {
public:
+ static PassRefPtr<TestImage> create(const IntSize& size)
+ {
+ return adoptRef(new TestImage(size));
+ }
+
explicit TestImage(const IntSize& size)
: Image(0)
, m_size(size)
@@ -108,8 +113,8 @@ TEST(DragImageTest, NullHandling)
TEST(DragImageTest, NonNullHandling)
{
- TestImage testImage(IntSize(2, 2));
- DragImageRef dragImage = createDragImageFromImage(&testImage);
+ RefPtr<TestImage> testImage(TestImage::create(IntSize(2, 2)));
+ DragImageRef dragImage = createDragImageFromImage(testImage.get());
ASSERT_TRUE(dragImage);
dragImage = scaleDragImage(dragImage, FloatSize(0.5, 0.5));
@@ -129,17 +134,17 @@ TEST(DragImageTest, CreateDragImage)
{
// Tests that the DrageImage implementation doesn't choke on null values
// of nativeImageForCurrentFrame().
- TestImage testImage((IntSize()));
- EXPECT_FALSE(createDragImageFromImage(&testImage));
+ RefPtr<TestImage> testImage(TestImage::create(IntSize()));
+ EXPECT_FALSE(createDragImageFromImage(testImage.get()));
}
{
// Tests that the drag image is a deep copy.
- TestImage testImage(IntSize(1, 1));
- DragImageRef dragImage = createDragImageFromImage(&testImage);
+ RefPtr<TestImage> testImage(TestImage::create(IntSize(1, 1)));
+ DragImageRef dragImage = createDragImageFromImage(testImage.get());
ASSERT_TRUE(dragImage);
- SkAutoLockPixels lock1(*dragImage), lock2(*testImage.nativeImageForCurrentFrame());
- EXPECT_NE(dragImage->getPixels(), testImage.nativeImageForCurrentFrame()->getPixels());
+ SkAutoLockPixels lock1(*dragImage), lock2(*(testImage->nativeImageForCurrentFrame()));
+ EXPECT_NE(dragImage->getPixels(), testImage->nativeImageForCurrentFrame()->getPixels());
}
}
diff --git a/WebKit/chromium/tests/PopupMenuTest.cpp b/WebKit/chromium/tests/PopupMenuTest.cpp
index 9a45dc2..6680d74 100644
--- a/WebKit/chromium/tests/PopupMenuTest.cpp
+++ b/WebKit/chromium/tests/PopupMenuTest.cpp
@@ -107,8 +107,15 @@ public:
class TestWebPopupMenuImpl : public WebPopupMenuImpl {
public:
- TestWebPopupMenuImpl(WebWidgetClient* client) : WebPopupMenuImpl(client) { }
+ static PassRefPtr<TestWebPopupMenuImpl> create(WebWidgetClient* client)
+ {
+ return adoptRef(new TestWebPopupMenuImpl(client));
+ }
+
~TestWebPopupMenuImpl() { }
+
+private:
+ TestWebPopupMenuImpl(WebWidgetClient* client) : WebPopupMenuImpl(client) { }
};
class TestWebWidget : public WebWidget {
@@ -135,10 +142,10 @@ public:
class TestWebViewClient : public WebViewClient {
public:
- TestWebViewClient() : m_webPopupMenu(&m_webWidgetClient) { }
+ TestWebViewClient() : m_webPopupMenu(TestWebPopupMenuImpl::create(&m_webWidgetClient)) { }
~TestWebViewClient() { }
- virtual WebWidget* createPopupMenu(WebPopupType) { return &m_webPopupMenu; }
+ virtual WebWidget* createPopupMenu(WebPopupType) { return m_webPopupMenu.get(); }
// We need to override this so that the popup menu size is not 0
// (the layout code checks to see if the popup fits on the screen).
@@ -152,7 +159,7 @@ public:
private:
TestWebWidgetClient m_webWidgetClient;
- TestWebPopupMenuImpl m_webPopupMenu;
+ RefPtr<TestWebPopupMenuImpl> m_webPopupMenu;
};
class TestWebFrameClient : public WebFrameClient {
diff --git a/WebKit/efl/EWebLauncher/main.c b/WebKit/efl/EWebLauncher/main.c
index 6d484e4a..362eefd 100644
--- a/WebKit/efl/EWebLauncher/main.c
+++ b/WebKit/efl/EWebLauncher/main.c
@@ -47,6 +47,7 @@
#define DEFAULT_WIDTH 800
#define DEFAULT_HEIGHT 600
+#define DEFAULT_ZOOM_INIT 1.0
#define info(format, args...) \
do { \
@@ -125,6 +126,15 @@ static const Ecore_Getopt options = {
}
};
+typedef struct _Viewport {
+ int w;
+ int h;
+ float initScale;
+ float minScale;
+ float maxScale;
+ Eina_Bool userScalable;
+} Viewport;
+
typedef struct _ELauncher {
Ecore_Evas *ee;
Evas *evas;
@@ -132,6 +142,7 @@ typedef struct _ELauncher {
Evas_Object *browser;
const char *theme;
const char *userAgent;
+ Viewport viewport;
} ELauncher;
static void browserDestroy(Ecore_Evas *ee);
@@ -225,6 +236,23 @@ title_set(Ecore_Evas *ee, const char *title, int progress)
ecore_evas_title_set(ee, label);
}
+/**
+ * This is en example function to adjust viewport via viewport tag's arguments.
+ * Application can invoke this function in order to adjust viewport tag when it is required.
+ */
+static void
+viewport_set()
+{
+ ELauncher *app;
+ app = (ELauncher*) eina_list_data_get(windows);
+
+ ewk_view_fixed_layout_size_set(app->browser, app->viewport.w, app->viewport.h);
+ ewk_view_zoom_set(app->browser, app->viewport.initScale, 0, 0);
+ if (!ewk_view_zoom_range_set(app->browser, app->viewport.minScale, app->viewport.maxScale))
+ info(" Fail to set zoom range. minScale = %f, maxScale = %f\n", app->viewport.minScale, app->viewport.maxScale);
+ ewk_view_user_scalable_set(app->browser, app->viewport.userScalable);
+}
+
static void
on_title_changed(void *user_data, Evas_Object *webview, void *event_info)
{
@@ -345,6 +373,48 @@ on_tooltip_text_set(void* user_data, Evas_Object* webview, void* event_info)
info("%s\n", text);
}
+/**
+ * "viewport,changed" signal will be always emitted regardless of the viewport existence.
+ *
+ * If you don't want to process the viewport tag, you can either do nothing in this callback
+ * or simply ignore the signal in your application.
+ *
+ * More information about this can be found at http://developer.apple.com/safari/library/docum
+ * entation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html
+ */
+static void
+on_viewport_changed(void* user_data, Evas_Object* webview, void* event_info)
+{
+ ELauncher *app = (ELauncher *)user_data;
+
+ float w, h, initScale, minScale, maxScale, userScalable;
+
+ ewk_view_viewport_get(webview, &w, &h, &initScale, &maxScale, &minScale, &userScalable);
+
+ /**
+ * If there is no argument in viewport tag, argument's value is -1.
+ */
+ if ((int)w == -1)
+ w = DEFAULT_WIDTH;
+ if ((int)h == -1)
+ h = DEFAULT_HEIGHT;
+ if ((int)initScale == -1)
+ initScale = DEFAULT_ZOOM_INIT; // There's no scale separated from zooming in webkit-efl.
+ if ((int)minScale == -1)
+ minScale = ewk_view_zoom_range_min_get(webview);
+ if ((int)maxScale == -1)
+ maxScale = ewk_view_zoom_range_max_get(webview);
+ if ((int)userScalable == -1)
+ userScalable = EINA_TRUE;
+
+ app->viewport.w = (int)w;
+ app->viewport.h = (int)h;
+ app->viewport.initScale = initScale;
+ app->viewport.minScale = minScale;
+ app->viewport.maxScale = maxScale;
+ app->viewport.userScalable = (Eina_Bool)userScalable;
+}
+
static void
on_mouse_down(void* data, Evas* e, Evas_Object* webview, void* event_info)
{
@@ -579,6 +649,7 @@ browserCreate(const char *url, const char *theme, const char *userAgent, Eina_Re
evas_object_smart_callback_add(app->browser, "title,changed", on_title_changed, app);
evas_object_smart_callback_add(app->browser, "load,progress", on_progress, app);
evas_object_smart_callback_add(app->browser, "load,finished", on_load_finished, app);
+ evas_object_smart_callback_add(app->browser, "viewport,changed", on_viewport_changed, app);
evas_object_smart_callback_add(app->browser, "toolbars,visible,set", on_toolbars_visible_set, app);
evas_object_smart_callback_add(app->browser, "toolbars,visible,get", on_toolbars_visible_get, app);
diff --git a/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp b/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
index 5fef33e..342654a 100644
--- a/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
+++ b/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
@@ -47,6 +47,7 @@
#include "KURL.h"
#include "NotImplemented.h"
#include "PlatformString.h"
+#include "ViewportArguments.h"
#include "WindowFeatures.h"
#include "ewk_private.h"
#include <Ecore_Evas.h>
@@ -504,4 +505,13 @@ void ChromeClientEfl::chooseIconForFiles(const Vector<String>&, FileChooser*)
notImplemented();
}
+void ChromeClientEfl::didReceiveViewportArguments(Frame* frame, const ViewportArguments& arguments) const
+{
+ FrameLoaderClientEfl* client = static_cast<FrameLoaderClientEfl*>(frame->loader()->client());
+ if (client->getInitLayoutCompleted())
+ return;
+
+ ewk_view_viewport_set(m_view, arguments.width, arguments.height, arguments.initialScale, arguments.minimumScale, arguments.maximumScale, arguments.userScalable);
+}
+
}
diff --git a/WebKit/efl/WebCoreSupport/ChromeClientEfl.h b/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
index fccf54f..45bda59 100644
--- a/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
+++ b/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
@@ -135,6 +135,8 @@ public:
virtual void cancelGeolocationPermissionRequestForFrame(Frame*);
virtual void iconForFiles(const Vector<String, 0u>&, PassRefPtr<FileChooser>);
+ virtual void didReceiveViewportArguments(Frame* frame, const ViewportArguments& arguments) const;
+
Evas_Object* m_view;
KURL m_hoveredLinkURL;
};
diff --git a/WebKit/efl/WebCoreSupport/ContextMenuClientEfl.cpp b/WebKit/efl/WebCoreSupport/ContextMenuClientEfl.cpp
index 19c3705..37d7d5a 100644
--- a/WebKit/efl/WebCoreSupport/ContextMenuClientEfl.cpp
+++ b/WebKit/efl/WebCoreSupport/ContextMenuClientEfl.cpp
@@ -30,11 +30,11 @@
#include "ContextMenu.h"
#include "EWebKit.h"
-#include "ewk_private.h"
#include "HitTestResult.h"
#include "KURL.h"
#include "NotImplemented.h"
#include "PlatformMenuDescription.h"
+#include "ewk_private.h"
using namespace WebCore;
@@ -62,9 +62,16 @@ void ContextMenuClientEfl::contextMenuItemSelected(ContextMenuItem*, const Conte
notImplemented();
}
-void ContextMenuClientEfl::downloadURL(const KURL&)
+void ContextMenuClientEfl::downloadURL(const KURL& url)
{
- notImplemented();
+ if (!m_view)
+ return;
+
+ Ewk_Download download;
+
+ CString downloadUrl = url.prettyURL().utf8();
+ download.url = downloadUrl.data();
+ ewk_view_download_request(m_view, &download);
}
void ContextMenuClientEfl::searchWithGoogle(const Frame*)
diff --git a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
index 50356e9..5648ec7 100644
--- a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
+++ b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
@@ -49,6 +49,7 @@
#include "ProgressTracker.h"
#include "RenderPart.h"
#include "ResourceRequest.h"
+#include "ViewportArguments.h"
#include "ewk_private.h"
#include <wtf/text/CString.h>
@@ -70,6 +71,7 @@ FrameLoaderClientEfl::FrameLoaderClientEfl(Evas_Object *view)
, m_customUserAgent("")
, m_pluginView(0)
, m_hasSentResponseToPlugin(false)
+ , m_initLayoutCompleted(false)
{
}
@@ -249,9 +251,25 @@ void FrameLoaderClientEfl::dispatchDidCancelAuthenticationChallenge(DocumentLoad
notImplemented();
}
-void FrameLoaderClientEfl::dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&)
+void FrameLoaderClientEfl::dispatchWillSendRequest(DocumentLoader* loader, unsigned long identifier, ResourceRequest& coreRequest, const ResourceResponse& coreResponse)
{
- notImplemented();
+ CString url = coreRequest.url().prettyURL().utf8();
+ DBG("Resource url=%s", url.data());
+
+ Ewk_Frame_Resource_Request request = { 0, identifier };
+ Ewk_Frame_Resource_Request orig = request; /* Initialize const fields. */
+
+ orig.url = request.url = url.data();
+
+ ewk_frame_request_will_send(m_frame, &request);
+
+ if (request.url != orig.url) {
+ coreRequest.setURL(KURL(KURL(), request.url));
+
+ // Calling client might have changed our url pointer.
+ // Free the new allocated string.
+ free(const_cast<char*>(request.url));
+ }
}
bool FrameLoaderClientEfl::shouldUseCredentialStorage(DocumentLoader*, unsigned long)
@@ -260,9 +278,13 @@ bool FrameLoaderClientEfl::shouldUseCredentialStorage(DocumentLoader*, unsigned
return false;
}
-void FrameLoaderClientEfl::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&)
+void FrameLoaderClientEfl::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest& coreRequest)
{
- notImplemented();
+ CString url = coreRequest.url().prettyURL().utf8();
+ DBG("Resource url=%s", url.data());
+
+ Ewk_Frame_Resource_Request request = { 0, identifier };
+ ewk_frame_request_assign_identifier(m_frame, &request);
}
void FrameLoaderClientEfl::postProgressStartedNotification()
@@ -421,7 +443,7 @@ void FrameLoaderClientEfl::documentElementAvailable()
void FrameLoaderClientEfl::didPerformFirstNavigation() const
{
- notImplemented();
+ ewk_frame_did_perform_first_navigation(m_frame);
}
void FrameLoaderClientEfl::registerForIconNotification(bool)
@@ -456,14 +478,17 @@ void FrameLoaderClientEfl::frameLoadCompleted()
// Note: Can be called multiple times.
}
-void FrameLoaderClientEfl::saveViewStateToItem(HistoryItem*)
+void FrameLoaderClientEfl::saveViewStateToItem(HistoryItem* item)
{
- notImplemented();
+ ewk_frame_view_state_save(m_frame, item);
}
void FrameLoaderClientEfl::restoreViewState()
{
- notImplemented();
+ ASSERT(m_frame);
+ ASSERT(m_view);
+
+ ewk_view_restore_state(m_view, m_frame);
}
void FrameLoaderClientEfl::updateGlobalHistoryRedirectLinks()
@@ -542,7 +567,11 @@ void FrameLoaderClientEfl::dispatchWillPerformClientRedirect(const KURL&, double
void FrameLoaderClientEfl::dispatchDidChangeLocationWithinPage()
{
- notImplemented();
+ ewk_frame_uri_changed(m_frame);
+
+ if (ewk_view_frame_main_get(m_view) != m_frame)
+ return;
+ ewk_view_uri_changed(m_view);
}
void FrameLoaderClientEfl::dispatchWillClose()
@@ -552,10 +581,18 @@ void FrameLoaderClientEfl::dispatchWillClose()
void FrameLoaderClientEfl::dispatchDidReceiveIcon()
{
+ /* report received favicon only for main frame. */
+ if (ewk_view_frame_main_get(m_view) != m_frame)
+ return;
+
+ ewk_view_frame_main_icon_received(m_view);
}
void FrameLoaderClientEfl::dispatchDidStartProvisionalLoad()
{
+ ewk_frame_load_provisional(m_frame);
+ if (ewk_view_frame_main_get(m_view) == m_frame)
+ ewk_view_load_provisional(m_view);
}
void FrameLoaderClientEfl::dispatchDidReceiveTitle(const String& title)
@@ -575,32 +612,37 @@ void FrameLoaderClientEfl::dispatchDidChangeIcons()
void FrameLoaderClientEfl::dispatchDidCommitLoad()
{
+ m_initLayoutCompleted = false;
+
ewk_frame_uri_changed(m_frame);
if (ewk_view_frame_main_get(m_view) != m_frame)
return;
ewk_view_title_set(m_view, 0);
ewk_view_uri_changed(m_view);
+
+ ViewportArguments arguments;
+ ewk_view_viewport_set(m_view, arguments.width, arguments.height, arguments.initialScale, arguments.minimumScale, arguments.maximumScale, arguments.userScalable);
}
void FrameLoaderClientEfl::dispatchDidFinishDocumentLoad()
{
- notImplemented();
+ ewk_frame_load_document_finished(m_frame);
}
void FrameLoaderClientEfl::dispatchDidFirstLayout()
{
- // emit m_frame->initialLayoutCompleted();
- notImplemented();
+ m_initLayoutCompleted = true;
+ ewk_frame_load_firstlayout_finished(m_frame);
}
void FrameLoaderClientEfl::dispatchDidFirstVisuallyNonEmptyLayout()
{
- notImplemented();
+ ewk_frame_load_firstlayout_nonempty_finished(m_frame);
}
void FrameLoaderClientEfl::dispatchShow()
{
- notImplemented();
+ ewk_view_load_show(m_view);
}
void FrameLoaderClientEfl::cancelPolicyCheck()
@@ -883,7 +925,11 @@ void FrameLoaderClientEfl::transitionToCommittedForNewPage()
{
ASSERT(m_frame);
ASSERT(m_view);
+
ewk_frame_view_create_for_view(m_frame, m_view);
+
+ if (m_frame == ewk_view_frame_main_get(m_view))
+ ewk_view_frame_main_cleared(m_view);
}
}
diff --git a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
index 581ec85..561760c 100644
--- a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
+++ b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
@@ -55,6 +55,9 @@ class FrameLoaderClientEfl : public FrameLoaderClient {
void setCustomUserAgent(const String &agent);
const String& customUserAgent() const;
+ void setInitLayoutCompleted(bool completed) { m_initLayoutCompleted = completed; }
+ bool getInitLayoutCompleted() { return m_initLayoutCompleted; }
+
virtual bool hasWebView() const;
virtual bool hasFrameView() const;
@@ -213,6 +216,8 @@ class FrameLoaderClientEfl : public FrameLoaderClient {
// Plugin view to redirect data to
PluginView* m_pluginView;
bool m_hasSentResponseToPlugin;
+
+ bool m_initLayoutCompleted;
};
}
diff --git a/WebKit/efl/ewk/ewk_frame.cpp b/WebKit/efl/ewk/ewk_frame.cpp
index ec56221..ca76f02 100644
--- a/WebKit/efl/ewk/ewk_frame.cpp
+++ b/WebKit/efl/ewk/ewk_frame.cpp
@@ -31,6 +31,7 @@
#include "FrameTree.h"
#include "FrameView.h"
#include "HTMLPlugInElement.h"
+#include "HistoryItem.h"
#include "HitTestResult.h"
#include "KURL.h"
#include "PlatformKeyboardEvent.h"
@@ -1633,6 +1634,70 @@ WebCore::Frame* ewk_frame_core_get(const Evas_Object* o)
/**
* @internal
+ * Reports a resource will be requested. User may override behavior of webkit by
+ * changing values in @param request.
+ *
+ * @param o Frame.
+ * @param request Request details that user may override. Whenever values on
+ * this struct changes, it must be properly malloc'd as it will be freed
+ * afterwards.
+ *
+ * Emits signal: "resource,request,willsend"
+ */
+void ewk_frame_request_will_send(Evas_Object *o, Ewk_Frame_Resource_Request *request)
+{
+ evas_object_smart_callback_call(o, "resource,request,willsend", request);
+}
+
+/**
+ * @internal
+ * Reports that there's a new resource.
+ *
+ * @param o Frame.
+ * @param request New request details. No changes are allowed to fields.
+ *
+ * Emits signal: "resource,request,new"
+ */
+void ewk_frame_request_assign_identifier(Evas_Object *o, const Ewk_Frame_Resource_Request *request)
+{
+ evas_object_smart_callback_call(o, "resource,request,new", (void *)request);
+}
+
+/**
+ * @internal
+ * Reports that first navigation occurred
+ *
+ * @param o Frame.
+ *
+ * Emits signal: "navigation,first"
+ */
+void ewk_frame_did_perform_first_navigation(Evas_Object *o)
+{
+ evas_object_smart_callback_call(o, "navigation,first", 0);
+}
+
+/**
+ * @internal
+ * Reports frame will be saved to current state
+ *
+ * @param o Frame.
+ * @param item History item to save details to.
+ *
+ * Emits signal: "state,save"
+ */
+void ewk_frame_view_state_save(Evas_Object *o, WebCore::HistoryItem* item)
+{
+ const char *title = ewk_frame_title_get(o);
+ const char *uri = ewk_frame_uri_get(o);
+
+ item->setTitle(WebCore::String::fromUTF8(title));
+ item->setURLString(WebCore::String::fromUTF8(uri));
+
+ evas_object_smart_callback_call(o, "state,save", 0);
+}
+
+/**
+ * @internal
* Reports the frame started loading something.
*
* Emits signal: "load,started" with no parameters.
@@ -1652,6 +1717,58 @@ void ewk_frame_load_started(Evas_Object* o)
/**
* @internal
+ * Reports the frame started provisional load.
+ *
+ * @param o Frame.
+ *
+ * Emits signal: "load,provisional" with no parameters.
+ */
+void ewk_frame_load_provisional(Evas_Object* o)
+{
+ evas_object_smart_callback_call(o, "load,provisional", 0);
+}
+
+/**
+ * @internal
+ * Reports the frame finished first layout.
+ *
+ * @param o Frame.
+ *
+ * Emits signal: "load,firstlayout,finished" with no parameters.
+ */
+void ewk_frame_load_firstlayout_finished(Evas_Object *o)
+{
+ evas_object_smart_callback_call(o, "load,firstlayout,finished", 0);
+}
+
+/**
+ * @internal
+ * Reports the frame finished first non empty layout.
+ *
+ * @param o Frame.
+ *
+ * Emits signal: "load,nonemptylayout,finished" with no parameters.
+ */
+void ewk_frame_load_firstlayout_nonempty_finished(Evas_Object *o)
+{
+ evas_object_smart_callback_call(o, "load,nonemptylayout,finished", 0);
+}
+
+/**
+ * @internal
+ * Reports the loading of a document has finished on frame.
+ *
+ * @param o Frame.
+ *
+ * Emits signal: "load,document,finished" with no parameters.
+ */
+void ewk_frame_load_document_finished(Evas_Object *o)
+{
+ evas_object_smart_callback_call(o, "load,document,finished", 0);
+}
+
+/**
+ * @internal
* Reports load finished, optionally with error information.
*
* Emits signal: "load,finished" with pointer to Ewk_Frame_Load_Error
diff --git a/WebKit/efl/ewk/ewk_frame.h b/WebKit/efl/ewk/ewk_frame.h
index c71269b..1a9fe81 100644
--- a/WebKit/efl/ewk/ewk_frame.h
+++ b/WebKit/efl/ewk/ewk_frame.h
@@ -48,16 +48,28 @@ extern "C" {
*
* - "title,changed", const char*: title of the main frame changed.
* - "uri,changed", const char*: uri of the main frame changed.
+ * - "load,document,finished", void: loading of a document has
+ * finished on this frame.
+ * - "load,nonemptylayout,finished", void: frame finished first
+ * non-empty layout.
* - "load,started", void: frame started loading.
* - "load,progress", double*: load progress changed (overall value
* from 0.0 to 1.0, connect to individual frames for fine grained).
* - "load,finished", const Ewk_Frame_Load_Error*: reports load
* finished and as argument @c NULL if successfully or pointer to
* structure defining the error.
+ * - "load,provisional", void: frame started provisional load.
+ * - "load,firstlayout,finished", void: frame finished first layout.
* - "load,error", const Ewk_Frame_Load_Error*: reports load failed
* and as argument a pointer to structure defining the error.
* - "contents,size,changed", Evas_Coord[2]: reports contents size
* changed due new layout, script actions or any other events.
+ * - "navigation,first", void: first navigation occurred.
+ * - "resource,request,new", Ewk_Frame_Resource_Request*: reports that
+ * there's a new resource request.
+ * - "resource,request,willsend", Ewk_Frame_Resource_Request*: a resource will
+ * be requested.
+ * - "state,save", void: frame's state will be saved as a history item.
*/
@@ -82,6 +94,19 @@ struct _Ewk_Frame_Load_Error {
};
/**
+ * Structure used to report resource requests
+ *
+ * Details given before a resource is loaded on a given frame. It's used by
+ * ewk_frame_request_will_send() to inform the details of a to-be-loaded
+ * resource, allowing them to be overridden.
+ */
+typedef struct _Ewk_Frame_Resource_Request Ewk_Frame_Resource_Request;
+struct _Ewk_Frame_Resource_Request {
+ const char *url; /**< url of this resource */
+ const unsigned long identifier; /**< resource's identifier. Can not be changed */
+};
+
+/**
* Structure used to report hit test results.
*/
typedef struct _Ewk_Hit_Test Ewk_Hit_Test;
diff --git a/WebKit/efl/ewk/ewk_private.h b/WebKit/efl/ewk/ewk_private.h
index 83eef91..c549ad7 100644
--- a/WebKit/efl/ewk/ewk_private.h
+++ b/WebKit/efl/ewk/ewk_private.h
@@ -48,85 +48,101 @@ struct ContextMenu;
struct ContextMenuItem;
}
-void ewk_view_ready(Evas_Object *o);
-void ewk_view_title_set(Evas_Object *o, const char *title);
-void ewk_view_uri_changed(Evas_Object *o);
-void ewk_view_load_started(Evas_Object *o);
-void ewk_view_frame_main_load_started(Evas_Object *o);
-void ewk_view_load_finished(Evas_Object *o, const Ewk_Frame_Load_Error *error);
-void ewk_view_load_error(Evas_Object *o, const Ewk_Frame_Load_Error *error);
-void ewk_view_load_progress_changed(Evas_Object *o);
-Evas_Object *ewk_view_window_create(Evas_Object *o, Eina_Bool javascript, const WebCore::WindowFeatures* coreFeatures);
+void ewk_view_ready(Evas_Object *o);
+void ewk_view_title_set(Evas_Object *o, const char *title);
+void ewk_view_uri_changed(Evas_Object *o);
+void ewk_view_load_started(Evas_Object *o);
+void ewk_view_load_provisional(Evas_Object *o);
+void ewk_view_frame_main_load_started(Evas_Object *o);
+void ewk_view_frame_main_cleared(Evas_Object *o);
+void ewk_view_frame_main_icon_received(Evas_Object *o);
+void ewk_view_load_finished(Evas_Object *o, const Ewk_Frame_Load_Error *error);
+void ewk_view_load_error(Evas_Object *o, const Ewk_Frame_Load_Error *error);
+void ewk_view_load_progress_changed(Evas_Object *o);
+void ewk_view_load_show(Evas_Object* o);
+void ewk_view_restore_state(Evas_Object *o, Evas_Object *frame);
+Evas_Object *ewk_view_window_create(Evas_Object *o, Eina_Bool javascript, const WebCore::WindowFeatures* coreFeatures);
-void ewk_view_mouse_link_hover_in(Evas_Object *o, void *data);
-void ewk_view_mouse_link_hover_out(Evas_Object *o);
+void ewk_view_mouse_link_hover_in(Evas_Object *o, void *data);
+void ewk_view_mouse_link_hover_out(Evas_Object *o);
-void ewk_view_toolbars_visible_set(Evas_Object *o, Eina_Bool visible);
-void ewk_view_toolbars_visible_get(Evas_Object *o, Eina_Bool *visible);
+void ewk_view_toolbars_visible_set(Evas_Object *o, Eina_Bool visible);
+void ewk_view_toolbars_visible_get(Evas_Object *o, Eina_Bool *visible);
-void ewk_view_statusbar_visible_set(Evas_Object *o, Eina_Bool visible);
-void ewk_view_statusbar_visible_get(Evas_Object *o, Eina_Bool *visible);
-void ewk_view_statusbar_text_set(Evas_Object *o, const char *text);
+void ewk_view_statusbar_visible_set(Evas_Object *o, Eina_Bool visible);
+void ewk_view_statusbar_visible_get(Evas_Object *o, Eina_Bool *visible);
+void ewk_view_statusbar_text_set(Evas_Object *o, const char *text);
-void ewk_view_scrollbars_visible_set(Evas_Object *o, Eina_Bool visible);
-void ewk_view_scrollbars_visible_get(Evas_Object *o, Eina_Bool *visible);
+void ewk_view_scrollbars_visible_set(Evas_Object *o, Eina_Bool visible);
+void ewk_view_scrollbars_visible_get(Evas_Object *o, Eina_Bool *visible);
-void ewk_view_menubar_visible_set(Evas_Object *o, Eina_Bool visible);
-void ewk_view_menubar_visible_get(Evas_Object *o, Eina_Bool *visible);
+void ewk_view_menubar_visible_set(Evas_Object *o, Eina_Bool visible);
+void ewk_view_menubar_visible_get(Evas_Object *o, Eina_Bool *visible);
-void ewk_view_tooltip_text_set(Evas_Object *o, const char *text);
+void ewk_view_tooltip_text_set(Evas_Object *o, const char *text);
-void ewk_view_add_console_message(Evas_Object *o, const char *message, unsigned int lineNumber, const char *sourceID);
+void ewk_view_add_console_message(Evas_Object *o, const char *message, unsigned int lineNumber, const char *sourceID);
-void ewk_view_run_javascript_alert(Evas_Object *o, Evas_Object *frame, const char *message);
-Eina_Bool ewk_view_run_javascript_confirm(Evas_Object *o, Evas_Object *frame, const char *message);
-Eina_Bool ewk_view_run_javascript_prompt(Evas_Object *o, Evas_Object *frame, const char *message, const char *defaultValue, char **value);
-Eina_Bool ewk_view_should_interrupt_javascript(Evas_Object *o);
-uint64_t ewk_view_exceeded_database_quota(Evas_Object *o, Evas_Object *frame, const char *databaseName, uint64_t current_size, uint64_t expected_size);
+void ewk_view_run_javascript_alert(Evas_Object *o, Evas_Object *frame, const char *message);
+Eina_Bool ewk_view_run_javascript_confirm(Evas_Object *o, Evas_Object *frame, const char *message);
+Eina_Bool ewk_view_run_javascript_prompt(Evas_Object *o, Evas_Object *frame, const char *message, const char *defaultValue, char **value);
+Eina_Bool ewk_view_should_interrupt_javascript(Evas_Object *o);
+uint64_t ewk_view_exceeded_database_quota(Evas_Object *o, Evas_Object *frame, const char *databaseName, uint64_t current_size, uint64_t expected_size);
-Eina_Bool ewk_view_run_open_panel(Evas_Object *o, Evas_Object *frame, Eina_Bool allows_multiple_files, const Eina_List *suggested_filenames, Eina_List **selected_filenames);
+Eina_Bool ewk_view_run_open_panel(Evas_Object *o, Evas_Object *frame, Eina_Bool allows_multiple_files, const Eina_List *suggested_filenames, Eina_List **selected_filenames);
-void ewk_view_repaint(Evas_Object *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
-void ewk_view_scroll(Evas_Object *o, Evas_Coord dx, Evas_Coord dy, Evas_Coord sx, Evas_Coord sy, Evas_Coord sw, Evas_Coord sh, Evas_Coord cx, Evas_Coord cy, Evas_Coord cw, Evas_Coord ch, Eina_Bool main_frame);
-WebCore::Page *ewk_view_core_page_get(const Evas_Object *o);
+void ewk_view_repaint(Evas_Object *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
+void ewk_view_scroll(Evas_Object *o, Evas_Coord dx, Evas_Coord dy, Evas_Coord sx, Evas_Coord sy, Evas_Coord sw, Evas_Coord sh, Evas_Coord cx, Evas_Coord cy, Evas_Coord cw, Evas_Coord ch, Eina_Bool main_frame);
+WebCore::Page *ewk_view_core_page_get(const Evas_Object *o);
WTF::PassRefPtr<WebCore::Frame> ewk_view_frame_create(Evas_Object *o, Evas_Object *frame, const WebCore::String& name, WebCore::HTMLFrameOwnerElement* ownerElement, const WebCore::KURL& url, const WebCore::String& referrer);
WTF::PassRefPtr<WebCore::Widget> ewk_view_plugin_create(Evas_Object* o, Evas_Object* frame, const WebCore::IntSize& pluginSize, WebCore::HTMLPlugInElement* element, const WebCore::KURL& url, const WTF::Vector<WebCore::String>& paramNames, const WTF::Vector<WebCore::String>& paramValues, const WebCore::String& mimeType, bool loadManually);
-void ewk_view_popup_new(Evas_Object *o, WebCore::PopupMenuClient* client, int selected, const WebCore::IntRect& rect);
+void ewk_view_popup_new(Evas_Object *o, WebCore::PopupMenuClient* client, int selected, const WebCore::IntRect& rect);
+void ewk_view_viewport_set(Evas_Object *o, float w, float h, float init_scale, float max_scale, float min_scale, float user_scalable);
-void ewk_view_download_request(Evas_Object *o, Ewk_Download *download);
+void ewk_view_download_request(Evas_Object *o, Ewk_Download *download);
-Ewk_History *ewk_history_new(WebCore::BackForwardList *history);
-void ewk_history_free(Ewk_History *history);
+Ewk_History *ewk_history_new(WebCore::BackForwardList *history);
+void ewk_history_free(Ewk_History *history);
Ewk_Context_Menu *ewk_context_menu_new(Evas_Object *view, WebCore::ContextMenuController *controller);
-Eina_Bool ewk_context_menu_free(Ewk_Context_Menu *o);
-void ewk_context_menu_item_append(Ewk_Context_Menu *o, WebCore::ContextMenuItem& core);
+Eina_Bool ewk_context_menu_free(Ewk_Context_Menu *o);
+void ewk_context_menu_item_append(Ewk_Context_Menu *o, WebCore::ContextMenuItem& core);
Ewk_Context_Menu *ewk_context_menu_custom_get(Ewk_Context_Menu *o);
-void ewk_context_menu_show(Ewk_Context_Menu *o);
+void ewk_context_menu_show(Ewk_Context_Menu *o);
Ewk_Window_Features *ewk_window_features_new_from_core(const WebCore::WindowFeatures* core);
-Evas_Object *ewk_frame_add(Evas *e);
-Eina_Bool ewk_frame_init(Evas_Object *o, Evas_Object *view, WebCore::Frame *frame);
-Evas_Object *ewk_frame_child_add(Evas_Object *o, WTF::PassRefPtr<WebCore::Frame> child, const WebCore::String& name, const WebCore::KURL& url, const WebCore::String& referrer);
+Evas_Object *ewk_frame_add(Evas *e);
+Eina_Bool ewk_frame_init(Evas_Object *o, Evas_Object *view, WebCore::Frame *frame);
+Evas_Object *ewk_frame_child_add(Evas_Object *o, WTF::PassRefPtr<WebCore::Frame> child, const WebCore::String& name, const WebCore::KURL& url, const WebCore::String& referrer);
-WebCore::Frame *ewk_frame_core_get(const Evas_Object *o);
-void ewk_frame_core_gone(Evas_Object *o);
+WebCore::Frame *ewk_frame_core_get(const Evas_Object *o);
+void ewk_frame_core_gone(Evas_Object *o);
-void ewk_frame_load_started(Evas_Object *o);
-void ewk_frame_load_finished(Evas_Object *o, const char *error_domain, int error_code, Eina_Bool is_cancellation, const char *error_description, const char *failing_url);
-void ewk_frame_load_error(Evas_Object *o, const char *error_domain, int error_code, Eina_Bool is_cancellation, const char *error_description, const char *failing_url);
-void ewk_frame_load_progress_changed(Evas_Object *o);
+void ewk_frame_load_started(Evas_Object *o);
+void ewk_frame_load_provisional(Evas_Object *o);
+void ewk_frame_load_firstlayout_finished(Evas_Object *o);
+void ewk_frame_load_firstlayout_nonempty_finished(Evas_Object *o);
+void ewk_frame_load_document_finished(Evas_Object *o);
+void ewk_frame_load_finished(Evas_Object *o, const char *error_domain, int error_code, Eina_Bool is_cancellation, const char *error_description, const char *failing_url);
+void ewk_frame_load_error(Evas_Object *o, const char *error_domain, int error_code, Eina_Bool is_cancellation, const char *error_description, const char *failing_url);
+void ewk_frame_load_progress_changed(Evas_Object *o);
-void ewk_frame_contents_size_changed(Evas_Object *o, Evas_Coord w, Evas_Coord h);
-void ewk_frame_title_set(Evas_Object *o, const char *title);
+void ewk_frame_request_will_send(Evas_Object *o, Ewk_Frame_Resource_Request *request);
+void ewk_frame_request_assign_identifier(Evas_Object *o, const Ewk_Frame_Resource_Request *request);
+void ewk_frame_view_state_save(Evas_Object *o, WebCore::HistoryItem* item);
-void ewk_frame_view_create_for_view(Evas_Object *o, Evas_Object *view);
-Eina_Bool ewk_frame_uri_changed(Evas_Object *o);
-void ewk_frame_force_layout(Evas_Object *o);
+void ewk_frame_did_perform_first_navigation(Evas_Object *o);
+
+void ewk_frame_contents_size_changed(Evas_Object *o, Evas_Coord w, Evas_Coord h);
+void ewk_frame_title_set(Evas_Object *o, const char *title);
+
+void ewk_frame_view_create_for_view(Evas_Object *o, Evas_Object *view);
+Eina_Bool ewk_frame_uri_changed(Evas_Object *o);
+void ewk_frame_force_layout(Evas_Object *o);
WTF::PassRefPtr<WebCore::Widget> ewk_frame_plugin_create(Evas_Object* o, const WebCore::IntSize& pluginSize, WebCore::HTMLPlugInElement* element, const WebCore::KURL& url, const WTF::Vector<WebCore::String>& paramNames, const WTF::Vector<WebCore::String>& paramValues, const WebCore::String& mimeType, bool loadManually);
diff --git a/WebKit/efl/ewk/ewk_view.cpp b/WebKit/efl/ewk/ewk_view.cpp
index ca26f64..39dc0a7 100644
--- a/WebKit/efl/ewk/ewk_view.cpp
+++ b/WebKit/efl/ewk/ewk_view.cpp
@@ -102,6 +102,19 @@ struct _Ewk_View_Private_Data {
Eina_Bool resizable_textareas:1;
Eina_Bool private_browsing:1;
Eina_Bool caret_browsing:1;
+ struct {
+ float w;
+ float h;
+ float init_scale;
+ float min_scale;
+ float max_scale;
+ float user_scalable;
+ } viewport;
+ struct {
+ float min_scale;
+ float max_scale;
+ Eina_Bool user_scalable:1;
+ } zoom_range;
} settings;
struct {
struct {
@@ -520,6 +533,7 @@ static Ewk_View_Private_Data* _ewk_view_priv_new(Ewk_View_Smart_Data* sd)
static_cast<WebCore::InspectorClient*>(new WebCore::InspectorClientEfl),
0,
0,
+ 0,
0);
if (!priv->page) {
CRITICAL("Could not create WebKit Page");
@@ -576,6 +590,12 @@ static Ewk_View_Private_Data* _ewk_view_priv_new(Ewk_View_Smart_Data* sd)
priv->settings.private_browsing = priv->page_settings->privateBrowsingEnabled();
priv->settings.caret_browsing = priv->page_settings->caretBrowsingEnabled();
+ // Since there's no scale separated from zooming in webkit-efl, this functionality of
+ // viewport meta tag is implemented using zoom. When scale zoom is supported by webkit-efl,
+ // this functionality will be modified by the scale zoom patch.
+ priv->settings.zoom_range.min_scale = ZOOM_MIN;
+ priv->settings.zoom_range.max_scale = ZOOM_MAX;
+
priv->main_frame = _ewk_view_core_frame_new(sd, priv, 0).get();
if (!priv->main_frame) {
CRITICAL("Could not create main frame.");
@@ -1001,6 +1021,11 @@ void ewk_view_fixed_layout_size_set(Evas_Object* o, Evas_Coord w, Evas_Coord h)
{
EWK_VIEW_SD_GET_OR_RETURN(o, sd);
EWK_VIEW_PRIV_GET_OR_RETURN(sd, priv);
+
+ WebCore::FrameLoaderClientEfl* client = static_cast<WebCore::FrameLoaderClientEfl*>(priv->main_frame->loader()->client());
+ if (!client->getInitLayoutCompleted())
+ return;
+
WebCore::FrameView* view = sd->_priv->main_frame->view();
if (w <= 0 && h <= 0) {
if (!priv->fixed_layout.use)
@@ -1757,14 +1782,22 @@ float ewk_view_zoom_get(const Evas_Object* o)
Eina_Bool ewk_view_zoom_set(Evas_Object* o, float zoom, Evas_Coord cx, Evas_Coord cy)
{
EWK_VIEW_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->zoom_set, EINA_FALSE);
- if (zoom < ZOOM_MIN) {
- WRN("zoom level is < %f : %f", (double)ZOOM_MIN, (double)zoom);
+
+ if (!priv->settings.zoom_range.user_scalable) {
+ WRN("userScalable is false");
+ return EINA_FALSE;
+ }
+
+ if (zoom < priv->settings.zoom_range.min_scale) {
+ WRN("zoom level is < %f : %f", (double)priv->settings.zoom_range.min_scale, (double)zoom);
return EINA_FALSE;
}
- if (zoom > ZOOM_MAX) {
- WRN("zoom level is > %f : %f", (double)ZOOM_MAX, (double)zoom);
+ if (zoom > priv->settings.zoom_range.max_scale) {
+ WRN("zoom level is > %f : %f", (double)priv->settings.zoom_range.max_scale, (double)zoom);
return EINA_FALSE;
}
@@ -1827,14 +1860,22 @@ void ewk_view_zoom_weak_smooth_scale_set(Evas_Object* o, Eina_Bool smooth_scale)
Eina_Bool ewk_view_zoom_weak_set(Evas_Object* o, float zoom, Evas_Coord cx, Evas_Coord cy)
{
EWK_VIEW_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->zoom_weak_set, EINA_FALSE);
- if (zoom < ZOOM_MIN) {
- WRN("zoom level is < %f : %f", (double)ZOOM_MIN, (double)zoom);
+
+ if (!priv->settings.zoom_range.user_scalable) {
+ WRN("userScalable is false");
+ return EINA_FALSE;
+ }
+
+ if (zoom < priv->settings.zoom_range.min_scale) {
+ WRN("zoom level is < %f : %f", (double)priv->settings.zoom_range.min_scale, (double)zoom);
return EINA_FALSE;
}
- if (zoom > ZOOM_MAX) {
- WRN("zoom level is > %f : %f", (double)ZOOM_MAX, (double)zoom);
+ if (zoom > priv->settings.zoom_range.max_scale) {
+ WRN("zoom level is > %f : %f", (double)priv->settings.zoom_range.max_scale, (double)zoom);
return EINA_FALSE;
}
@@ -1977,12 +2018,17 @@ Eina_Bool ewk_view_zoom_animated_set(Evas_Object* o, float zoom, float duration,
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->zoom_weak_set, EINA_FALSE);
- if (zoom < ZOOM_MIN) {
- WRN("zoom level is < %f : %f", (double)ZOOM_MIN, (double)zoom);
+ if (!priv->settings.zoom_range.user_scalable) {
+ WRN("userScalable is false");
return EINA_FALSE;
}
- if (zoom > ZOOM_MAX) {
- WRN("zoom level is > %f : %f", (double)ZOOM_MAX, (double)zoom);
+
+ if (zoom < priv->settings.zoom_range.min_scale) {
+ WRN("zoom level is < %f : %f", (double)priv->settings.zoom_range.min_scale, (double)zoom);
+ return EINA_FALSE;
+ }
+ if (zoom > priv->settings.zoom_range.max_scale) {
+ WRN("zoom level is > %f : %f", (double)priv->settings.zoom_range.max_scale, (double)zoom);
return EINA_FALSE;
}
@@ -3710,3 +3756,148 @@ void ewk_view_download_request(Evas_Object* o, Ewk_Download* download)
DBG("view=%p", o);
evas_object_smart_callback_call(o, "download,request", download);
}
+
+/**
+ * @internal
+ * Reports the viewport has changed.
+ *
+ * @param o view.
+ * @param w width.
+ * @param h height.
+ * @param init_scale initialScale value.
+ * @param max_scale maximumScale value.
+ * @param min_scale minimumScale value.
+ * @param user_scalable userscalable flag.
+ *
+ * Emits signal: "viewport,changed" with no parameters.
+ */
+void ewk_view_viewport_set(Evas_Object *o, float w, float h, float init_scale, float max_scale, float min_scale, float user_scalable)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ priv->settings.viewport.w = w;
+ priv->settings.viewport.h = h;
+ priv->settings.viewport.init_scale = init_scale;
+ priv->settings.viewport.min_scale = min_scale;
+ priv->settings.viewport.max_scale = max_scale;
+ priv->settings.viewport.user_scalable = user_scalable;
+
+ evas_object_smart_callback_call(o, "viewport,changed", 0);
+}
+
+/**
+ * Gets data of viewport meta tag.
+ *
+ * @param o view.
+ * @param w width.
+ * @param h height.
+ * @param init_scale initial Scale value.
+ * @param max_scale maximum Scale value.
+ * @param min_scale minimum Scale value.
+ * @param user_scalable user Scalable value.
+ */
+void ewk_view_viewport_get(Evas_Object *o, float* w, float* h, float* init_scale, float* max_scale, float* min_scale, float* user_scalable)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ if (w)
+ *w = priv->settings.viewport.w;
+ if (h)
+ *h = priv->settings.viewport.h;
+ if (init_scale)
+ *init_scale = priv->settings.viewport.init_scale;
+ if (max_scale)
+ *max_scale = priv->settings.viewport.max_scale;
+ if (min_scale)
+ *min_scale = priv->settings.viewport.min_scale;
+ if (user_scalable)
+ *user_scalable = priv->settings.viewport.user_scalable;
+}
+
+/**
+ * Sets the zoom range.
+ *
+ * @param o view.
+ * @param min_scale minimum value of zoom range.
+ * @param max_scale maximum value of zoom range.
+ *
+ * @return @c EINA_TRUE if zoom range is changed, @c EINA_FALSE if not or failure.
+ */
+Eina_Bool ewk_view_zoom_range_set(Evas_Object* o, float min_scale, float max_scale)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ if (max_scale < min_scale) {
+ WRN("min_scale is larger than max_scale");
+ return EINA_FALSE;
+ }
+
+ priv->settings.zoom_range.min_scale = min_scale;
+ priv->settings.zoom_range.max_scale = max_scale;
+
+ return EINA_TRUE;
+}
+
+/**
+ * Gets the minimum value of zoom range.
+ *
+ * @param o view.
+ *
+ * @return minimum value of zoom range.
+ */
+float ewk_view_zoom_range_min_get(Evas_Object* o)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ return priv->settings.zoom_range.min_scale;
+}
+
+/**
+ * Gets the maximum value of zoom range.
+ *
+ * @param o view.
+ *
+ * @return maximum value of zoom range.
+ */
+float ewk_view_zoom_range_max_get(Evas_Object* o)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ return priv->settings.zoom_range.max_scale;
+}
+
+/**
+ * Sets if zoom is enabled.
+ *
+ * @param o view.
+ * @param user_scalable boolean pointer in which to enable zoom. It defaults
+ * to @c EINA_TRUE.
+ */
+void ewk_view_user_scalable_set(Evas_Object* o, Eina_Bool user_scalable)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ priv->settings.zoom_range.user_scalable = user_scalable;
+}
+
+/**
+ * Gets if zoom is enabled.
+ *
+ * @param o view.
+ * @param user_scalable where to return the current user scalable value.
+ *
+ * @return @c EINA_TRUE if zoom is enabled, @c EINA_FALSE if not.
+ */
+Eina_Bool ewk_view_user_scalable_get(Evas_Object* o)
+{
+ EWK_VIEW_SD_GET(o, sd);
+ EWK_VIEW_PRIV_GET(sd, priv);
+
+ return priv->settings.zoom_range.user_scalable;
+}
diff --git a/WebKit/efl/ewk/ewk_view.h b/WebKit/efl/ewk/ewk_view.h
index a8fe3b8..209beff 100644
--- a/WebKit/efl/ewk/ewk_view.h
+++ b/WebKit/efl/ewk/ewk_view.h
@@ -85,6 +85,7 @@ extern "C" {
* - "download,request", Ewk_Download: reports a download is being requested
* and as arguments gives its details.
* - "icon,received", void: main frame received an icon.
+ * - "viewport,changed", void: Report that viewport has changed.
*/
typedef struct _Ewk_View_Smart_Data Ewk_View_Smart_Data;
@@ -453,6 +454,13 @@ EAPI void ewk_view_paint_context_translate(Ewk_View_Paint_Context *ctxt, float x
EAPI Eina_Bool ewk_view_paint(Ewk_View_Private_Data *priv, cairo_t *cr, const Eina_Rectangle *area);
EAPI Eina_Bool ewk_view_paint_contents(Ewk_View_Private_Data *priv, cairo_t *cr, const Eina_Rectangle *area);
+EAPI void ewk_view_viewport_get(Evas_Object *o, float* w, float* h, float* init_scale, float* max_scale, float* min_scale, float* user_scalable);
+EAPI Eina_Bool ewk_view_zoom_range_set(Evas_Object* o, float min_scale, float max_scale);
+EAPI float ewk_view_zoom_range_min_get(Evas_Object* o);
+EAPI float ewk_view_zoom_range_max_get(Evas_Object* o);
+EAPI void ewk_view_user_scalable_set(Evas_Object* o, Eina_Bool user_scalable);
+EAPI Eina_Bool ewk_view_user_scalable_get(Evas_Object* o);
+
#ifdef __cplusplus
}
#endif
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index a33506c..cddfac8 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,78 @@
+2010-07-12 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] r63100 broke the testwebview test
+ https://bugs.webkit.org/show_bug.cgi?id=42114
+
+ * tests/testwebview.c: Disable a failing assertion in test_webkit_web_view_adjustments
+ until we can get to the bottom of the failure.
+
+2010-07-12 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ Update for 1.3.3
+
+ * NEWS:
+
+2010-07-12 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ Fix compilation with sealed GTK+.
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_drag_motion):
+ (webkit_web_view_drag_data_received):
+ (webkit_web_view_drag_drop):
+
+2010-07-11 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] WebKitWebView should support drops
+ https://bugs.webkit.org/show_bug.cgi?id=39843
+
+ Add support for dropping content onto GTK+ WebViews.
+
+ * webkit/webkitprivate.h:
+ Add a DroppingContext struct to keep track of drop data while the drop is
+ in progress. Have WebKitWebView keep a map of GdkDragContexts to DroppingContexts.
+ * webkit/webkitwebview.cpp: Add necessary includes and globalPointForClientPoint helper.
+ (webkit_web_view_popup_menu_handler): Use globalPointForClientPoint helper.
+ (webkit_web_view_dispose): Properly clean up droppingContexts member.
+ (webkit_web_view_finalize): Delete droppingContext member.
+ (globalPointForClientPoint): Added.
+ (doDragLeaveLater): Added.
+ (webkit_web_view_drag_leave): Added.
+ (webkit_web_view_drag_motion): Added.
+ (webkit_web_view_drag_data_received): Added.
+ (webkit_web_view_drag_drop): Added.
+ (webkit_web_view_class_init): Connect new drop signal handlers to the widget definition.
+ (webkit_web_view_init): Set up the widget as a drop destination and initialize droppingContexts.
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
+ Add basic piping for BackForwardControllerClient.
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_init):
+
+2010-06-19 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ WebInspector: js function name was fixed.
+ dispatchMessageToFrontend -> dispatchMessageFromBackend.
+ https://bugs.webkit.org/show_bug.cgi?id=40675
+
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ (WebKit::InspectorClient::sendMessageToFrontend):
+
2010-06-23 Martin Robinson <mrobinson@igalia.com>
Reviewed by Gustavo Noronha Silva.
diff --git a/WebKit/gtk/NEWS b/WebKit/gtk/NEWS
index eb6d8cc..b99e2a1 100644
--- a/WebKit/gtk/NEWS
+++ b/WebKit/gtk/NEWS
@@ -1,4 +1,14 @@
================
+WebKitGTK+ 1.3.3
+================
+
+What's new in WebKitGTK+ 1.3.3?
+
+ - Fixes to compile with latest GTK+ 2.90.x.
+ - Add support for dropping content in WebKitWebViews.
+ - Many other bugfixes.
+
+================
WebKitGTK+ 1.3.2
================
diff --git a/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
index 4bc3c32..616834b 100644
--- a/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
@@ -134,7 +134,7 @@ bool InspectorClient::sendMessageToFrontend(const String& message)
if (!scriptController)
return false;
- String dispatchToFrontend("WebInspector.dispatchMessageToFrontend(");
+ String dispatchToFrontend("WebInspector.dispatchMessageFromBackend(");
dispatchToFrontend += message;
dispatchToFrontend += ");";
scriptController->executeScript(dispatchToFrontend);
diff --git a/WebKit/gtk/tests/testwebview.c b/WebKit/gtk/tests/testwebview.c
index 36511d7..0bea643 100644
--- a/WebKit/gtk/tests/testwebview.c
+++ b/WebKit/gtk/tests/testwebview.c
@@ -266,7 +266,10 @@ static void do_test_webkit_web_view_adjustments(gboolean with_page_cache)
g_assert_cmpfloat(lower, ==, gtk_adjustment_get_lower(adjustment));
g_assert_cmpfloat(upper, ==, gtk_adjustment_get_upper(adjustment));
- g_assert_cmpfloat(gtk_adjustment_get_value(adjustment), ==, 100.0);
+ // This assert is temporarily disabled until we fix the following bug:
+ // https://bugs.webkit.org/show_bug.cgi?id=42114
+ // It should be re-enabled ASAP.
+ // g_assert_cmpfloat(gtk_adjustment_get_value(adjustment), ==, 100.0);
g_free(effective_uri);
g_free(second_uri);
diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
index fa74abc..73f9fcc 100644
--- a/WebKit/gtk/webkit/webkitprivate.h
+++ b/WebKit/gtk/webkit/webkitprivate.h
@@ -48,21 +48,23 @@
#include "ArchiveResource.h"
#include "BackForwardList.h"
#include "DataObjectGtk.h"
-#include <enchant.h>
+#include "DragActions.h"
+#include "Frame.h"
#include "GOwnPtr.h"
#include "Geolocation.h"
#include "HistoryItem.h"
-#include "Settings.h"
-#include "Page.h"
-#include "Frame.h"
#include "InspectorClientGtk.h"
#include "IntPoint.h"
#include "FrameLoaderClient.h"
+#include "Page.h"
#include "ResourceHandle.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include "WindowFeatures.h"
#include "SecurityOrigin.h"
+#include "Settings.h"
+#include <enchant.h>
+#include <wtf/OwnPtr.h>
#include <wtf/text/CString.h>
#include <atk/atk.h>
@@ -103,7 +105,16 @@ namespace WebKit {
WebKitHitTestResult* kit(const WebCore::HitTestResult&);
- WebKit::PasteboardHelperGtk* pasteboardHelperInstance();
+ PasteboardHelperGtk* pasteboardHelperInstance();
+
+ typedef struct DroppingContext_ {
+ WebKitWebView* webView;
+ GdkDragContext* gdkContext;
+ RefPtr<WebCore::DataObjectGtk> dataObject;
+ WebCore::IntPoint lastMotionPosition;
+ int pendingDataRequests;
+ bool dropHappened;
+ } DroppingContext;
}
extern "C" {
@@ -159,6 +170,7 @@ extern "C" {
guint32 previousClickTime;
HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk> >* draggingDataObjects;
+ HashMap<GdkDragContext*, WebKit::DroppingContext*>* droppingContexts;
};
#define WEBKIT_WEB_FRAME_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_FRAME, WebKitWebFramePrivate))
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 62997c5..0010a77 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -7,7 +7,7 @@
* Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
* Copyright (C) 2008 Nuanti Ltd.
* Copyright (C) 2008, 2009, 2010 Collabora Ltd.
- * Copyright (C) 2009 Igalia S.L.
+ * Copyright (C) 2009, 2010 Igalia S.L.
* Copyright (C) 2009 Movial Creative Technologies Inc.
* Copyright (C) 2009 Bobby Powers
*
@@ -52,7 +52,10 @@
#include "Cursor.h"
#include "Document.h"
#include "DocumentLoader.h"
+#include "DragActions.h"
#include "DragClientGtk.h"
+#include "DragController.h"
+#include "DragData.h"
#include "EditorClientGtk.h"
#include "Editor.h"
#include "EventHandler.h"
@@ -123,6 +126,7 @@
static const double defaultDPI = 96.0;
static WebKitCacheModel cacheModel;
+static IntPoint globalPointForClientPoint(GdkWindow* window, const IntPoint& clientPoint);
using namespace WebKit;
using namespace WebCore;
@@ -370,9 +374,6 @@ static gboolean webkit_web_view_popup_menu_handler(GtkWidget* widget)
location = IntPoint(rightAligned ? firstRect.right() : firstRect.x(), firstRect.bottom());
}
- int x, y;
- gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(view->hostWindow()->platformPageClient())), &x, &y);
-
// FIXME: The IntSize(0, -1) is a hack to get the hit-testing to result in the selected element.
// Ideally we'd have the position of a context menu event be separate from its target node.
location = view->contentsToWindow(location) + IntSize(0, -1);
@@ -384,7 +385,7 @@ static gboolean webkit_web_view_popup_menu_handler(GtkWidget* widget)
location.setX(contextMenuMargin);
else if (location.x() > view->width())
location.setX(view->width() - contextMenuMargin);
- IntPoint global = location + IntSize(x, y);
+ IntPoint global(globalPointForClientPoint(gtk_widget_get_window(widget), location));
PlatformMouseEvent event(location, global, RightButton, MouseEventPressed, 0, false, false, false, false, gtk_get_current_event_time());
@@ -1197,6 +1198,10 @@ static void webkit_web_view_dispose(GObject* object)
}
priv->draggingDataObjects->clear();
+ HashMap<GdkDragContext*, DroppingContext*>::iterator endDroppingContexts = priv->droppingContexts->end();
+ for (HashMap<GdkDragContext*, DroppingContext*>::iterator iter = priv->droppingContexts->begin(); iter != endDroppingContexts; ++iter)
+ delete (iter->second);
+ priv->droppingContexts->clear();
G_OBJECT_CLASS(webkit_web_view_parent_class)->dispose(object);
}
@@ -1214,6 +1219,7 @@ static void webkit_web_view_finalize(GObject* object)
delete priv->previousClickPoint;
delete priv->draggingDataObjects;
+ delete priv->droppingContexts;
G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object);
}
@@ -1309,6 +1315,14 @@ static void webkit_web_view_screen_changed(GtkWidget* widget, GdkScreen* previou
settings->setMinimumLogicalFontSize(minimumLogicalFontSize / 72.0 * DPI);
}
+static IntPoint globalPointForClientPoint(GdkWindow* window, const IntPoint& clientPoint)
+{
+ int x, y;
+ gdk_window_get_origin(window, &x, &y);
+ return clientPoint + IntSize(x, y);
+}
+
+
static void webkit_web_view_drag_end(GtkWidget* widget, GdkDragContext* context)
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
@@ -1360,6 +1374,130 @@ static void webkit_web_view_drag_data_get(GtkWidget* widget, GdkDragContext* con
pasteboardHelperInstance()->fillSelectionData(selectionData, info, priv->draggingDataObjects->get(context).get());
}
+static gboolean doDragLeaveLater(DroppingContext* context)
+{
+ WebKitWebView* webView = context->webView;
+ WebKitWebViewPrivate* priv = webView->priv;
+
+ if (!priv->droppingContexts->contains(context->gdkContext))
+ return FALSE;
+
+ // If the view doesn't know about the drag yet (there are still pending data)
+ // requests, don't update it with information about the drag.
+ if (context->pendingDataRequests)
+ return FALSE;
+
+ // Don't call dragExited if we have just received a drag-drop signal. This
+ // happens in the case of a successful drop onto the view.
+ if (!context->dropHappened) {
+ const IntPoint& position = context->lastMotionPosition;
+ DragData dragData(context->dataObject.get(), position, globalPointForClientPoint(gtk_widget_get_window(GTK_WIDGET(webView)), position), DragOperationNone);
+ core(webView)->dragController()->dragExited(&dragData);
+ }
+
+ core(webView)->dragController()->dragEnded();
+ priv->droppingContexts->remove(context->gdkContext);
+ delete context;
+ return FALSE;
+}
+
+static void webkit_web_view_drag_leave(GtkWidget* widget, GdkDragContext* context, guint time)
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+ WebKitWebViewPrivate* priv = webView->priv;
+
+ if (!priv->droppingContexts->contains(context))
+ return;
+
+ // During a drop GTK+ will fire a drag-leave signal right before firing
+ // the drag-drop signal. We want the actions for drag-leave to happen after
+ // those for drag-drop, so schedule them to happen asynchronously here.
+ g_timeout_add(0, reinterpret_cast<GSourceFunc>(doDragLeaveLater), priv->droppingContexts->get(context));
+}
+
+static gboolean webkit_web_view_drag_motion(GtkWidget* widget, GdkDragContext* context, gint x, gint y, guint time)
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+ WebKitWebViewPrivate* priv = webView->priv;
+
+ DroppingContext* droppingContext = 0;
+ IntPoint position = IntPoint(x, y);
+ if (!priv->droppingContexts->contains(context)) {
+ droppingContext = new DroppingContext;
+ droppingContext->webView = webView;
+ droppingContext->gdkContext = context;
+ droppingContext->dataObject = WebCore::DataObjectGtk::create();
+ droppingContext->dropHappened = false;
+ droppingContext->lastMotionPosition = position;
+ priv->droppingContexts->set(context, droppingContext);
+
+ Vector<GdkAtom> acceptableTargets(pasteboardHelperInstance()->dropAtomsForContext(widget, context));
+ droppingContext->pendingDataRequests = acceptableTargets.size();
+ for (size_t i = 0; i < acceptableTargets.size(); i++)
+ gtk_drag_get_data(widget, context, acceptableTargets.at(i), time);
+ } else {
+ droppingContext = priv->droppingContexts->get(context);
+ droppingContext->lastMotionPosition = position;
+ }
+
+ // Don't send any drag information to WebCore until we've retrieved all
+ // the data for this drag operation. Otherwise we'd have to block to wait
+ // for the drag's data.
+ ASSERT(droppingContext);
+ if (droppingContext->pendingDataRequests > 0)
+ return TRUE;
+
+ DragData dragData(droppingContext->dataObject.get(), position, globalPointForClientPoint(gtk_widget_get_window(widget), position), gdkDragActionToDragOperation(gdk_drag_context_get_actions(context)));
+ DragOperation operation = core(webView)->dragController()->dragUpdated(&dragData);
+ gdk_drag_status(context, dragOperationToSingleGdkDragAction(operation), time);
+
+ return TRUE;
+}
+
+static void webkit_web_view_drag_data_received(GtkWidget* widget, GdkDragContext* context, gint x, gint y, GtkSelectionData* selectionData, guint info, guint time)
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+ WebKitWebViewPrivate* priv = webView->priv;
+
+ if (!priv->droppingContexts->contains(context))
+ return;
+
+ DroppingContext* droppingContext = priv->droppingContexts->get(context);
+ droppingContext->pendingDataRequests--;
+ pasteboardHelperInstance()->fillDataObjectFromDropData(selectionData, info, droppingContext->dataObject.get());
+
+ if (droppingContext->pendingDataRequests)
+ return;
+
+ // The coordinates passed to drag-data-received signal are sometimes
+ // inaccurate in DRT, so use the coordinates of the last motion event.
+ const IntPoint& position = droppingContext->lastMotionPosition;
+
+ // If there are no more pending requests, start sending dragging data to WebCore.
+ DragData dragData(droppingContext->dataObject.get(), position, globalPointForClientPoint(gtk_widget_get_window(widget), position), gdkDragActionToDragOperation(gdk_drag_context_get_actions(context)));
+ DragOperation operation = core(webView)->dragController()->dragEntered(&dragData);
+ gdk_drag_status(context, dragOperationToSingleGdkDragAction(operation), time);
+}
+
+static gboolean webkit_web_view_drag_drop(GtkWidget* widget, GdkDragContext* context, gint x, gint y, guint time)
+{
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+ WebKitWebViewPrivate* priv = webView->priv;
+
+ if (!priv->droppingContexts->contains(context))
+ return FALSE;
+
+ DroppingContext* droppingContext = priv->droppingContexts->get(context);
+ droppingContext->dropHappened = true;
+
+ IntPoint position(x, y);
+ DragData dragData(droppingContext->dataObject.get(), position, globalPointForClientPoint(gtk_widget_get_window(widget), position), gdkDragActionToDragOperation(gdk_drag_context_get_actions(context)));
+ core(webView)->dragController()->performDrag(&dragData);
+
+ gtk_drag_finish(context, TRUE, FALSE, time);
+ return TRUE;
+}
+
#if GTK_CHECK_VERSION(2, 12, 0)
static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip)
{
@@ -2356,6 +2494,10 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
widgetClass->screen_changed = webkit_web_view_screen_changed;
widgetClass->drag_end = webkit_web_view_drag_end;
widgetClass->drag_data_get = webkit_web_view_drag_data_get;
+ widgetClass->drag_motion = webkit_web_view_drag_motion;
+ widgetClass->drag_leave = webkit_web_view_drag_leave;
+ widgetClass->drag_drop = webkit_web_view_drag_drop;
+ widgetClass->drag_data_received = webkit_web_view_drag_data_received;
#if GTK_CHECK_VERSION(2, 12, 0)
widgetClass->query_tooltip = webkit_web_view_query_tooltip;
#endif
@@ -2900,7 +3042,7 @@ static void webkit_web_view_init(WebKitWebView* webView)
priv->imContext = gtk_im_multicontext_new();
WebKit::InspectorClient* inspectorClient = new WebKit::InspectorClient(webView);
- priv->corePage = new Page(new WebKit::ChromeClient(webView), new WebKit::ContextMenuClient(webView), new WebKit::EditorClient(webView), new WebKit::DragClient(webView), inspectorClient, 0, 0, 0);
+ priv->corePage = new Page(new WebKit::ChromeClient(webView), new WebKit::ContextMenuClient(webView), new WebKit::EditorClient(webView), new WebKit::DragClient(webView), inspectorClient, 0, 0, 0, 0);
// We also add a simple wrapper class to provide the public
// interface for the Web Inspector.
@@ -2937,6 +3079,9 @@ static void webkit_web_view_init(WebKitWebView* webView)
priv->previousClickTime = 0;
priv->draggingDataObjects = new HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk> >();
+ priv->droppingContexts = new HashMap<GdkDragContext*, DroppingContext*>();
+ gtk_drag_dest_set(GTK_WIDGET(webView), static_cast<GtkDestDefaults>(0), 0, 0, static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE));
+ gtk_drag_dest_set_target_list(GTK_WIDGET(webView), pasteboardHelperInstance()->targetList());
}
GtkWidget* webkit_web_view_new(void)
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index c59d8b4..eaed21b 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,145 @@
+2010-07-09 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=13075
+ XMLHttpRequest with failed authentication should set status to 401
+
+ https://bugs.webkit.org/show_bug.cgi?id=6871
+ <rdar://problem/3363403> 401 error page is never shown
+
+ * Panels/WebPanelAuthenticationHandler.m:
+ (-[WebPanelAuthenticationHandler startAuthentication:window:]): Updated a comment - this
+ code cancels loading, not authentication (canceling authentication means telling to
+ continue without credentials).
+ (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]): If there were
+ no credentials provided, tell to continue without any. There may be alternative content
+ returned with 401.
+
+2010-07-09 Leon Clarke <leonclarke@google.com>
+
+ Reviewed by Adam Barth.
+
+ add support for link prefetching
+ https://bugs.webkit.org/show_bug.cgi?id=3652
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-07-08 Aaron Boodman <aa@chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Add the ability for user scripts and user styles to affect just the top frame.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41529
+
+ * WebView/WebView.mm:
+ (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:]):
+ (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:injectedFrames:]):
+ (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:]):
+ (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:injectedFrames:]):
+ * WebView/WebViewPrivate.h:
+
+2010-07-08 Adele Peterson <adele@apple.com>
+
+ Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=41721
+ <rdar://problem/8158561> Missing plug-in indicator should have a pressed state
+
+ Implement shouldMissingPluginMessageBeButton.
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::shouldMissingPluginMessageBeButton):
+
+2010-07-08 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ <rdar://problem/8136327> - Crash in Entourage calling WebCache method from background thread
+
+ * Misc/WebCache.mm:
+ (+[WebCache setDisabled:]): Forward the call to the main thread if called from a background thread.
+
+ * Misc/WebNSObjectExtras.h:
+ * Misc/WebNSObjectExtras.mm:
+ (+[NSObject _webkit_invokeOnMainThread]): Add a class version of the main thread invoker.
+
+2010-07-08 Mike Thole <mthole@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41896
+ Crash under allScriptsInPDFDocument() in WebPDFDocumentExtras.mm for certain PDFs
+
+ * WebView/WebPDFDocumentExtras.mm:
+ (allScriptsInPDFDocument): Null-check 'data', as CGPDFStreamCopyData() may have returned 0.
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
+ Convert BackForwardList to an abstract base class and add BackForwardListImpl
+ as the concrete implementation of it.
+
+ * History/WebBackForwardList.mm:
+ (-[WebBackForwardList init]):
+ (-[WebBackForwardList setPageCacheSize:]):
+ (-[WebBackForwardList pageCacheSize]):
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
+ Add basic piping for BackForwardControllerClient.
+
+ * WebView/WebView.mm:
+ (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Change requestURL to a KURL.
+ https://bugs.webkit.org/show_bug.cgi?id=41775
+
+ * Plugins/WebNetscapePluginStream.h:
+ (WebNetscapePluginStream::setRequestURL):
+ * Plugins/WebNetscapePluginStream.mm:
+ (WebNetscapePluginStream::pluginCancelledConnectionError):
+ (WebNetscapePluginStream::errorForReason):
+ (WebNetscapePluginStream::startStream):
+ (WebNetscapePluginStream::didReceiveResponse):
+ (WebNetscapePluginStream::destroyStream):
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Rename the WebBaseNetscapePluginStream.cpp and .h files to WebNetscapePluginStream.cpp and .h to match the class name.
+
+ * Plugins/WebNetscapePluginStream.h: Renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.h.
+ * Plugins/WebNetscapePluginStream.mm: Renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm.
+
+2010-07-06 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Expose URL matching from WebUserContentURLPattern
+ https://bugs.webkit.org/show_bug.cgi?id=41726
+ <rdar://problem/7910144>
+
+ We previously had a way to construct WebUserContentURLPattern
+ instances via WebKit, but no way for callers to perform matching.
+ This patch adds the matchesURL functionality to allow for this.
+
+ * Misc/WebUserContentURLPattern.h: Added matchesURL.
+ * Misc/WebUserContentURLPattern.mm:
+ (-[WebUserContentURLPattern matchesURL:]): Added. Calls through to WebCore::UserContentURLPattern::matches.
+
2010-06-23 Philippe Normand <pnormand@igalia.com>
Reviewed by Eric Carlson.
diff --git a/WebKit/mac/Configurations/FeatureDefines.xcconfig b/WebKit/mac/Configurations/FeatureDefines.xcconfig
index 8d2ff72..9a3ec0b 100644
--- a/WebKit/mac/Configurations/FeatureDefines.xcconfig
+++ b/WebKit/mac/Configurations/FeatureDefines.xcconfig
@@ -31,6 +31,8 @@
// Set any ENABLE_FEATURE_NAME macro to an empty string to disable that feature.
+ENABLE_LINK_PREFETCH = ;
+
ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(TARGET_MAC_OS_X_VERSION_MAJOR));
ENABLE_3D_CANVAS_1050 = ENABLE_3D_CANVAS;
ENABLE_3D_CANVAS_1060 = ENABLE_3D_CANVAS;
@@ -84,4 +86,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(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_READER) $(ENABLE_FILE_WRITER) $(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_RUBY) $(ENABLE_SANDBOX) $(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);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(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_READER) $(ENABLE_FILE_WRITER) $(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_RUBY) $(ENABLE_SANDBOX) $(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);
diff --git a/WebKit/mac/History/WebBackForwardList.mm b/WebKit/mac/History/WebBackForwardList.mm
index 6d9e998..617ee0e 100644
--- a/WebKit/mac/History/WebBackForwardList.mm
+++ b/WebKit/mac/History/WebBackForwardList.mm
@@ -38,7 +38,7 @@
#import "WebPreferencesPrivate.h"
#import "WebTypesInternal.h"
#import "WebViewPrivate.h"
-#import <WebCore/BackForwardList.h>
+#import <WebCore/BackForwardListImpl.h>
#import <WebCore/HistoryItem.h>
#import <WebCore/Page.h>
#import <WebCore/PageCache.h>
@@ -109,7 +109,7 @@ WebBackForwardList *kit(BackForwardList* backForwardList)
- (id)init
{
- return [self initWithBackForwardList:BackForwardList::create(0)];
+ return [self initWithBackForwardList:BackForwardListImpl::create(0)];
}
- (void)dealloc
@@ -293,12 +293,14 @@ static bool bumperCarBackForwardHackNeeded()
- (void)setPageCacheSize:(NSUInteger)size
{
- [kit(core(self)->page()) setUsesPageCache:size != 0];
+ ASSERT(core(self)->isBackForwardListImpl());
+ [kit(static_cast<BackForwardListImpl*>(core(self))->page()) setUsesPageCache:size != 0];
}
- (NSUInteger)pageCacheSize
{
- return [kit(core(self)->page()) usesPageCache] ? pageCache()->capacity() : 0;
+ ASSERT(core(self)->isBackForwardListImpl());
+ return [kit(static_cast<BackForwardListImpl*>(core(self))->page()) usesPageCache] ? pageCache()->capacity() : 0;
}
- (int)backListCount
diff --git a/WebKit/mac/Misc/WebCache.mm b/WebKit/mac/Misc/WebCache.mm
index b29f720..747d213 100644
--- a/WebKit/mac/Misc/WebCache.mm
+++ b/WebKit/mac/Misc/WebCache.mm
@@ -25,6 +25,7 @@
#import "WebCache.h"
+#import "WebNSObjectExtras.h"
#import "WebPreferences.h"
#import "WebSystemInterface.h"
#import "WebView.h"
@@ -126,6 +127,9 @@
+ (void)setDisabled:(BOOL)disabled
{
+ if (!pthread_main_np())
+ return [[self _webkit_invokeOnMainThread] setDisabled:disabled];
+
WebCore::cache()->setDisabled(disabled);
}
diff --git a/WebKit/mac/Misc/WebNSObjectExtras.h b/WebKit/mac/Misc/WebNSObjectExtras.h
index f327966..0114bcc 100644
--- a/WebKit/mac/Misc/WebNSObjectExtras.h
+++ b/WebKit/mac/Misc/WebNSObjectExtras.h
@@ -54,5 +54,6 @@ static inline IMP method_setImplementation(Method m, IMP i)
#endif
@interface NSObject (WebNSObjectExtras)
++ (id)_webkit_invokeOnMainThread;
- (id)_webkit_invokeOnMainThread;
@end
diff --git a/WebKit/mac/Misc/WebNSObjectExtras.mm b/WebKit/mac/Misc/WebNSObjectExtras.mm
index 3beb641..d00726b 100644
--- a/WebKit/mac/Misc/WebNSObjectExtras.mm
+++ b/WebKit/mac/Misc/WebNSObjectExtras.mm
@@ -105,6 +105,11 @@ static bool returnTypeIsObject(NSInvocation *invocation)
@implementation NSObject (WebNSObjectExtras)
++ (id)_webkit_invokeOnMainThread
+{
+ return [[[WebMainThreadInvoker alloc] initWithTarget:self] autorelease];
+}
+
- (id)_webkit_invokeOnMainThread
{
return [[[WebMainThreadInvoker alloc] initWithTarget:self] autorelease];
diff --git a/WebKit/mac/Misc/WebUserContentURLPattern.h b/WebKit/mac/Misc/WebUserContentURLPattern.h
index 6ec4bcf..e7ccac4 100644
--- a/WebKit/mac/Misc/WebUserContentURLPattern.h
+++ b/WebKit/mac/Misc/WebUserContentURLPattern.h
@@ -34,5 +34,6 @@
- (NSString *)scheme;
- (NSString *)host;
- (BOOL)matchesSubdomains;
+- (BOOL)matchesURL:(NSURL *)url;
@end
diff --git a/WebKit/mac/Misc/WebUserContentURLPattern.mm b/WebKit/mac/Misc/WebUserContentURLPattern.mm
index 5d9f49e..883f2e6 100644
--- a/WebKit/mac/Misc/WebUserContentURLPattern.mm
+++ b/WebKit/mac/Misc/WebUserContentURLPattern.mm
@@ -24,6 +24,7 @@
#import "WebUserContentURLPattern.h"
+#import <WebCore/KURL.h>
#import <WebCore/UserContentURLPattern.h>
using namespace WebCore;
@@ -80,4 +81,9 @@ using namespace WebCore;
return _private->pattern.matchSubdomains();
}
+- (BOOL)matchesURL:(NSURL *)url
+{
+ return _private->pattern.matches(url);
+}
+
@end
diff --git a/WebKit/mac/Panels/WebPanelAuthenticationHandler.m b/WebKit/mac/Panels/WebPanelAuthenticationHandler.m
index c4c6e5b..694bba5 100644
--- a/WebKit/mac/Panels/WebPanelAuthenticationHandler.m
+++ b/WebKit/mac/Panels/WebPanelAuthenticationHandler.m
@@ -113,7 +113,7 @@ WebPanelAuthenticationHandler *sharedHandler;
// In this case, we have an attached sheet that's not one of our
// authentication panels, so enqueing is not an option. Just
- // cancel authentication instead, since this case is fairly
+ // cancel loading instead, since this case is fairly
// unlikely (how would you be loading a page if you had an error
// sheet up?)
if ([w attachedSheet] != nil) {
@@ -152,7 +152,7 @@ WebPanelAuthenticationHandler *sharedHandler;
}
if (credential == nil) {
- [[challenge sender] cancelAuthenticationChallenge:challenge];
+ [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];
} else {
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.h b/WebKit/mac/Plugins/WebNetscapePluginStream.h
index 8fbe262..8ee9e7f 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.h
+++ b/WebKit/mac/Plugins/WebNetscapePluginStream.h
@@ -36,6 +36,7 @@
#import <wtf/RefCounted.h>
#import <wtf/RefPtr.h>
#import <wtf/RetainPtr.h>
+#import <wtf/text/CString.h>
#import "WebNetscapePluginView.h"
@@ -71,7 +72,7 @@ public:
void cancelLoadAndDestroyStreamWithError(NSError *);
- void setRequestURL(NSURL *requestURL) { m_requestURL = requestURL; }
+ void setRequestURL(const WebCore::KURL& requestURL) { m_requestURL = requestURL; }
void start();
void stop();
@@ -89,7 +90,7 @@ private:
void deliverDataToFile(NSData *data);
void deliverData();
- void startStream(NSURL *, long long expectedContentLength, NSDate *lastModifiedDate, NSString *mimeType, NSData *headers);
+ void startStream(NSURL *, long long expectedContentLength, NSDate *lastModifiedDate, const WebCore::String& mimeType, NSData *headers);
NSError *pluginCancelledConnectionError() const;
@@ -99,9 +100,9 @@ private:
bool wantsAllStreams() const;
RetainPtr<NSMutableData> m_deliveryData;
- RetainPtr<NSURL> m_requestURL;
+ WebCore::KURL m_requestURL;
RetainPtr<NSURL> m_responseURL;
- RetainPtr<NSString> m_mimeType;
+ CString m_mimeType;
NPP m_plugin;
uint16_t m_transferMode;
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm b/WebKit/mac/Plugins/WebNetscapePluginStream.mm
index 07d1d4f..5c1e8ee 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginStream.mm
@@ -27,7 +27,7 @@
*/
#if ENABLE(NETSCAPE_PLUGIN_API)
-#import "WebBaseNetscapePluginStream.h"
+#import "WebNetscapePluginStream.h"
#import "WebNetscapePluginView.h"
#import "WebFrameInternal.h"
@@ -102,10 +102,10 @@ NPReason WebNetscapePluginStream::reasonForError(NSError *error)
NSError *WebNetscapePluginStream::pluginCancelledConnectionError() const
{
return [[[NSError alloc] _initWithPluginErrorCode:WebKitErrorPlugInCancelledConnection
- contentURL:m_responseURL ? m_responseURL.get() : m_requestURL.get()
+ contentURL:m_responseURL ? m_responseURL.get() : (NSURL *)m_requestURL
pluginPageURL:nil
pluginName:[[m_pluginView.get() pluginPackage] pluginInfo].name
- MIMEType:m_mimeType.get()] autorelease];
+ MIMEType:(NSString *)String::fromUTF8(m_mimeType.data(), m_mimeType.length())] autorelease];
}
NSError *WebNetscapePluginStream::errorForReason(NPReason reason) const
@@ -116,7 +116,7 @@ NSError *WebNetscapePluginStream::errorForReason(NPReason reason) const
if (reason == NPRES_USER_BREAK)
return [NSError _webKitErrorWithDomain:NSURLErrorDomain
code:NSURLErrorCancelled
- URL:m_responseURL ? m_responseURL.get() : m_requestURL.get()];
+ URL:m_responseURL ? m_responseURL.get() : (NSURL *)m_requestURL];
return pluginCancelledConnectionError();
}
@@ -209,12 +209,12 @@ void WebNetscapePluginStream::setPlugin(NPP plugin)
}
}
-void WebNetscapePluginStream::startStream(NSURL *url, long long expectedContentLength, NSDate *lastModifiedDate, NSString *mimeType, NSData *headers)
+void WebNetscapePluginStream::startStream(NSURL *url, long long expectedContentLength, NSDate *lastModifiedDate, const String& mimeType, NSData *headers)
{
ASSERT(!m_isTerminated);
m_responseURL = url;
- m_mimeType = mimeType;
+ m_mimeType = mimeType.utf8();
free((void *)m_stream.url);
m_stream.url = strdup([m_responseURL.get() _web_URLCString]);
@@ -243,10 +243,10 @@ void WebNetscapePluginStream::startStream(NSURL *url, long long expectedContentL
NPError npErr;
{
PluginStopDeferrer deferrer(m_pluginView.get());
- npErr = m_pluginFuncs->newstream(m_plugin, (char *)[m_mimeType.get() UTF8String], &m_stream, NO, &m_transferMode);
+ npErr = m_pluginFuncs->newstream(m_plugin, m_mimeType.mutableData(), &m_stream, NO, &m_transferMode);
}
- LOG(Plugins, "NPP_NewStream URL=%@ MIME=%@ error=%d", m_responseURL.get(), m_mimeType.get(), npErr);
+ LOG(Plugins, "NPP_NewStream URL=%@ MIME=%s error=%d", m_responseURL.get(), m_mimeType.data(), npErr);
if (npErr != NPERR_NO_ERROR) {
LOG_ERROR("NPP_NewStream failed with error: %d responseURL: %@", npErr, m_responseURL.get());
@@ -350,7 +350,7 @@ void WebNetscapePluginStream::didReceiveResponse(NetscapePlugInStreamLoader*, co
// startStreamResponseURL:... will null-terminate.
}
- startStream([r URL], expectedContentLength, WKGetNSURLResponseLastModifiedDate(r), [r MIMEType], theHeaders);
+ startStream([r URL], expectedContentLength, WKGetNSURLResponseLastModifiedDate(r), response.mimeType(), theHeaders);
}
void WebNetscapePluginStream::startStreamWithResponse(NSURLResponse *response)
@@ -440,8 +440,8 @@ void WebNetscapePluginStream::destroyStream()
if (m_sendNotification) {
// NPP_URLNotify expects the request URL, not the response URL.
PluginStopDeferrer deferrer(m_pluginView.get());
- m_pluginFuncs->urlnotify(m_plugin, [m_requestURL.get() _web_URLCString], m_reason, m_notifyData);
- LOG(Plugins, "NPP_URLNotify requestURL=%@ reason=%d", m_requestURL.get(), m_reason);
+ m_pluginFuncs->urlnotify(m_plugin, m_requestURL.string().utf8().data(), m_reason, m_notifyData);
+ LOG(Plugins, "NPP_URLNotify requestURL=%@ reason=%d", (NSURL *)m_requestURL, m_reason);
}
m_isTerminated = true;
diff --git a/WebKit/mac/Plugins/WebNetscapePluginView.mm b/WebKit/mac/Plugins/WebNetscapePluginView.mm
index f062f7c..10a3187 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginView.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginView.mm
@@ -30,7 +30,6 @@
#import "WebNetscapePluginView.h"
-#import "WebBaseNetscapePluginStream.h"
#import "WebDataSourceInternal.h"
#import "WebDefaultUIDelegate.h"
#import "WebFrameInternal.h"
@@ -49,6 +48,7 @@
#import "WebNetscapeContainerCheckPrivate.h"
#import "WebNetscapePluginEventHandler.h"
#import "WebNetscapePluginPackage.h"
+#import "WebNetscapePluginStream.h"
#import "WebPluginContainerCheck.h"
#import "WebPluginRequest.h"
#import "WebPreferences.h"
diff --git a/WebKit/mac/WebCoreSupport/WebChromeClient.h b/WebKit/mac/WebCoreSupport/WebChromeClient.h
index 5587a8d..ea59c4d 100644
--- a/WebKit/mac/WebCoreSupport/WebChromeClient.h
+++ b/WebKit/mac/WebCoreSupport/WebChromeClient.h
@@ -105,6 +105,7 @@ public:
virtual void setStatusbarText(const WebCore::String&);
virtual void scrollbarsModeDidChange() const { }
+ virtual bool shouldMissingPluginMessageBeButton() const;
virtual void missingPluginButtonClicked(WebCore::Element*) const;
virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
diff --git a/WebKit/mac/WebCoreSupport/WebChromeClient.mm b/WebKit/mac/WebCoreSupport/WebChromeClient.mm
index e426f05..3bf310a 100644
--- a/WebKit/mac/WebCoreSupport/WebChromeClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebChromeClient.mm
@@ -516,6 +516,11 @@ void WebChromeClient::scrollRectIntoView(const IntRect& r, const ScrollView*) co
// End host window methods.
+bool WebChromeClient::shouldMissingPluginMessageBeButton() const
+{
+ return [[m_webView UIDelegate] respondsToSelector:@selector(webView:didPressMissingPluginButton:)];
+}
+
void WebChromeClient::missingPluginButtonClicked(Element* element) const
{
CallUIDelegate(m_webView, @selector(webView:didPressMissingPluginButton:), kit(element));
diff --git a/WebKit/mac/WebView/WebPDFDocumentExtras.mm b/WebKit/mac/WebView/WebPDFDocumentExtras.mm
index b7043df..7651dba 100644
--- a/WebKit/mac/WebView/WebPDFDocumentExtras.mm
+++ b/WebKit/mac/WebView/WebPDFDocumentExtras.mm
@@ -112,6 +112,8 @@ NSArray *allScriptsInPDFDocument(PDFDocument *document)
if (CGPDFDictionaryGetStream(javaScriptAction, "JS", &stream)) {
CGPDFDataFormat format;
data.adoptCF(CGPDFStreamCopyData(stream, &format));
+ if (!data)
+ continue;
bytes = CFDataGetBytePtr(data.get());
length = CFDataGetLength(data.get());
} else if (CGPDFDictionaryGetString(javaScriptAction, "JS", &string)) {
diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm
index ada00b5..6d61453 100644
--- a/WebKit/mac/WebView/WebView.mm
+++ b/WebKit/mac/WebView/WebView.mm
@@ -675,8 +675,7 @@ static bool shouldEnableLoadDeferring()
#else
WebGeolocationControllerClient* geolocationControllerClient = 0;
#endif
- DeviceOrientationClient* deviceOrientationClient = 0;
- _private->page = new Page(new WebChromeClient(self), new WebContextMenuClient(self), new WebEditorClient(self), new WebDragClient(self), new WebInspectorClient(self), new WebPluginHalterClient(self), geolocationControllerClient, deviceOrientationClient);
+ _private->page = new Page(new WebChromeClient(self), new WebContextMenuClient(self), new WebEditorClient(self), new WebDragClient(self), new WebInspectorClient(self), new WebPluginHalterClient(self), geolocationControllerClient, 0, 0);
_private->page->setCanStartMedia([self window]);
_private->page->settings()->setLocalStorageDatabasePath([[self preferences] _localStorageDatabasePath]);
@@ -2363,7 +2362,16 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
}
+ (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url
- whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectionTime:(WebUserScriptInjectionTime)injectionTime
+ whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist
+ injectionTime:(WebUserScriptInjectionTime)injectionTime
+{
+ [WebView _addUserScriptToGroup:groupName world:world source:source url:url whitelist:whitelist blacklist:blacklist injectionTime:injectionTime injectedFrames:WebInjectInAllFrames];
+}
+
++ (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url
+ whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist
+ injectionTime:(WebUserScriptInjectionTime)injectionTime
+ injectedFrames:(WebUserContentInjectedFrames)injectedFrames
{
String group(groupName);
if (group.isEmpty())
@@ -2374,11 +2382,19 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
return;
pageGroup->addUserScriptToWorld(core(world), source, url, toStringVector(whitelist), toStringVector(blacklist),
- injectionTime == WebInjectAtDocumentStart ? InjectAtDocumentStart : InjectAtDocumentEnd);
+ injectionTime == WebInjectAtDocumentStart ? InjectAtDocumentStart : InjectAtDocumentEnd,
+ injectedFrames == WebInjectInAllFrames ? InjectInAllFrames : InjectInTopFrameOnly);
+}
+
++ (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url
+ whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist
+{
+ [WebView _addUserStyleSheetToGroup:groupName world:world source:source url:url whitelist:whitelist blacklist:blacklist injectedFrames:WebInjectInAllFrames];
}
+ (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url
whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist
+ injectedFrames:(WebUserContentInjectedFrames)injectedFrames
{
String group(groupName);
if (group.isEmpty())
@@ -2388,7 +2404,7 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
if (!pageGroup)
return;
- pageGroup->addUserStyleSheetToWorld(core(world), source, url, toStringVector(whitelist), toStringVector(blacklist));
+ pageGroup->addUserStyleSheetToWorld(core(world), source, url, toStringVector(whitelist), toStringVector(blacklist), injectedFrames == WebInjectInAllFrames ? InjectInAllFrames : InjectInTopFrameOnly);
}
+ (void)_removeUserScriptFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url
diff --git a/WebKit/mac/WebView/WebViewPrivate.h b/WebKit/mac/WebView/WebViewPrivate.h
index cedc62c..9d47a4d 100644
--- a/WebKit/mac/WebView/WebViewPrivate.h
+++ b/WebKit/mac/WebView/WebViewPrivate.h
@@ -88,6 +88,11 @@ typedef enum {
WebInjectAtDocumentEnd,
} WebUserScriptInjectionTime;
+typedef enum {
+ WebInjectInAllFrames,
+ WebInjectInTopFrameOnly
+} WebUserContentInjectedFrames;
+
@interface WebController : NSTreeController {
IBOutlet WebView *webView;
}
@@ -504,8 +509,12 @@ Could be worth adding to the API.
// Removes all white list entries created with _addOriginAccessWhitelistEntryWithSourceOrigin.
+ (void)_resetOriginAccessWhitelists;
+// FIXME: The following two methods are deprecated in favor of the overloads below that take the WebUserContentInjectedFrames argument. https://bugs.webkit.org/show_bug.cgi?id=41800.
+ (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectionTime:(WebUserScriptInjectionTime)injectionTime;
+ (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist;
+
++ (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectionTime:(WebUserScriptInjectionTime)injectionTime injectedFrames:(WebUserContentInjectedFrames)injectedFrames;
++ (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectedFrames:(WebUserContentInjectedFrames)injectedFrames;
+ (void)_removeUserScriptFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url;
+ (void)_removeUserStyleSheetFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url;
+ (void)_removeUserScriptsFromGroup:(NSString *)groupName world:(WebScriptWorld *)world;
diff --git a/WebKit/qt/Api/qwebframe.cpp b/WebKit/qt/Api/qwebframe.cpp
index c4cb597..d1741ca 100644
--- a/WebKit/qt/Api/qwebframe.cpp
+++ b/WebKit/qt/Api/qwebframe.cpp
@@ -621,9 +621,10 @@ static inline QUrl ensureAbsoluteUrl(const QUrl &url)
void QWebFrame::setUrl(const QUrl &url)
{
- d->frame->loader()->writer()->begin(ensureAbsoluteUrl(url));
+ const QUrl absolute = ensureAbsoluteUrl(url);
+ d->frame->loader()->writer()->begin(absolute);
d->frame->loader()->writer()->end();
- load(ensureAbsoluteUrl(url));
+ load(absolute);
}
QUrl QWebFrame::url() const
@@ -714,7 +715,8 @@ QWebPage *QWebFrame::page() const
*/
void QWebFrame::load(const QUrl &url)
{
- load(QNetworkRequest(ensureAbsoluteUrl(url)));
+ // The load() overload ensures that the url is absolute.
+ load(QNetworkRequest(url));
}
/*!
diff --git a/WebKit/qt/Api/qwebhistory.cpp b/WebKit/qt/Api/qwebhistory.cpp
index a6f3d0c..55305c9 100644
--- a/WebKit/qt/Api/qwebhistory.cpp
+++ b/WebKit/qt/Api/qwebhistory.cpp
@@ -22,6 +22,7 @@
#include "qwebhistory_p.h"
#include "qwebframe_p.h"
+#include "BackForwardListImpl.h"
#include "PlatformString.h"
#include "Image.h"
#include "KURL.h"
@@ -259,7 +260,7 @@ void QWebHistory::clear()
WebCore::BackForwardList* lst = d->lst;
//clear visited links
- WebCore::Page* page = lst->page();
+ WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(lst)->page();
if (page && page->groupPtr())
page->groupPtr()->removeVisitedLinks();
@@ -363,7 +364,7 @@ bool QWebHistory::canGoForward() const
void QWebHistory::back()
{
if (canGoBack()) {
- WebCore::Page* page = d->lst->page();
+ WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page();
page->goToItem(d->lst->backItem(), WebCore::FrameLoadTypeIndexedBackForward);
}
}
@@ -377,7 +378,7 @@ void QWebHistory::back()
void QWebHistory::forward()
{
if (canGoForward()) {
- WebCore::Page* page = d->lst->page();
+ WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page();
page->goToItem(d->lst->forwardItem(), WebCore::FrameLoadTypeIndexedBackForward);
}
}
@@ -389,7 +390,7 @@ void QWebHistory::forward()
*/
void QWebHistory::goToItem(const QWebHistoryItem &item)
{
- WebCore::Page* page = d->lst->page();
+ WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page();
page->goToItem(item.d->item, WebCore::FrameLoadTypeIndexedBackForward);
}
@@ -538,7 +539,7 @@ QDataStream& operator>>(QDataStream& source, QWebHistory& history)
}
d->lst->removeItem(nullItem);
// Update the HistoryController.
- history.d->lst->page()->mainFrame()->loader()->history()->setCurrentItem(history.d->lst->entries()[currentIndex].get());
+ static_cast<WebCore::BackForwardListImpl*>(history.d->lst)->page()->mainFrame()->loader()->history()->setCurrentItem(history.d->lst->entries()[currentIndex].get());
history.goToItem(history.itemAt(currentIndex));
}
}
@@ -550,7 +551,7 @@ QDataStream& operator>>(QDataStream& source, QWebHistory& history)
QWebPagePrivate* QWebHistoryPrivate::page()
{
- return QWebFramePrivate::kit(lst->page()->mainFrame())->page()->handle();
+ return QWebFramePrivate::kit(static_cast<WebCore::BackForwardListImpl*>(lst)->page()->mainFrame())->page()->handle();
}
WebCore::HistoryItem* QWebHistoryItemPrivate::core(QWebHistoryItem* q)
diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp
index eab909c..35219a9 100644
--- a/WebKit/qt/Api/qwebpage.cpp
+++ b/WebKit/qt/Api/qwebpage.cpp
@@ -218,9 +218,6 @@ const char* QWebPagePrivate::editorCommandForWebActions(QWebPage::WebAction acti
return 0;
}
-// If you change this make sure to also adjust the docs for QWebPage::userAgentForUrl
-#define WEBKIT_VERSION "527+"
-
static inline DragOperation dropActionToDragOp(Qt::DropActions actions)
{
unsigned result = 0;
@@ -275,7 +272,7 @@ QWebPagePrivate::QWebPagePrivate(QWebPage *qq)
contextMenuClient = new ContextMenuClientQt();
editorClient = new EditorClientQt(q);
page = new Page(chromeClient, contextMenuClient, editorClient,
- new DragClientQt(q), new InspectorClientQt(q), 0, 0, 0);
+ new DragClientQt(q), new InspectorClientQt(q), 0, 0, 0, 0);
settings = new QWebSettings(page->settings());
@@ -3590,7 +3587,7 @@ QString QWebPage::userAgentForUrl(const QUrl&) const
firstPartTemp += QString::fromLatin1("Sun Solaris");
#elif defined Q_OS_ULTRIX
firstPartTemp += QString::fromLatin1("DEC Ultrix");
-#elif defined Q_WS_S60
+#elif defined Q_OS_SYMBIAN
firstPartTemp += QLatin1Char(' ');
QSysInfo::S60Version s60Version = QSysInfo::s60Version();
switch (s60Version) {
diff --git a/WebKit/qt/Api/qwebsettings.cpp b/WebKit/qt/Api/qwebsettings.cpp
index ff7c101..4ba6943 100644
--- a/WebKit/qt/Api/qwebsettings.cpp
+++ b/WebKit/qt/Api/qwebsettings.cpp
@@ -80,11 +80,20 @@ public:
typedef QHash<int, QPixmap> WebGraphicHash;
Q_GLOBAL_STATIC(WebGraphicHash, _graphics)
+static void earlyClearGraphics()
+{
+ _graphics()->clear();
+}
+
static WebGraphicHash* graphics()
{
WebGraphicHash* hash = _graphics();
if (hash->isEmpty()) {
+
+ // prevent ~QPixmap running after ~QApplication (leaks native pixmaps)
+ qAddPostRoutine(earlyClearGraphics);
+
hash->insert(QWebSettings::MissingImageGraphic, QPixmap(QLatin1String(":webkit/resources/missingImage.png")));
hash->insert(QWebSettings::MissingPluginGraphic, QPixmap(QLatin1String(":webkit/resources/nullPlugin.png")));
hash->insert(QWebSettings::DefaultFrameIconGraphic, QPixmap(QLatin1String(":webkit/resources/urlIcon.png")));
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index 2a649f6..e67abca 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,205 @@
+2010-07-09 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ NotificationPresenter needs a cancelRequestPermission API
+ https://bugs.webkit.org/show_bug.cgi?id=41783
+
+ Updated NotificationPresenter API to use ScriptExecutionContext instead of origin
+ and added a new NotificationPresenter::cancelRequestsForPermission API.
+ The new API will be implemented in a followup patch.
+
+ * WebCoreSupport/NotificationPresenterClientQt.cpp:
+ (WebCore::NotificationPresenterClientQt::requestPermission):
+ (WebCore::NotificationPresenterClientQt::checkPermission):
+ (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission):
+ * WebCoreSupport/NotificationPresenterClientQt.h:
+
+2010-07-09 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Skip test that never terminates on maemo5
+
+ Due to https://bugs.webkit.org/show_bug.cgi?id=38538
+ the tst_QWebPage::infiniteLoopJS() autotest never terminates.
+ Skip the test so that the test case may run to completion.
+
+ Patch by Dominik Holland <dominik.holland@nokia.com>
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::infiniteLoopJS):
+
+2010-07-09 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Unreviewed trivial Symbian build fix.
+
+ [Qt] Fix the Symbian build when compiling without S60
+
+ Use Q_OS_SYMBIAN instead of Q_WS_S60 for the user agent
+ determination.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::userAgentForUrl):
+
+2010-07-09 Kristian Amlie <kristian.amlie@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fixed Qt symbian/linux-armcc mkspec when configured with -qtlibinfix.
+
+ * declarative/declarative.pro: Use QT_LIBINFIX.
+
+2010-07-09 Anders Bakken <agbakken@gmail.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Remove superfluous function calls
+ https://bugs.webkit.org/show_bug.cgi?id=40353
+
+ QWebFrame::setUrl() calls ensureAbsoluteUrl() twice. It's better to
+ store a local variable and reuse this one.
+
+ QWebFrame::load(QUrl) calls QWebFrame::load(QNetworkRequest) which in
+ turn will get the QUrl from the request and make sure it's absolute by
+ calling ensureAbsoluteUrl() on it.
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::setUrl):
+ (QWebFrame::load):
+
+2010-07-08 Sam Magnuson <smagnuson@netflix.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] instance objects created for QObjects are somtimes GC'd
+ https://bugs.webkit.org/show_bug.cgi?id=40352
+
+ Improved the test to check for jsObjects that that are garbage collected.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (tst_QWebFrame::):
+
+2010-07-08 Aaron Boodman <aa@chromium.org>
+
+ Unreviewed change to fix qt build after c62876.
+
+ * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+ (DumpRenderTreeSupportQt::addUserStyleSheet):
+
+2010-07-07 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Add DRT support for pageProperty etc.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41584
+
+ * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+ (DumpRenderTreeSupportQt::isPageBoxVisible):
+ (DumpRenderTreeSupportQt::pageSizeAndMarginsInPixels):
+ (DumpRenderTreeSupportQt::pageProperty):
+ (DumpRenderTreeSupportQt::addUserStyleSheet):
+ * WebCoreSupport/DumpRenderTreeSupportQt.h:
+
+2010-07-08 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
+ Convert BackForwardList to an abstract base class and add BackForwardListImpl
+ as the concrete implementation of it.
+
+ * Api/qwebhistory.cpp:
+ (QWebHistory::clear):
+ (QWebHistory::back):
+ (QWebHistory::forward):
+ (QWebHistory::goToItem):
+ (operator>>):
+ (QWebHistoryPrivate::page):
+
+2010-07-08 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Remove unused WEBKIT_VERSION define from qwebpage.cpp
+
+ We now use qWebKitVersion()
+
+ * Api/qwebpage.cpp:
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
+ Add basic piping for BackForwardControllerClient.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::QWebPagePrivate):
+
+2010-07-07 Marc Mutz <marc.mutz@kdab.com>
+
+ Reviewed by Adam Barth.
+
+ [Qt] QWebSettings: Don't leak native pixmaps
+
+ When Q_GLOBAL_STATIC gets around to deleting the QHash with the
+ pixmaps in, the QApplication destructor has already been
+ completed. This makes it impossible for ~QPixmap to return the
+ native pixmap to the OS, thus leaking them.
+
+ This patch adds a post routine (executed as part of ~QApplication)
+ that clears the hash so Q_GLOBAL_STATIC's destruction doesn't have
+ to execute ~QPixmap's anymore.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41657
+
+ * Api/qwebsettings.cpp:
+ (earlyClearGraphics): New. Clears the pixmap hash.
+ (graphics): add earlyClearGraphics as a qAddPostRoutine()
+
+2010-07-06 Csaba Osztrogonác <ossy@webkit.org>
+
+ Rubber-stamped by Kenneth Rohde Christiansen.
+
+ Client errors should set "WebKitErrorDomain" domain instead of "WebKit" to match Mac.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::blockedError):
+ (WebCore::FrameLoaderClientQt::cannotShowURLError):
+ (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
+ (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Fix crash caused by my fix to the Qt build.
+
+ * WebCoreSupport/InspectorClientQt.cpp:
+ (WebCore::InspectorFrontendClientQt::closeWindow): Release pointer into
+ a local OwnPtr instead of calling clear. Another fix, probably better,
+ would be to change OwnPtr::clear to zero out the pointer before deleting,
+ but that affects many more call sites, so I will do that separately.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Fix Qt build.
+
+ * WebCoreSupport/InspectorClientQt.cpp:
+ (WebCore::InspectorFrontendClientQt::closeWindow): Call clear instead of
+ calling delete on the result of leakPtr.
+
+2010-06-19 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ WebInspector: js function name was fixed.
+ dispatchMessageToFrontend -> dispatchMessageFromBackend.
+ https://bugs.webkit.org/show_bug.cgi?id=40675
+
+ * WebCoreSupport/InspectorClientQt.cpp:
+ (WebCore::InspectorClientQt::sendMessageToFrontend):
+
2010-07-03 Robert Hogan <robert@webkit.org>
Reviewed by Kenneth Rohde Christiansen.
diff --git a/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp b/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
index 09dec71..99f5653 100644
--- a/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
+++ b/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
@@ -669,6 +669,30 @@ void DumpRenderTreeSupportQt::evaluateScriptInIsolatedWorld(QWebFrame* frame, in
proxy->executeScriptInWorld(scriptWorld->world(), script, true);
}
+bool DumpRenderTreeSupportQt::isPageBoxVisible(QWebFrame* frame, int pageIndex)
+{
+ WebCore::Frame* coreFrame = QWebFramePrivate::core(frame);
+ return coreFrame->document()->isPageBoxVisible(pageIndex);
+}
+
+QString DumpRenderTreeSupportQt::pageSizeAndMarginsInPixels(QWebFrame* frame, int pageIndex, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft)
+{
+ WebCore::Frame* coreFrame = QWebFramePrivate::core(frame);
+ return PrintContext::pageSizeAndMarginsInPixels(coreFrame, pageIndex, width, height,
+ marginTop, marginRight, marginBottom, marginLeft);
+}
+
+QString DumpRenderTreeSupportQt::pageProperty(QWebFrame* frame, const QString& propertyName, int pageNumber)
+{
+ WebCore::Frame* coreFrame = QWebFramePrivate::core(frame);
+ return PrintContext::pageProperty(coreFrame, propertyName.toUtf8().constData(), pageNumber);
+}
+
+void DumpRenderTreeSupportQt::addUserStyleSheet(QWebPage* page, const QString& sourceCode)
+{
+ page->handle()->page->group().addUserStyleSheetToWorld(mainThreadNormalWorld(), sourceCode, QUrl(), 0, 0, WebCore::InjectInAllFrames);
+}
+
// 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/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h b/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
index 304e65b..2ff1fc8 100644
--- a/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
+++ b/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
@@ -135,6 +135,13 @@ public:
static bool shouldClose(QWebFrame* frame);
static void setCustomPolicyDelegate(bool enabled, bool permissive);
+
+ static bool isPageBoxVisible(QWebFrame* frame, int pageIndex);
+
+ static QString pageSizeAndMarginsInPixels(QWebFrame* frame, int pageIndex, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft);
+ static QString pageProperty(QWebFrame* frame, const QString& propertyName, int pageNumber);
+ static void addUserStyleSheet(QWebPage* page, const QString& sourceCode);
+
};
#endif
diff --git a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index db731d8..0348251 100644
--- a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -834,26 +834,26 @@ enum {
WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
{
- return ResourceError("WebKit", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
+ return ResourceError("WebKitErrorDomain", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
QCoreApplication::translate("QWebFrame", "Request blocked", 0, QCoreApplication::UnicodeUTF8));
}
WebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest& request)
{
- return ResourceError("WebKit", WebKitErrorCannotShowURL, request.url().string(),
+ return ResourceError("WebKitErrorDomain", WebKitErrorCannotShowURL, request.url().string(),
QCoreApplication::translate("QWebFrame", "Cannot show URL", 0, QCoreApplication::UnicodeUTF8));
}
WebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
{
- return ResourceError("WebKit", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().string(),
+ return ResourceError("WebKitErrorDomain", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().string(),
QCoreApplication::translate("QWebFrame", "Frame load interrupted by policy change", 0, QCoreApplication::UnicodeUTF8));
}
WebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
{
- return ResourceError("WebKit", WebKitErrorCannotShowMIMEType, response.url().string(),
+ return ResourceError("WebKitErrorDomain", WebKitErrorCannotShowMIMEType, response.url().string(),
QCoreApplication::translate("QWebFrame", "Cannot show mimetype", 0, QCoreApplication::UnicodeUTF8));
}
diff --git a/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp b/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
index fde0556..2cc7e50 100644
--- a/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
@@ -184,7 +184,7 @@ bool InspectorClientQt::sendMessageToFrontend(const String& message)
if (!scriptController)
return false;
- String dispatchToFrontend("WebInspector.dispatchMessageToFrontend(");
+ String dispatchToFrontend("WebInspector.dispatchMessageFromBackend(");
dispatchToFrontend += message;
dispatchToFrontend += ");";
scriptController->executeScript(dispatchToFrontend);
@@ -260,7 +260,7 @@ void InspectorFrontendClientQt::closeWindow()
m_inspectorClient->releaseFrontendPage();
// Clear pointer before deleting WebView to avoid recursive calls to its destructor.
- delete m_inspectorView.release();
+ OwnPtr<QWebView> inspectorView = m_inspectorView.release();
}
void InspectorFrontendClientQt::attachWindow()
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
index c90b3b5..a037592 100644
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
@@ -37,6 +37,7 @@
#include "EventNames.h"
#include "KURL.h"
#include "QtPlatformPlugin.h"
+#include "ScriptExecutionContext.h"
#include "SecurityOrigin.h"
#include "qwebkitglobal.h"
@@ -252,12 +253,12 @@ void NotificationPresenterClientQt::notificationObjectDestroyed(Notification* no
delete m_notifications.take(notification);
}
-void NotificationPresenterClientQt::requestPermission(SecurityOrigin* origin, PassRefPtr<VoidCallback> callback)
+void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<VoidCallback> callback)
{
if (dumpNotification)
- printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(origin->toString()).toUtf8().constData());
+ printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData());
- QString originString = origin->toString();
+ QString originString = context->securityOrigin()->toString();
QHash<QString, QList<RefPtr<VoidCallback> > >::iterator iter = m_pendingPermissionRequests.find(originString);
if (iter != m_pendingPermissionRequests.end())
iter.value().append(callback);
@@ -271,10 +272,10 @@ void NotificationPresenterClientQt::requestPermission(SecurityOrigin* origin, Pa
}
}
-NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission(const KURL& url)
+NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context)
{
NotificationPermission permission = NotificationNotAllowed;
- QString origin = url.string();
+ QString origin = context->url().string();
if (checkPermissionFunction)
checkPermissionFunction(m_receiver, origin, permission);
switch (permission) {
@@ -289,6 +290,12 @@ NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission
return NotificationPresenter::PermissionNotAllowed;
}
+void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionContext*)
+{
+ // FIXME: This will be implemented for https://bugs.webkit.org/show_bug.cgi?id=41413
+ // to avoid adding and removing new private API
+}
+
void NotificationPresenterClientQt::allowNotificationForOrigin(const QString& origin)
{
QHash<QString, QList<RefPtr<VoidCallback> > >::iterator iter = m_pendingPermissionRequests.find(origin);
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
index 82c5f7c..b99393b 100644
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
@@ -45,7 +45,7 @@
namespace WebCore {
class Document;
-class KURL;
+class ScriptExecutionContext;
class NotificationWrapper : public QObject, public QWebNotificationData {
Q_OBJECT
@@ -84,8 +84,9 @@ public:
virtual bool show(Notification*);
virtual void cancel(Notification*);
virtual void notificationObjectDestroyed(Notification*);
- virtual void requestPermission(SecurityOrigin*, PassRefPtr<VoidCallback>);
- virtual NotificationPresenter::Permission checkPermission(const KURL&);
+ virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>);
+ virtual NotificationPresenter::Permission checkPermission(ScriptExecutionContext*);
+ virtual void cancelRequestsForPermission(ScriptExecutionContext*);
void cancel(NotificationWrapper*);
diff --git a/WebKit/qt/declarative/declarative.pro b/WebKit/qt/declarative/declarative.pro
index 75268f3..526cf06 100644
--- a/WebKit/qt/declarative/declarative.pro
+++ b/WebKit/qt/declarative/declarative.pro
@@ -30,6 +30,7 @@ symbian: {
TARGET.EPOCALLOWDLLDATA=1
TARGET.CAPABILITY = All -Tcb
load(armcc_warnings)
+ TARGET = $$TARGET$${QT_LIBINFIX}
}
include(../../../WebKit.pri)
diff --git a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
index 76fdba3..3d03157 100644
--- a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -37,6 +37,7 @@
#include <qsslerror.h>
#endif
#include "../util.h"
+#include "../WebCoreSupport/DumpRenderTreeSupportQt.h"
struct CustomType {
QString string;
@@ -570,9 +571,11 @@ public slots:
void cleanup();
private slots:
- void getSetStaticProperty();
void getSetDynamicProperty();
+ void getSetDynamicProperty_data();
void getSetChildren();
+ void getSetChildren_data();
+ void getSetStaticProperty();
void callQtInvokable();
void connectAndDisconnect();
void classEnums();
@@ -667,6 +670,10 @@ private:
evalJS("delete retvalue; delete typevalue");
return ret;
}
+ void garbageCollectJS()
+ {
+ DumpRenderTreeSupportQt::garbageCollectorCollect();
+ }
QObject* firstChildByClassName(QObject* parent, const char* className) {
const QObjectList & children = parent->children();
foreach (QObject* child, children) {
@@ -943,6 +950,8 @@ void tst_QWebFrame::getSetStaticProperty()
void tst_QWebFrame::getSetDynamicProperty()
{
+ QFETCH(bool, garbageCollect);
+
// initially the object does not have the property
// In WebKit, RuntimeObjects do not inherit Object, so don't have hasOwnProperty
@@ -954,11 +963,34 @@ void tst_QWebFrame::getSetDynamicProperty()
//QCOMPARE(evalJS("myObject.hasOwnProperty('dynamicProperty')"), sTrue);
QCOMPARE(evalJS("typeof myObject.dynamicProperty != 'undefined'"), sTrue);
QCOMPARE(evalJS("myObject.dynamicProperty == 123"), sTrue);
+ if( garbageCollect ) {
+ garbageCollectJS();
+ QCOMPARE(evalJS("typeof myObject.dynamicProperty != 'undefined'"), sTrue);
+ }
// property change in script should be reflected in C++
QCOMPARE(evalJS("myObject.dynamicProperty = 'foo';"
"myObject.dynamicProperty"), QLatin1String("foo"));
QCOMPARE(m_myObject->property("dynamicProperty").toString(), QLatin1String("foo"));
+ if( garbageCollect ) {
+ garbageCollectJS();
+ QCOMPARE(m_myObject->property("dynamicProperty").toString(), QLatin1String("foo"));
+ }
+
+ // add a dynamic property in C++ to another QObject
+ QObject* propertyObject = new QObject(m_myObject);
+ QCOMPARE(m_myObject->setProperty("dynamicObjectProperty", qVariantFromValue(propertyObject)), false);
+ QCOMPARE(evalJS("typeof myObject.dynamicObjectProperty != 'undefined'"), sTrue);
+ evalJS("myObject.dynamicObjectProperty.jsProperty = 123");
+ QCOMPARE(evalJS("myObject.dynamicObjectProperty.jsProperty == 123"), sTrue);
+ if( garbageCollect ) {
+ garbageCollectJS();
+ QCOMPARE(evalJS("typeof myObject.dynamicObjectProperty != 'undefined'"), sTrue);
+ QCOMPARE(evalJS("myObject.dynamicObjectProperty.jsProperty == 123"), sTrue);
+ }
+ QCOMPARE(m_myObject->setProperty("dynamicObjectProperty", QVariant()), false);
+ delete propertyObject;
+ QCOMPARE(evalJS("typeof myObject.dynamicObjectProperty == 'undefined'"), sTrue);
// delete the property (XFAIL - can't delete properties)
QEXPECT_FAIL("", "can't delete properties", Continue);
@@ -969,10 +1001,21 @@ void tst_QWebFrame::getSetDynamicProperty()
// QCOMPARE(evalJS("myObject.hasOwnProperty('dynamicProperty')"), sFalse);
QCOMPARE(evalJS("typeof myObject.dynamicProperty"), sUndefined);
*/
+
+ evalJS("myObject.dynamicProperty = undefined");
+}
+
+void tst_QWebFrame::getSetDynamicProperty_data()
+{
+ QTest::addColumn<bool>("garbageCollect");
+ QTest::newRow("with garbageCollect") << true;
+ QTest::newRow("without garbageCollect") << false;
}
void tst_QWebFrame::getSetChildren()
{
+ QFETCH(bool, garbageCollect);
+
// initially the object does not have the child
// (again, no hasOwnProperty)
@@ -984,12 +1027,27 @@ void tst_QWebFrame::getSetChildren()
child->setObjectName("child");
// QCOMPARE(evalJS("myObject.hasOwnProperty('child')"), sTrue);
QCOMPARE(evalJS("typeof myObject.child != 'undefined'"), sTrue);
+ evalJS("myObject.child.jsProperty = 123");
+ QCOMPARE(evalJS("myObject.child.jsProperty == 123"), sTrue);
+
+ if( garbageCollect ) {
+ garbageCollectJS();
+ QCOMPARE(evalJS("typeof myObject.child != 'undefined'"), sTrue);
+ QCOMPARE(evalJS("myObject.child.jsProperty == 123"), sTrue);
+ }
// add a grandchild
MyQObject* grandChild = new MyQObject(child);
grandChild->setObjectName("grandChild");
// QCOMPARE(evalJS("myObject.child.hasOwnProperty('grandChild')"), sTrue);
QCOMPARE(evalJS("typeof myObject.child.grandChild != 'undefined'"), sTrue);
+ evalJS("myObject.child.grandChild.jsProperty = 123");
+ evalJS("myObject.child.grandChild.jsProperty = 123");
+ if( garbageCollect ) {
+ garbageCollectJS();
+ QCOMPARE(evalJS("typeof myObject.child.grandChild != 'undefined'"), sTrue);
+ QCOMPARE(evalJS("myObject.child.grandChild.jsProperty == 123"), sTrue);
+ }
// delete grandchild
delete grandChild;
@@ -1000,6 +1058,18 @@ void tst_QWebFrame::getSetChildren()
delete child;
// QCOMPARE(evalJS("myObject.hasOwnProperty('child')"), sFalse);
QCOMPARE(evalJS("typeof myObject.child == 'undefined'"), sTrue);
+ if( garbageCollect ) {
+ garbageCollectJS();
+ QCOMPARE(evalJS("typeof myObject.child == 'undefined'"), sTrue);
+ }
+}
+
+
+void tst_QWebFrame::getSetChildren_data()
+{
+ QTest::addColumn<bool>("garbageCollect");
+ QTest::newRow("with garbageCollect") << true;
+ QTest::newRow("without garbageCollect") << false;
}
Q_DECLARE_METATYPE(QVector<int>)
@@ -1666,7 +1736,7 @@ void tst_QWebFrame::connectAndDisconnect()
m_myObject->emitMySignal();
QCOMPARE(m_myObject->qtFunctionInvoked(), 20);
evalJS("myObject = null");
- evalJS("gc()");
+ garbageCollectJS();
m_myObject->resetQtFunctionInvoked();
m_myObject->emitMySignal();
QCOMPARE(m_myObject->qtFunctionInvoked(), 20);
diff --git a/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
index 5e6f4e6..70466c7 100644
--- a/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
+++ b/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
@@ -234,6 +234,9 @@ private:
void tst_QWebPage::infiniteLoopJS()
{
+#ifdef Q_WS_MAEMO_5
+ QSKIP("Test never terminates on Maemo 5 : https://bugs.webkit.org/show_bug.cgi?id=38538", SkipAll);
+#endif
JSTestPage* newPage = new JSTestPage(m_view);
m_view->setPage(newPage);
m_view->setHtml(QString("<html><body>test</body></html>"), QUrl());
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index d943cc6..e1b7248 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,3 +1,116 @@
+2010-07-12 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Alice Liu.
+
+ <rdar://problem/8113038> WebKit1 and WebKit2 should build as a single DLL
+ https://bugs.webkit.org/show_bug.cgi?id=40921
+
+ Pre-WebKit2 WebKit now builds into a static library named WebKitLib.lib.
+ WebKit.dll now links in WebCore.lib, WebKitLib.lib and WebKit2 code.
+
+ This is a first step. We'll likely want to migrate the remainder of
+ the non-deprecated WebKit code (strings, DLLMain, resources) into WebKit2.
+
+ * WebKit.vcproj/WebKit.def: Removed.
+ * WebKit.vcproj/WebKit.make: Don't fail if WebKit doesn't produce a DLL.
+ * WebKit.vcproj/WebKit.vcproj: Build WebKit as a static lib.
+ Renamed project name to WebKitLib to avoid confusion and naming conflicts.
+ Generate intermediate pdb file for debuggability of static lib.
+ Removed DLL-related options.
+ * WebKit.vcproj/deleteButton.png: Removed.
+ * WebKit.vcproj/deleteButtonPressed.png: Removed.
+ * WebKit.vcproj/fsVideoAudioVolumeHigh.png: Removed.
+ * WebKit.vcproj/fsVideoAudioVolumeLow.png: Removed.
+ * WebKit.vcproj/fsVideoExitFullscreen.png: Removed.
+ * WebKit.vcproj/fsVideoPause.png: Removed.
+ * WebKit.vcproj/fsVideoPlay.png: Removed.
+ * WebKit.vcproj/missingImage.png: Removed.
+ * WebKit.vcproj/nullplugin.png: Removed.
+ * WebKit.vcproj/panEastCursor.png: Removed.
+ * WebKit.vcproj/panIcon.png: Removed.
+ * WebKit.vcproj/panNorthCursor.png: Removed.
+ * WebKit.vcproj/panNorthEastCursor.png: Removed.
+ * WebKit.vcproj/panNorthWestCursor.png: Removed.
+ * WebKit.vcproj/panSouthCursor.png: Removed.
+ * WebKit.vcproj/panSouthEastCursor.png: Removed.
+ * WebKit.vcproj/panSouthWestCursor.png: Removed.
+ * WebKit.vcproj/panWestCursor.png: Removed.
+ * WebKit.vcproj/searchCancel.png: Removed.
+ * WebKit.vcproj/searchCancelPressed.png: Removed.
+ * WebKit.vcproj/searchMagnifier.png: Removed.
+ * WebKit.vcproj/searchMagnifierResults.png: Removed.
+ * WebKit.vcproj/textAreaResizeCorner.png: Removed.
+ * WebKit.vcproj/verticalTextCursor.png: Removed.
+ * WebKit.vcproj/zoomInCursor.png: Removed.
+ * WebKit.vcproj/zoomOutCursor.png: Removed.
+
+2010-07-08 Aaron Boodman <aa@chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Add the ability for user scripts and user styles to affect just the top frame.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41529
+
+ * WebView.cpp:
+ (WebView::addUserScriptToGroup):
+ (WebView::addUserStyleSheetToGroup):
+
+2010-07-08 Adele Peterson <adele@apple.com>
+
+ Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=41721
+ <rdar://problem/8158561> Missing plug-in indicator should have a pressed state
+
+ Implement shouldMissingPluginMessageBeButton.
+
+ * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::shouldMissingPluginMessageBeButton):
+ * WebCoreSupport/WebChromeClient.h:
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Rename TestNetscapePlugin.subproj and move platform specific files to subdirectories
+ https://bugs.webkit.org/show_bug.cgi?id=41781
+
+ * WebKit.vcproj/WebKit.sln:
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
+ Add basic piping for BackForwardControllerClient.
+
+ * WebView.cpp:
+ (WebView::initWithFrame):
+
+2010-07-07 Adam Roben <aroben@apple.com>
+
+ Windows build fix
+
+ * Interfaces/WebKit.idl: Touched to force a build.
+
+2010-07-06 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Expose URL matching from WebUserContentURLPattern
+ https://bugs.webkit.org/show_bug.cgi?id=41726
+ <rdar://problem/7910144>
+
+ We previously had a way to construct WebUserContentURLPattern
+ instances via WebKit, but no way for callers to perform matching.
+ This patch adds the matchesURL functionality to allow for this.
+
+ * Interfaces/IWebUserContentURLPattern.idl: Added matchesURL.
+ * Interfaces/IWebView.idl: Touch to force a build.
+ * WebUserContentURLPattern.cpp:
+ (WebUserContentURLPattern::matchesURL): Added. Calls through to WebCore::UserContentURLPattern::matches.
+ * WebUserContentURLPattern.h: Added matchesURL.
+
2010-07-03 Jon Honeycutt <jhoneycutt@apple.com>
The missing plug-in indicator should be clickable
diff --git a/WebKit/win/Interfaces/IWebUserContentURLPattern.idl b/WebKit/win/Interfaces/IWebUserContentURLPattern.idl
index b261084..0d4b133 100644
--- a/WebKit/win/Interfaces/IWebUserContentURLPattern.idl
+++ b/WebKit/win/Interfaces/IWebUserContentURLPattern.idl
@@ -40,4 +40,5 @@ interface IWebUserContentURLPattern : IUnknown
HRESULT scheme([out, retval] BSTR*);
HRESULT host([out, retval] BSTR*);
HRESULT matchesSubdomains([out, retval] BOOL* matches);
+ HRESULT matchesURL([in] BSTR url, [out, retval] BOOL* matches);
}
diff --git a/WebKit/win/Interfaces/IWebView.idl b/WebKit/win/Interfaces/IWebView.idl
index bec4df5..e3ec98a 100644
--- a/WebKit/win/Interfaces/IWebView.idl
+++ b/WebKit/win/Interfaces/IWebView.idl
@@ -1216,3 +1216,6 @@ interface IWebViewEditingActions : IUnknown
*/
HRESULT stopSpeaking([in] IUnknown* sender);
}
+
+
+
diff --git a/WebKit/win/Interfaces/WebKit.idl b/WebKit/win/Interfaces/WebKit.idl
index 8938501..ce2f213 100644
--- a/WebKit/win/Interfaces/WebKit.idl
+++ b/WebKit/win/Interfaces/WebKit.idl
@@ -300,3 +300,4 @@ library WebKit
[default] interface IWebUserContentURLPattern;
}
}
+
diff --git a/WebKit/win/WebCoreSupport/WebChromeClient.cpp b/WebKit/win/WebCoreSupport/WebChromeClient.cpp
index d45e10c..42e5cc4 100644
--- a/WebKit/win/WebCoreSupport/WebChromeClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebChromeClient.cpp
@@ -535,6 +535,18 @@ void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& result, unsig
uiDelegate->mouseDidMoveOverElement(m_webView, element.get(), modifierFlags);
}
+bool WebChromeClient::shouldMissingPluginMessageBeButton() const
+{
+ COMPtr<IWebUIDelegate> uiDelegate;
+ if (FAILED(m_webView->uiDelegate(&uiDelegate)))
+ return false;
+
+ // If the UI delegate implements IWebUIDelegatePrivate3,
+ // which contains didPressMissingPluginButton, then the message should be a button.
+ COMPtr<IWebUIDelegatePrivate3> uiDelegatePrivate3(Query, uiDelegate);
+ return uiDelegatePrivate3;
+}
+
void WebChromeClient::missingPluginButtonClicked(Element* element) const
{
COMPtr<IWebUIDelegate> uiDelegate;
diff --git a/WebKit/win/WebCoreSupport/WebChromeClient.h b/WebKit/win/WebCoreSupport/WebChromeClient.h
index c8a9451..c890af0 100644
--- a/WebKit/win/WebCoreSupport/WebChromeClient.h
+++ b/WebKit/win/WebCoreSupport/WebChromeClient.h
@@ -105,6 +105,7 @@ public:
virtual void scrollbarsModeDidChange() const { }
virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
+ virtual bool shouldMissingPluginMessageBeButton() const;
virtual void missingPluginButtonClicked(WebCore::Element*) const;
virtual void setToolTip(const WebCore::String&, WebCore::TextDirection);
diff --git a/WebKit/win/WebKit.vcproj/WebKit.def b/WebKit/win/WebKit.vcproj/WebKit.def
deleted file mode 100644
index 8d091ec..0000000
--- a/WebKit/win/WebKit.vcproj/WebKit.def
+++ /dev/null
@@ -1,136 +0,0 @@
-LIBRARY "WebKit"
-
-EXPORTS
- DllGetClassObject PRIVATE
- DllCanUnloadNow PRIVATE
- DllRegisterServer PRIVATE
- DllUnregisterServer PRIVATE
- RunAsLocalServer PRIVATE
- LocalServerDidDie PRIVATE
- setUseOpenSourceWebKit
- shutDownWebKit
- progIDForClass
- WebLocalizedStringUTF8
- WebLocalizedLPCTSTRUTF8
- WebDrawText
- FontMetrics
- TextFloatWidth
- CenterTruncateStringToWidth
- RightTruncateStringToWidth
- WebKitSetShouldUseFontSmoothing
- WebKitShouldUseFontSmoothing
- WebKitCreateInstance
-
- ; These functions are deprecated
- WebLocalizedString
- WebLocalizedLPCTSTR
- SetWebLocalizedStringMainBundle
-
- ; Deprecated re-exports from JavaScriptCore
- JSCheckScriptSyntax
- JSClassCreate
- JSClassRelease
- JSClassRetain
- JSContextGetGlobalObject
- JSContextGetGroup
- JSContextGroupCreate
- JSContextGroupRelease
- JSContextGroupRetain
- JSEvaluateScript
- JSGarbageCollect
- JSGlobalContextCreate
- JSGlobalContextCreateInGroup
- JSGlobalContextRelease
- JSGlobalContextRetain
- JSObjectCallAsConstructor
- JSObjectCallAsFunction
- JSObjectCopyPropertyNames
- JSObjectDeleteProperty
- JSObjectGetPrivate
- JSObjectGetProperty
- JSObjectGetPropertyAtIndex
- JSObjectGetPrototype
- JSObjectHasProperty
- JSObjectIsConstructor
- JSObjectIsFunction
- JSObjectMake
- JSObjectMakeArray
- JSObjectMakeConstructor
- JSObjectMakeDate
- JSObjectMakeError
- JSObjectMakeFunction
- JSObjectMakeFunctionWithCallback
- JSObjectMakeRegExp
- JSObjectSetPrivate
- JSObjectSetProperty
- JSObjectSetPropertyAtIndex
- JSObjectSetPrototype
- JSPropertyNameAccumulatorAddName
- JSPropertyNameArrayGetCount
- JSPropertyNameArrayGetNameAtIndex
- JSPropertyNameArrayRelease
- JSPropertyNameArrayRetain
- JSStringCopyBSTR
- JSStringCopyCFString
- JSStringCreateWithBSTR
- JSStringCreateWithCFString
- JSStringCreateWithCharacters
- JSStringCreateWithUTF8CString
- JSStringGetCharactersPtr
- JSStringGetLength
- JSStringGetMaximumUTF8CStringSize
- JSStringGetUTF8CString
- JSStringIsEqual
- JSStringIsEqualToUTF8CString
- JSStringRelease
- JSStringRetain
- JSValueGetType
- JSValueIsBoolean
- JSValueIsEqual
- JSValueIsInstanceOfConstructor
- JSValueIsNull
- JSValueIsNumber
- JSValueIsObject
- JSValueIsObjectOfClass
- JSValueIsStrictEqual
- JSValueIsString
- JSValueIsUndefined
- JSValueMakeBoolean
- JSValueMakeNull
- JSValueMakeNumber
- JSValueMakeString
- JSValueMakeUndefined
- JSValueProtect
- JSValueToBoolean
- JSValueToNumber
- JSValueToObject
- JSValueToStringCopy
- JSValueUnprotect
- ?fastMalloc@WTF@@YAPAXI@Z
- ?fastZeroedMalloc@WTF@@YAPAXI@Z
- ?fastFree@WTF@@YAXPAX@Z
- ?fastCalloc@WTF@@YAPAXII@Z
- ??0Mutex@WTF@@QAE@XZ
- ??0ThreadCondition@WTF@@QAE@XZ
- ??1Mutex@WTF@@QAE@XZ
- ??1ThreadCondition@WTF@@QAE@XZ
- ?broadcast@ThreadCondition@WTF@@QAEXXZ
- ?callOnMainThread@WTF@@YAXP6AXPAX@Z0@Z
- ?createThread@WTF@@YAIP6APAXPAX@Z0PBD@Z
- ?currentThread@WTF@@YAIXZ
- ?detachThread@WTF@@YAXI@Z
- ?initializeMainThread@WTF@@YAXXZ
- ?initializeThreading@WTF@@YAXXZ
- ?isMainThread@WTF@@YA_NXZ
- ?lock@Mutex@WTF@@QAEXXZ
- ?lockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
- ?signal@ThreadCondition@WTF@@QAEXXZ
- ?timedWait@ThreadCondition@WTF@@QAE_NAAVMutex@2@N@Z
- ?tlsKeyCount@WTF@@YAAAJXZ
- ?tlsKeys@WTF@@YAPAKXZ
- ?tryLock@Mutex@WTF@@QAE_NXZ
- ?unlock@Mutex@WTF@@QAEXXZ
- ?unlockAtomicallyInitializedStaticMutex@WTF@@YAXXZ
- ?wait@ThreadCondition@WTF@@QAEXAAVMutex@2@@Z
- ?waitForThreadCompletion@WTF@@YAHIPAPAX@Z
- ?createThread@WTF@@YAIP6APAXPAX@Z0@Z
diff --git a/WebKit/win/WebKit.vcproj/WebKit.make b/WebKit/win/WebKit.vcproj/WebKit.make
index 6c2ce85..eda85bd 100755
--- a/WebKit/win/WebKit.vcproj/WebKit.make
+++ b/WebKit/win/WebKit.vcproj/WebKit.make
@@ -11,7 +11,7 @@ install:
devenv "WebKit.submit.sln" /rebuild $(BUILDSTYLE)
-xcopy "$(OBJROOT)\bin\*.exe" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
xcopy "$(OBJROOT)\bin\*.pdb" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
- xcopy "$(OBJROOT)\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
+ -xcopy "$(OBJROOT)\bin\*.dll" "$(DSTROOT)\AppleInternal\bin\" /e/v/i/h/y
xcopy "$(OBJROOT)\include\*" "$(DSTROOT)\AppleInternal\include\" /e/v/i/h/y
xcopy "$(OBJROOT)\lib\*" "$(DSTROOT)\AppleInternal\lib\" /e/v/i/h/y
xcopy "$(OBJROOT)\bin\WebKit.resources\*" "$(DSTROOT)\AppleInternal\bin\WebKit.resources" /e/v/i/h/y
diff --git a/WebKit/win/WebKit.vcproj/WebKit.sln b/WebKit/win/WebKit.vcproj/WebKit.sln
index c205704..38f4253 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.sln
+++ b/WebKit/win/WebKit.vcproj/WebKit.sln
@@ -26,7 +26,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DumpRenderTree", "..\..\..\
{59CC0547-70AC-499C-9B19-EC01C6F61137} = {59CC0547-70AC-499C-9B19-EC01C6F61137}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestNetscapePlugin", "..\..\..\WebKitTools\DumpRenderTree\win\TestNetscapePlugin\TestNetscapePlugin.vcproj", "{C0737398-3565-439E-A2B8-AB2BE4D5430C}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestNetscapePlugin", "..\..\..\WebKitTools\DumpRenderTree\TestNetscapePlugin\win\TestNetscapePlugin.vcproj", "{C0737398-3565-439E-A2B8-AB2BE4D5430C}"
ProjectSection(ProjectDependencies) = postProject
{114FCA11-216B-4C8C-957E-30A75AE80443} = {114FCA11-216B-4C8C-957E-30A75AE80443}
EndProjectSection
diff --git a/WebKit/win/WebKit.vcproj/WebKit.vcproj b/WebKit/win/WebKit.vcproj/WebKit.vcproj
index 76b5e7b..7316805 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.vcproj
+++ b/WebKit/win/WebKit.vcproj/WebKit.vcproj
@@ -2,7 +2,7 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
- Name="WebKit"
+ Name="WebKitLib"
ProjectGUID="{0662A8A9-82A3-4638-97D8-EC425D8D87C9}"
RootNamespace="WebKit"
Keyword="Win32Proj"
@@ -17,7 +17,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- ConfigurationType="2"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
CharacterSet="1"
>
@@ -43,6 +44,7 @@
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
DisableSpecificWarnings="4819"
ForcedIncludeFiles="WebKitPrefix.h"
/>
@@ -58,20 +60,12 @@
CommandLine=""
/>
<Tool
- Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.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 icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitDLLConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib msimg32.lib QTMovieWin$(WebKitConfigSuffix).lib crypt32.lib iphlpapi.lib winmm.lib rpcrt4.lib comsuppw.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
- ModuleDefinitionFile="WebKit$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;QTMovieWin$(WebKitConfigSuffix).dll;iphlpapi.dll;rpcrt4.dll"
+ Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
- Name="VCManifestTool"
- />
- <Tool
Name="VCXDCMakeTool"
/>
<Tool
@@ -81,19 +75,14 @@
Name="VCFxCopTool"
/>
<Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\$(ProjectName).resources\*&quot; &quot;$(OutDir)\$(ProjectName).resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\WebKit.resources\*&quot; &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release|Win32"
- ConfigurationType="2"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
@@ -120,6 +109,7 @@
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
DisableSpecificWarnings="4819"
ForcedIncludeFiles="WebKitPrefix.h"
/>
@@ -135,20 +125,12 @@
CommandLine=""
/>
<Tool
- Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.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 icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitDLLConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib msimg32.lib QTMovieWin$(WebKitConfigSuffix).lib crypt32.lib iphlpapi.lib winmm.lib rpcrt4.lib comsuppw.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
- ModuleDefinitionFile="WebKit$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;QTMovieWin$(WebKitConfigSuffix).dll;iphlpapi.dll;rpcrt4.dll"
+ Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
- Name="VCManifestTool"
- />
- <Tool
Name="VCXDCMakeTool"
/>
<Tool
@@ -158,19 +140,14 @@
Name="VCFxCopTool"
/>
<Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\$(ProjectName).resources\*&quot; &quot;$(OutDir)\$(ProjectName).resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\WebKit.resources\*&quot; &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug_Internal|Win32"
- ConfigurationType="2"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops"
CharacterSet="1"
>
@@ -196,6 +173,7 @@
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
Detect64BitPortabilityProblems="false"
DisableSpecificWarnings="4819"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -212,20 +190,12 @@
CommandLine=""
/>
<Tool
- Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.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 icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitDLLConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib msimg32.lib QTMovieWin$(WebKitConfigSuffix).lib crypt32.lib iphlpapi.lib winmm.lib rpcrt4.lib comsuppw.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
- ModuleDefinitionFile="WebKit$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;QTMovieWin$(WebKitConfigSuffix).dll;iphlpapi.dll;rpcrt4.dll"
+ Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
- Name="VCManifestTool"
- />
- <Tool
Name="VCXDCMakeTool"
/>
<Tool
@@ -235,19 +205,14 @@
Name="VCFxCopTool"
/>
<Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\$(ProjectName).resources\*&quot; &quot;$(OutDir)\$(ProjectName).resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\WebKit.resources\*&quot; &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug_Cairo|Win32"
- ConfigurationType="2"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\WinCairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\cURL.vsprops"
CharacterSet="1"
>
@@ -273,6 +238,7 @@
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
DisableSpecificWarnings="4819"
ForcedIncludeFiles="WebKitPrefix.h"
/>
@@ -288,21 +254,12 @@
CommandLine=""
/>
<Tool
- Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.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 icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CFLite_Debug.lib JavaScriptCore$(WebKitConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib msimg32.lib crypt32.lib iphlpapi.lib winmm.lib rpcrt4.lib comsuppw.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories=""
- ModuleDefinitionFile="WebKit_Cairo$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;iphlpapi.dll;rpcrt4.dll"
+ Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
- Name="VCManifestTool"
- VerboseOutput="false"
- />
- <Tool
Name="VCXDCMakeTool"
/>
<Tool
@@ -312,21 +269,15 @@
Name="VCFxCopTool"
/>
<Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\$(ProjectName).resources\*&quot; &quot;$(OutDir)\$(ProjectName).resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\WebKit.resources\*&quot; &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Release_Cairo|Win32"
- OutputDirectory="$(WebKitOutputDir)\bin"
+ OutputDirectory="$(WebKitOutputDir)\lib"
IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="2"
+ ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;$(WebKitLibrariesDir)\tools\vsprops\WinCairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\cURL.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
@@ -353,6 +304,7 @@
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
DisableSpecificWarnings="4819"
ForcedIncludeFiles="WebKitPrefix.h"
/>
@@ -368,20 +320,12 @@
CommandLine=""
/>
<Tool
- Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.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 icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CFLite.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib msimg32.lib crypt32.lib iphlpapi.lib winmm.lib rpcrt4.lib comsuppw.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories=""
- ModuleDefinitionFile="WebKit_Cairo$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;iphlpapi.dll;rpcrt4.dll"
+ Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
- Name="VCManifestTool"
- />
- <Tool
Name="VCXDCMakeTool"
/>
<Tool
@@ -391,19 +335,14 @@
Name="VCFxCopTool"
/>
<Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\$(ProjectName).resources\*&quot; &quot;$(OutDir)\$(ProjectName).resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\WebKit.resources\*&quot; &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
Name="Debug_All|Win32"
- ConfigurationType="2"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_all.vsprops"
CharacterSet="1"
>
@@ -429,6 +368,7 @@
PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
Detect64BitPortabilityProblems="false"
DisableSpecificWarnings="4819"
ForcedIncludeFiles="WebKitPrefix.h"
@@ -445,20 +385,12 @@
CommandLine=""
/>
<Tool
- Name="VCLinkerTool"
- AdditionalDependencies="delayimp.lib kernel32.lib user32.lib gdi32.lib comdlg32.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 icuin$(LibraryConfigSuffix).lib icuuc$(LibraryConfigSuffix).lib SQLite3$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib JavaScriptCore$(WebKitDLLConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebCore$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib msimg32.lib QTMovieWin$(WebKitConfigSuffix).lib crypt32.lib iphlpapi.lib winmm.lib rpcrt4.lib comsuppw.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitDLLConfigSuffix).dll"
- AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
- ModuleDefinitionFile="WebKit$(WebKitDLLConfigSuffix).def"
- DelayLoadDLLs="comdlg32.dll;usp10.dll;comctl32.dll;version.dll;libxslt$(LibraryConfigSuffix).dll;SQLite3$(LibraryConfigSuffix).dll;msimg32.dll;QTMovieWin$(WebKitConfigSuffix).dll;iphlpapi.dll;rpcrt4.dll"
+ Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
- Name="VCManifestTool"
- />
- <Tool
Name="VCXDCMakeTool"
/>
<Tool
@@ -468,14 +400,8 @@
Name="VCFxCopTool"
/>
<Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\$(ProjectName).resources\*&quot; &quot;$(OutDir)\$(ProjectName).resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebLocalizableStrings.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitGraphics.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebKitCOMAPI.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\WebPreferenceKeysPrivate.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npapi.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npfunctions.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\npruntime_internal.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\include\WebCore\nptypes.h&quot; &quot;$(WebKitOutputDir)\include\WebKit&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\WebKit.resources\*&quot; &quot;$(OutDir)\..\bin\WebKit.resources&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\..\English.lproj\Localizable.strings&quot; &quot;$(OutDir)\..\bin\WebKit.resources\en.lproj\&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
@@ -1275,122 +1201,6 @@
</File>
</Filter>
<Filter
- Name="Resources"
- >
- <File
- RelativePath=".\fsVideoAudioVolumeHigh.png"
- >
- </File>
- <File
- RelativePath=".\fsVideoAudioVolumeLow.png"
- >
- </File>
- <File
- RelativePath=".\fsVideoExitFullscreen.png"
- >
- </File>
- <File
- RelativePath=".\fsVideoPause.png"
- >
- </File>
- <File
- RelativePath=".\fsVideoPlay.png"
- >
- </File>
- <File
- RelativePath=".\missingImage.png"
- >
- </File>
- <File
- RelativePath=".\nullplugin.png"
- >
- </File>
- <File
- RelativePath=".\searchCancel.png"
- >
- </File>
- <File
- RelativePath=".\searchCancelPressed.png"
- >
- </File>
- <File
- RelativePath=".\searchMagnifier.png"
- >
- </File>
- <File
- RelativePath=".\searchMagnifierResults.png"
- >
- </File>
- <File
- RelativePath=".\textAreaResizeCorner.png"
- >
- </File>
- <File
- RelativePath=".\verticalTextCursor.png"
- >
- </File>
- <File
- RelativePath=".\WebKit.rc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(WebKitOutputDir)\obj\$(ProjectName)\Interfaces&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(WebKitOutputDir)\obj\$(ProjectName)\Interfaces&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_Internal|Win32"
- >
- <Tool
- Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(WebKitOutputDir)\obj\$(ProjectName)\Interfaces&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_Cairo|Win32"
- >
- <Tool
- Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(WebKitOutputDir)\obj\$(ProjectName)\Interfaces&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release_Cairo|Win32"
- >
- <Tool
- Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(WebKitOutputDir)\obj\$(ProjectName)\Interfaces&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_All|Win32"
- >
- <Tool
- Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(WebKitOutputDir)\obj\$(ProjectName)\Interfaces&quot;"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\zoomInCursor.png"
- >
- </File>
- <File
- RelativePath=".\zoomOutCursor.png"
- >
- </File>
- </Filter>
- <Filter
Name="API"
>
<File
diff --git a/WebKit/win/WebKit.vcproj/deleteButton.png b/WebKit/win/WebKit.vcproj/deleteButton.png
deleted file mode 100644
index 8f1b881..0000000
--- a/WebKit/win/WebKit.vcproj/deleteButton.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/deleteButtonPressed.png b/WebKit/win/WebKit.vcproj/deleteButtonPressed.png
deleted file mode 100644
index 77d31ca..0000000
--- a/WebKit/win/WebKit.vcproj/deleteButtonPressed.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/fsVideoAudioVolumeHigh.png b/WebKit/win/WebKit.vcproj/fsVideoAudioVolumeHigh.png
deleted file mode 100755
index d04df37..0000000
--- a/WebKit/win/WebKit.vcproj/fsVideoAudioVolumeHigh.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/fsVideoAudioVolumeLow.png b/WebKit/win/WebKit.vcproj/fsVideoAudioVolumeLow.png
deleted file mode 100755
index e824a21..0000000
--- a/WebKit/win/WebKit.vcproj/fsVideoAudioVolumeLow.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/fsVideoExitFullscreen.png b/WebKit/win/WebKit.vcproj/fsVideoExitFullscreen.png
deleted file mode 100755
index 01ce692..0000000
--- a/WebKit/win/WebKit.vcproj/fsVideoExitFullscreen.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/fsVideoPause.png b/WebKit/win/WebKit.vcproj/fsVideoPause.png
deleted file mode 100755
index b98fb36..0000000
--- a/WebKit/win/WebKit.vcproj/fsVideoPause.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/fsVideoPlay.png b/WebKit/win/WebKit.vcproj/fsVideoPlay.png
deleted file mode 100755
index 035aeb2..0000000
--- a/WebKit/win/WebKit.vcproj/fsVideoPlay.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/missingImage.png b/WebKit/win/WebKit.vcproj/missingImage.png
deleted file mode 100644
index f49a98d..0000000
--- a/WebKit/win/WebKit.vcproj/missingImage.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/nullplugin.png b/WebKit/win/WebKit.vcproj/nullplugin.png
deleted file mode 100644
index a4195f6..0000000
--- a/WebKit/win/WebKit.vcproj/nullplugin.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panEastCursor.png b/WebKit/win/WebKit.vcproj/panEastCursor.png
deleted file mode 100755
index 9c1592e..0000000
--- a/WebKit/win/WebKit.vcproj/panEastCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panIcon.png b/WebKit/win/WebKit.vcproj/panIcon.png
deleted file mode 100644
index 4ca8d70..0000000
--- a/WebKit/win/WebKit.vcproj/panIcon.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panNorthCursor.png b/WebKit/win/WebKit.vcproj/panNorthCursor.png
deleted file mode 100755
index 0d020db..0000000
--- a/WebKit/win/WebKit.vcproj/panNorthCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panNorthEastCursor.png b/WebKit/win/WebKit.vcproj/panNorthEastCursor.png
deleted file mode 100755
index 0e89639..0000000
--- a/WebKit/win/WebKit.vcproj/panNorthEastCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panNorthWestCursor.png b/WebKit/win/WebKit.vcproj/panNorthWestCursor.png
deleted file mode 100755
index 6723f61..0000000
--- a/WebKit/win/WebKit.vcproj/panNorthWestCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panSouthCursor.png b/WebKit/win/WebKit.vcproj/panSouthCursor.png
deleted file mode 100755
index 60cf722..0000000
--- a/WebKit/win/WebKit.vcproj/panSouthCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panSouthEastCursor.png b/WebKit/win/WebKit.vcproj/panSouthEastCursor.png
deleted file mode 100755
index 415aa63..0000000
--- a/WebKit/win/WebKit.vcproj/panSouthEastCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panSouthWestCursor.png b/WebKit/win/WebKit.vcproj/panSouthWestCursor.png
deleted file mode 100755
index 8dc5cdc..0000000
--- a/WebKit/win/WebKit.vcproj/panSouthWestCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/panWestCursor.png b/WebKit/win/WebKit.vcproj/panWestCursor.png
deleted file mode 100755
index 544439a..0000000
--- a/WebKit/win/WebKit.vcproj/panWestCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchCancel.png b/WebKit/win/WebKit.vcproj/searchCancel.png
deleted file mode 100644
index 49f3f47..0000000
--- a/WebKit/win/WebKit.vcproj/searchCancel.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchCancelPressed.png b/WebKit/win/WebKit.vcproj/searchCancelPressed.png
deleted file mode 100644
index b699d81..0000000
--- a/WebKit/win/WebKit.vcproj/searchCancelPressed.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchMagnifier.png b/WebKit/win/WebKit.vcproj/searchMagnifier.png
deleted file mode 100644
index f9b8cae..0000000
--- a/WebKit/win/WebKit.vcproj/searchMagnifier.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/searchMagnifierResults.png b/WebKit/win/WebKit.vcproj/searchMagnifierResults.png
deleted file mode 100644
index 9aa1b36..0000000
--- a/WebKit/win/WebKit.vcproj/searchMagnifierResults.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/textAreaResizeCorner.png b/WebKit/win/WebKit.vcproj/textAreaResizeCorner.png
deleted file mode 100644
index 023615e..0000000
--- a/WebKit/win/WebKit.vcproj/textAreaResizeCorner.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/verticalTextCursor.png b/WebKit/win/WebKit.vcproj/verticalTextCursor.png
deleted file mode 100644
index 0f2877c..0000000
--- a/WebKit/win/WebKit.vcproj/verticalTextCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/zoomInCursor.png b/WebKit/win/WebKit.vcproj/zoomInCursor.png
deleted file mode 100644
index feec9bc..0000000
--- a/WebKit/win/WebKit.vcproj/zoomInCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebKit.vcproj/zoomOutCursor.png b/WebKit/win/WebKit.vcproj/zoomOutCursor.png
deleted file mode 100644
index f4a954e..0000000
--- a/WebKit/win/WebKit.vcproj/zoomOutCursor.png
+++ /dev/null
Binary files differ
diff --git a/WebKit/win/WebUserContentURLPattern.cpp b/WebKit/win/WebUserContentURLPattern.cpp
index 5312fca..1c8c569 100644
--- a/WebKit/win/WebUserContentURLPattern.cpp
+++ b/WebKit/win/WebUserContentURLPattern.cpp
@@ -23,9 +23,11 @@
*/
#include "config.h"
-#include "WebKitDLL.h"
#include "WebUserContentURLPattern.h"
+#include "MarshallingHelpers.h"
+#include "WebKitDLL.h"
+
#include <WebCore/BString.h>
#include <WebCore/KURL.h>
@@ -118,3 +120,11 @@ HRESULT WebUserContentURLPattern::matchesSubdomains(BOOL* matches)
*matches = m_pattern.matchSubdomains();
return S_OK;
}
+
+HRESULT WebUserContentURLPattern::matchesURL(BSTR url, BOOL* matches)
+{
+ if (!matches)
+ return E_POINTER;
+ *matches = m_pattern.matches(MarshallingHelpers::BSTRToKURL(url));
+ return S_OK;
+}
diff --git a/WebKit/win/WebUserContentURLPattern.h b/WebKit/win/WebUserContentURLPattern.h
index 143f644..e8f6b67 100644
--- a/WebKit/win/WebUserContentURLPattern.h
+++ b/WebKit/win/WebUserContentURLPattern.h
@@ -49,6 +49,7 @@ private:
virtual HRESULT STDMETHODCALLTYPE scheme(BSTR*);
virtual HRESULT STDMETHODCALLTYPE host(BSTR*);
virtual HRESULT STDMETHODCALLTYPE matchesSubdomains(BOOL* matches);
+ virtual HRESULT STDMETHODCALLTYPE matchesURL(BSTR, BOOL*);
ULONG m_refCount;
WebCore::UserContentURLPattern m_pattern;
diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp
index 441f0f2..b5c4fa8 100644
--- a/WebKit/win/WebView.cpp
+++ b/WebKit/win/WebView.cpp
@@ -2570,13 +2570,12 @@ HRESULT STDMETHODCALLTYPE WebView::initWithFrame(
#else
WebGeolocationControllerClient* geolocationControllerClient = 0;
#endif
- DeviceOrientationClient* deviceOrientationClient = 0;
BOOL useHighResolutionTimer;
if (SUCCEEDED(m_preferences->shouldUseHighResolutionTimers(&useHighResolutionTimer)))
Settings::setShouldUseHighResolutionTimers(useHighResolutionTimer);
- m_page = new Page(new WebChromeClient(this), new WebContextMenuClient(this), new WebEditorClient(this), new WebDragClient(this), new WebInspectorClient(this), new WebPluginHalterClient(this), geolocationControllerClient, deviceOrientationClient);
+ m_page = new Page(new WebChromeClient(this), new WebContextMenuClient(this), new WebEditorClient(this), new WebDragClient(this), new WebInspectorClient(this), new WebPluginHalterClient(this), geolocationControllerClient, 0, 0);
BSTR localStoragePath;
if (SUCCEEDED(m_preferences->localStorageDatabasePath(&localStoragePath))) {
@@ -5971,7 +5970,8 @@ HRESULT WebView::addUserScriptToGroup(BSTR groupName, IWebScriptWorld* iWorld, B
pageGroup->addUserScriptToWorld(world->world(), toString(source), toKURL(url),
toStringVector(whitelistCount, whitelist), toStringVector(blacklistCount, blacklist),
- injectionTime == WebInjectAtDocumentStart ? InjectAtDocumentStart : InjectAtDocumentEnd);
+ injectionTime == WebInjectAtDocumentStart ? InjectAtDocumentStart : InjectAtDocumentEnd,
+ InjectInAllFrames);
return S_OK;
}
@@ -5994,7 +5994,8 @@ HRESULT WebView::addUserStyleSheetToGroup(BSTR groupName, IWebScriptWorld* iWorl
return E_FAIL;
pageGroup->addUserStyleSheetToWorld(world->world(), toString(source), toKURL(url),
- toStringVector(whitelistCount, whitelist), toStringVector(blacklistCount, blacklist));
+ toStringVector(whitelistCount, whitelist), toStringVector(blacklistCount, blacklist),
+ InjectInAllFrames);
return S_OK;
}
diff --git a/WebKit/wx/ChangeLog b/WebKit/wx/ChangeLog
index 36c9990..9d89858 100644
--- a/WebKit/wx/ChangeLog
+++ b/WebKit/wx/ChangeLog
@@ -1,3 +1,10 @@
+2010-07-07 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fix after change in Page constructor.
+
+ * WebView.cpp:
+ (wxWebView::Create):
+
2010-06-21 Kevin Ollivier <kevino@theolliviers.com>
Build fix after conversion of WebInterfaceSystem to Obj-C++.
diff --git a/WebKit/wx/WebView.cpp b/WebKit/wx/WebView.cpp
index a2897b5..59fba2f 100644
--- a/WebKit/wx/WebView.cpp
+++ b/WebKit/wx/WebView.cpp
@@ -336,7 +336,7 @@ bool wxWebView::Create(wxWindow* parent, int id, const wxPoint& position,
new WebCore::ContextMenuClientWx(),
editorClient,
new WebCore::DragClientWx(),
- new WebCore::InspectorClientWx(), 0, 0, 0);
+ new WebCore::InspectorClientWx(), 0, 0, 0, 0);
editorClient->setPage(m_impl->page);
m_mainFrame = new wxWebFrame(this);
diff --git a/WebKitLibraries/ChangeLog b/WebKitLibraries/ChangeLog
index 68cd1c4..0939954 100644
--- a/WebKitLibraries/ChangeLog
+++ b/WebKitLibraries/ChangeLog
@@ -1,3 +1,61 @@
+2010-07-12 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Update WebKitSystemInterface.
+
+ * libWebKitSystemInterfaceLeopard.a:
+ * libWebKitSystemInterfaceSnowLeopard.a:
+ * libWebKitSystemInterfaceTiger.a:
+
+2010-07-12 Adam Roben <aroben@apple.com>
+
+ Stop generating stripped symbols for Release builds
+
+ It turns out we can strip the symbols after-the-fact using PDBCopy.
+
+ Fixes <http://webkit.org/b/42085>.
+
+ Reviewed by Steve Falkenburg.
+
+ * win/tools/vsprops/release.vsprops: Removed the StripPrivateSymbols
+ attribute, which caused link.exe to generate a stripped PDB file for
+ each project.
+
+2010-07-08 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Update WebKitSystemInterface.
+
+ * libWebKitSystemInterfaceLeopard.a:
+ * libWebKitSystemInterfaceSnowLeopard.a:
+ * libWebKitSystemInterfaceTiger.a:
+
+2010-07-07 Dumitru Daniliuc <dumi@chromium.org>
+
+ Reviewed by Adam Roben.
+
+ Disable MSVC warning 4288.
+ https://bugs.webkit.org/show_bug.cgi?id=41804
+
+ MSVC has a non-standard extension that allows variables declared
+ in for-loops to remain visible in the same scope even after
+ exiting the for-loop
+ (http://msdn.microsoft.com/en-us/library/bk5hc10s.aspx). The /Ze
+ option (turned on by default) enables all MSVC extensions, and
+ /Zc:forScope- tells the compiler to issue a C4288 warning when the
+ same variable is declared in the for-loop and re-declared later in
+ the same scope.
+
+ There seems to be a bug in VS2005 that erroneously enables
+ /Zc:forScope- even when that option is not specified
+ (http://connect.microsoft.com/VisualStudio/feedback/details/338010/bogus-compiler-warning-c4288). Looks
+ like our build got hit by that bug, so we need to disable warning
+ 4288 to fix it.
+
+ * win/tools/vsprops/common.vsprops:
+
2010-07-01 Simon Fraser <simon.fraser@apple.com>
Reviewed by Sam Weinig.
diff --git a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
index 3b4061c..76c174a 100644
--- a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
+++ b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a
Binary files differ
diff --git a/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a b/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
index 5d3106c..6423601 100644
--- a/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
+++ b/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a
Binary files differ
diff --git a/WebKitLibraries/libWebKitSystemInterfaceTiger.a b/WebKitLibraries/libWebKitSystemInterfaceTiger.a
index a3743e4..abf266d 100644
--- a/WebKitLibraries/libWebKitSystemInterfaceTiger.a
+++ b/WebKitLibraries/libWebKitSystemInterfaceTiger.a
Binary files differ
diff --git a/WebKitLibraries/win/tools/vsprops/common.vsprops b/WebKitLibraries/win/tools/vsprops/common.vsprops
index 28dfb67..b9c710c 100644
--- a/WebKitLibraries/win/tools/vsprops/common.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/common.vsprops
@@ -15,7 +15,7 @@
WarningLevel="4"
WarnAsError="true"
DebugInformationFormat="3"
- DisableSpecificWarnings="4018;4068;4099;4100;4127;4138;4180;4189;4201;4244;4251;4275;4291;4305;4344;4355;4389;4503;4505;4510;4512;4610;4706;4800;4951;4952;4996;6011;6031;6211;6246;6255;6387"
+ DisableSpecificWarnings="4018;4068;4099;4100;4127;4138;4180;4189;4201;4244;4251;4275;4288;4291;4305;4344;4355;4389;4503;4505;4510;4512;4610;4706;4800;4951;4952;4996;6011;6031;6211;6246;6255;6387"
/>
<Tool
Name="VCLibrarianTool"
diff --git a/WebKitLibraries/win/tools/vsprops/release.vsprops b/WebKitLibraries/win/tools/vsprops/release.vsprops
index 109176d..8b38b73 100644
--- a/WebKitLibraries/win/tools/vsprops/release.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/release.vsprops
@@ -13,7 +13,6 @@
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
- StripPrivateSymbols="$(WebKitOutputDir)\public\sym\$(TargetName).pdb"
OptimizeReferences="2"
EnableCOMDATFolding="2"
OptimizeForWindows98="1"
diff --git a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json
index 81e3f91..bda3921 100644
--- a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json
+++ b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json
@@ -21,6 +21,8 @@
{ "name": "apple-windows-2", "platform": "win"},
{ "name": "apple-windows-3", "platform": "win"},
{ "name": "apple-windows-4", "platform": "win"},
+ { "name": "apple-windows-5", "platform": "win"},
+ { "name": "apple-windows-6", "platform": "win"},
{ "name": "gtk-linux-slave-1", "platform": "gtk"},
{ "name": "gtk-linux-slave-2", "platform": "gtk"},
@@ -90,7 +92,7 @@
{
"name": "Windows Release (Tests)", "type": "Test", "builddir": "win-release-tests",
"platform": "win", "configuration": "release", "architectures": ["i386"],
- "slavenames": ["apple-windows-4", "apple-windows-3", "test-slave"]
+ "slavenames": ["apple-windows-4", "apple-windows-3", "apple-windows-5", "apple-windows-6", "test-slave"]
},
{
"name": "Windows Debug (Build)", "type": "Build", "builddir": "win-debug",
@@ -101,7 +103,7 @@
{
"name": "Windows Debug (Tests)", "type": "Test", "builddir": "win-debug-tests",
"platform": "win", "configuration": "debug", "architectures": ["i386"],
- "slavenames": ["apple-windows-4", "apple-windows-3", "test-slave"]
+ "slavenames": ["apple-windows-4", "apple-windows-3", "apple-windows-5", "apple-windows-6", "test-slave"]
},
{
"name": "GTK Linux 32-bit Release", "type": "BuildAndTest", "builddir": "gtk-linux-32-release",
diff --git a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg
index bbc94ec..c36c5c7 100644
--- a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg
+++ b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg
@@ -181,7 +181,7 @@ class RunWebKitTests(shell.Test):
descriptionDone = ["layout-tests"]
command = ["perl", "./WebKitTools/Scripts/run-webkit-tests", "--no-launch-safari", "--no-new-test-results",
"--no-sample-on-timeout", "--results-directory", "layout-test-results", "--use-remote-links-to-tests",
- WithProperties("--%(configuration)s"), "--exit-after-n-failures", "20"]
+ WithProperties("--%(configuration)s"), "--exit-after-n-crashes-or-timeouts", "20"]
def __init__(self, skipBuild=False, *args, **kwargs):
self.skipBuild = skipBuild
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 553962a..b6233c4 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,1324 @@
+2010-07-12 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Remove use of auto_ptr in WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=42134
+
+ Replaced auto_ptr with PassOwnPtr / OwnPtr.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::WKStringToUTF8):
+ (WTR::InjectedBundlePage::dump):
+ (WTR::InjectedBundlePage::addMessageToConsole):
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::WKStringToUTF8):
+ (WTR::TestInvocation::didRecieveMessageFromInjectedBundle):
+
+2010-07-12 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Need support for a WebKit2-specific Skipped list (and initially add accessibility tests to it)
+ https://bugs.webkit.org/show_bug.cgi?id=42132
+
+ * Scripts/old-run-webkit-tests: In --webkit-test-runner mode, add mac-wk2 to list of
+ platform directories.
+
+2010-07-12 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Make WebKitTestRunner resize the view specially for the W3C SVG tests.
+ https://bugs.webkit.org/show_bug.cgi?id=42126
+
+ * WebKitTestRunner/PlatformWebView.h:
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::TestInvocation::TestInvocation): Store the path as a C
+ string for later use.
+ (WTR::TestInvocation::~TestInvocation):
+ (WTR::sizeWebViewForCurrentTest): Resize the WebView to the proper
+ size, depending on whether this is a W3C SVG test.
+ (WTR::TestInvocation::invoke): Call the size function.
+ * WebKitTestRunner/TestInvocation.h:
+ * WebKitTestRunner/mac/PlatformWebViewMac.mm:
+ (WTR::PlatformWebView::resizeTo): Implement.
+ * WebKitTestRunner/win/PlatformWebViewWin.cpp:
+ (WTR::PlatformWebView::resizeTo): Placeholder.
+
+2010-07-12 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ Ensure DRT loads GAIL (Gtk+ module), for a11y tests
+ https://bugs.webkit.org/show_bug.cgi?id=38648
+
+ Add the GTK_MODULES envvar (set to "gail") to the clean
+ environment when running DRT for the Gtk+ port
+
+ * Scripts/old-run-webkit-tests:
+
+2010-07-12 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Dirk Schulze.
+
+ [GTK] Support pixel tests
+ https://bugs.webkit.org/show_bug.cgi?id=31518
+
+ Finish support for pixel tests on GTK+.
+
+ * DumpRenderTree/PixelDumpSupport.cpp: Remove unecessary RetainPtr include (only
+ works on CoreFoundation systems) and add missing cstdio include.
+ * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp: Switch to using the MD5 support found
+ in JSC library. MD5.cpp and MD5.h are only available for the Windows build.
+ (computeMD5HashStringForBitmapContext): The number of bytes per row should be the row stride
+ of the image, not the row stride multiplied by the width. Use JSC MD5 implementation to calculate
+ the MD5 hash here. According to glibc manpages, using snprintf to build a string in unsupported
+ by the ANSI standard and this fails on Linux, so unroll the loop here.
+ * DumpRenderTree/cairo/PixelDumpSupportCairo.h: Correct some constructor misbehavior.
+ (BitmapContext::BitmapContext): There is no reason to check the value of the
+ m_context member in the constructor and it certainly should not be freed. Instead
+ just initialize it with the incoming value.
+ * DumpRenderTree/gtk/DumpRenderTree.cpp: Fix the order of includes.
+ (dump): Actually call dumpWebViewAsPixelsAndCompareWithExpected when it is time to
+ dump pixels.
+ * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Added.
+ (createBitmapContextFromWebView):
+ * GNUmakefile.am: Add new files to the build.
+
+2010-07-12 Adam Barth <abarth@webkit.org>
+
+ Unreviewed.
+
+ Remove stray "raise e" that got included in a previous patch. This
+ caused the EWS bots to turn red instead of purple when a patch failed
+ to apply.
+
+ * Scripts/webkitpy/tool/commands/stepsequence.py:
+
+2010-07-12 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r63101.
+ http://trac.webkit.org/changeset/63101
+ https://bugs.webkit.org/show_bug.cgi?id=42103
+
+ Broke one API test (Requested by xan_ on #webkit).
+
+ * Scripts/old-run-webkit-tests:
+
+2010-07-12 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Adam Roben.
+
+ https://bugs.webkit.org/show_bug.cgi?id=13075
+ XMLHttpRequest with failed authentication should set status to 401
+
+ https://bugs.webkit.org/show_bug.cgi?id=6871
+ <rdar://problem/3363403> 401 error page is never shown
+
+ Fix crashes in Windows DumpRenderTree.
+
+ * DumpRenderTree/win/ResourceLoadDelegate.cpp: (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
+ If we return an error, WebKit will call continueWithoutCredentialForAuthenticationChallenge()
+ again on a destroyed sender.
+
+2010-07-12 Adam Roben <aroben@apple.com>
+
+ Windows failure-to-launch fix
+
+ * DumpRenderTree/win/DumpRenderTree.vcproj: Copy CoreVideo.dll and
+ CoreVideo.pdb into WebKitOutputDir in the post-build event, too, like
+ we already do for CoreFoundation, CFNetwork, etc.
+
+2010-07-12 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ Ensure DRT loads GAIL (Gtk+ module), for a11y tests
+ https://bugs.webkit.org/show_bug.cgi?id=38648
+
+ Add the GTK_MODULES envvar (set to "gail") to the clean
+ environment when running DRT for the Gtk+ port
+
+ * Scripts/old-run-webkit-tests:
+
+2010-07-09 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=13075
+ XMLHttpRequest with failed authentication should set status to 401
+
+ https://bugs.webkit.org/show_bug.cgi?id=6871
+ <rdar://problem/3363403> 401 error page is never shown
+
+ * DumpRenderTree/mac/ResourceLoadDelegate.mm:
+ (-[ResourceLoadDelegate webView:resource:didReceiveAuthenticationChallenge:fromDataSource:]):
+ * DumpRenderTree/win/ResourceLoadDelegate.cpp:
+ (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
+ Do respond even if handlesAuthenticationChallenges() is false. Pretend that the user pressed
+ the Cancel button.
+
+2010-07-12 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Add location bar (Ctrl+L) shortcut in QtTestBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=42082
+
+ * QtTestBrowser/main.cpp:
+ (LauncherWindow::createChrome):
+ * QtTestBrowser/mainwindow.cpp:
+ (MainWindow::openLocation):
+ * QtTestBrowser/mainwindow.h:
+
+2010-07-12 Adam Roben <aroben@apple.com>
+
+ Make the Python autoinstaller not use a dead SourceForge server
+
+ Fixes <http://webkit.org/b/42080> webkit-patch is broken due to
+ offline SourceForge server
+
+ Reviewed by Anders Carlsson.
+
+ * Scripts/webkitpy/thirdparty/__init__.py: Use
+ surfnet.dl.sourceforge.net instead of hivelocity.dl.sourceforge.net,
+ which seems to be down.
+
+2010-07-12 Adam Roben <aroben@apple.com>
+
+ Make run-webkit-tests print how many tests timed out when exiting
+ early
+
+ The number of timed-out tests is taken into account when deciding
+ whether to exit early. Leaving it out of the output just makes the
+ script look buggy (because it might say something like "Exiting early
+ after 0 crashes.").
+
+ Fixes <http://webkit.org/b/42077> run-webkit-tests prints confusing
+ messages when exiting early due to crashes and time-outs
+
+ Reviewed by Anders Carlsson.
+
+ * Scripts/old-run-webkit-tests:
+ (stopRunningTestsEarlyIfNeeded): When stopping, print the number of
+ timed-out tests, too.
+
+2010-07-11 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Implement animation-related methods for WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=42053
+
+ Implemented numberOfActiveAnimatiosn and pauseAnimationAtTimeOnElementWithId. Many
+ animation tests were hanging otherwise.
+
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
+ (WTR::LayoutTestController::numberOfActiveAnimations):
+ (WTR::LayoutTestController::pauseAnimationAtTimeOnElementWithId):
+ (WTR::numberOfActiveAnimationsCallback):
+ (WTR::pauseAnimationAtTimeOnElementWithIdCallback):
+ (WTR::LayoutTestController::staticFunctions):
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
+
+2010-07-11 Daniel Bates <dbates@rim.com>
+
+ Reviewed by David Kilzer.
+
+ Enable executable support for svn-apply and svn-unapply
+ https://bugs.webkit.org/show_bug.cgi?id=39409
+
+ Connect up the Git and SVN executable bit support in parseDiff() so that
+ executable bit changes are propagated via the returned diff hash to the
+ patch function in svn-apply and svn-unapply.
+
+ * Scripts/VCSUtils.pm:
+ - Modified parseDiff() to call parseSvnDiffProperties when
+ it finds the start of an SVN property change diff.
+ - Removed FIXME comment above parseSvnDiffProperties() since
+ it is now being used by parseDiff().
+ - Export method scmToggleExecutableBit() now that we added the
+ executableBitDelta hash key. (This should have been exported
+ when we added this function in Bug #38423 <https://bugs.webkit.org/show_bug.cgi?id=38423>).
+ * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
+ - Updated results for:
+ "rename (with executable bit change)"
+ - Test value of executableBitDelta (now that we have support).
+ "SVN: binary file (isBinary true)"
+ - Remove the property change diff from svnConvertedText. We plan
+ to remove svnConvertedText in the future. So, we decided
+ against adding such support to any new code, such as the
+ property parsing routines. Therefore, we do not keep SVN
+ converted text for property change diffs.
+ - Added unit tests:
+ "SVN: file change diff with property change diff"
+ "SVN: file change diff, followed by property change diff on different file"
+ "SVN: property diff, followed by file change diff"
+ "SVN: copied file with property change"
+ "SVN: two consecutive property diffs"
+ "SVN: binary file with executable bit change"
+ "SVN: binary file followed by property change on different file"
+ "SVN: binary file followed by file change on different file"
+ "SVN: file change diff with property change, followed by property change diff"
+ "SVN: file change diff with property change, followed by file change diff"
+
+2010-07-11 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Implement waitUntilDone and notifyDone for WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=42049
+
+ With this fix, most of the DOM tests pass.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::didCreatePage): Track the main page. Not
+ a great way to do it in the future case where we may get multiple
+ pages - we really need a way to send it over from the ui process.
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
+ (WTR::InjectedBundle::page): A way to get the main page.
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::InjectedBundlePage): Initialize m_isLoading to false.
+ (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): Track that we
+ are loading.
+ (WTR::InjectedBundlePage::dump): Factor into a method so this can be
+ called by the layout test controller. Also, cancel any pending watchdogs.
+ (WTR::InjectedBundlePage::didFinishLoadForFrame): Note that we are done loading.
+ (WTR::InjectedBundlePage::didFailLoadWithErrorForFrame): Ditto.
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
+ (WTR::InjectedBundlePage::isLoading): A way to track if we are loading.
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
+ (WTR::LayoutTestController::LayoutTestController): Initialize m_waitToDump
+ to false.
+ (WTR::LayoutTestController::invalidateWaitToDumpWatchdog): Invalidate
+ the watchdog.
+ (WTR::waitUntilDoneWatchdogFired): Static helper for the watchdog timer.
+ (WTR::LayoutTestController::setWaitToDump): Set the flag.
+ (WTR::LayoutTestController::waitToDumpWatchdogTimerFired): Handle the case
+ where waitUntilDone times out.
+ (WTR::LayoutTestController::notifyDone): Dump, if loading is done.
+ (WTR::waitUntilDoneCallback): JS glue for waitUntilDone.
+ (WTR::notifyDoneCallback): JS glue for notifyDone.
+ (WTR::LayoutTestController::staticFunctions): Add waitUntilDone and notifyDone
+ to the layoutController.
+ * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
+ (WTR::LayoutTestController::waitToDump): Inline method to get the wait state.
+
+2010-07-09 Brian Weinstein <bweinstein@apple.com>
+
+ Rubber-stamped by Dan Bernstein.
+
+ Windows testers running Windows 7 were hanging during test_kill_process. Changing the
+ number of attempts from 3 to 10 fixes the problem on the new bots (and doesn't seem to
+ slow down the tests).
+
+ * Scripts/webkitpy/common/system/executive.py:
+
+2010-07-09 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Mac build fix
+ https://bugs.webkit.org/show_bug.cgi?id=41967
+
+ Adding file PluginObjectMac.mm and frameworks Cocoa and QuartzCore.
+
+ * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
+
+2010-07-09 Diego Gonzalez <diegohcg@webkit.org>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] [WebKit2] Add navigation actions to MiniBrowser toolbar
+ https://bugs.webkit.org/show_bug.cgi?id=41966
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+
+2010-07-09 Leon Clarke <leonclarke@google.com>
+
+ Reviewed by Adam Barth.
+
+ add support for link prefetching
+ https://bugs.webkit.org/show_bug.cgi?id=3652
+
+ * Scripts/build-webkit:
+
+2010-07-09 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ r63004 broke some python tests
+ https://bugs.webkit.org/show_bug.cgi?id=42007
+
+ AbstractStep now checks options.no_squash and options.squash, so
+ they needed to have real values. Mock would return an object for those,
+ which would then act as if the values were True.
+
+ * Scripts/webkitpy/tool/commands/commandtest.py:
+ * Scripts/webkitpy/tool/commands/download_unittest.py:
+ * Scripts/webkitpy/tool/commands/stepsequence.py:
+ * Scripts/webkitpy/tool/commands/upload_unittest.py:
+ * Scripts/webkitpy/tool/mocktool.py:
+ * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
+ * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
+ * Scripts/webkitpy/tool/steps/steps_unittest.py:
+ * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
+ * Scripts/webkitpy/tool/steps/validatereviewer_unittest.py:
+
+2010-07-09 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ --squash should go away and become the default
+ https://bugs.webkit.org/show_bug.cgi?id=39624
+
+ If there are local commits and working copy changes, then prompt the user
+ whether to continue. Setting git config webkit-patch.commit_should_always_squash
+ true bypasses the prompt.
+
+ --git-commit=HEAD.. operates on working copy changes only.
+ --git-commit=committish operates on a range of commits as a single commit.
+ e.g. --git-commit=HEAD only operates on the HEAD commit.
+ --git-commit=HEAD~4..HEAD~2 will operate on HEAD~3 and HEAD~2 as a single commit.
+
+ --no-squash and --squash are left in with descriptive error messages if used.
+
+ * Scripts/check-webkit-style:
+ * Scripts/webkitpy/common/checkout/api.py:
+ * Scripts/webkitpy/common/checkout/api_unittest.py:
+ * Scripts/webkitpy/common/checkout/scm.py:
+ * Scripts/webkitpy/common/checkout/scm_unittest.py:
+ * Scripts/webkitpy/common/net/rietveld.py:
+ * Scripts/webkitpy/common/system/user.py:
+ * Scripts/webkitpy/style/optparser.py:
+ * Scripts/webkitpy/style_references.py:
+ * Scripts/webkitpy/tool/commands/download.py:
+ * Scripts/webkitpy/tool/commands/upload.py:
+ * Scripts/webkitpy/tool/mocktool.py:
+ * Scripts/webkitpy/tool/steps/abstractstep.py:
+ * Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py:
+ * Scripts/webkitpy/tool/steps/checkstyle.py:
+ * Scripts/webkitpy/tool/steps/checkstyle_unittest.py: Removed.
+ * Scripts/webkitpy/tool/steps/commit.py:
+ * Scripts/webkitpy/tool/steps/options.py:
+ * Scripts/webkitpy/tool/steps/preparechangelog.py:
+ * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
+ * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
+ * Scripts/webkitpy/tool/steps/validatereviewer.py:
+
+2010-07-09 Mark Rowe <mrowe@apple.com>
+
+ Add two new Windows test build slaves.
+
+ * BuildSlaveSupport/build.webkit.org-config/config.json:
+
+2010-07-09 Albert J. Wong <ajwong@chromium.org>
+
+ Reviewed by David Levin.
+
+ rebaseline_chromium_webkit_tests missing --use_drt option on linux
+ https://bugs.webkit.org/show_bug.cgi?id=41985
+
+ This adds in the --use_drt option for rebaseline_chromium_webkit_tests
+ so that it works on linux. This is essentially a "compile-fix" for the
+ script.
+
+ * Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:
+
+2010-07-09 Nico Weber <thakis@chromium.org>
+
+ Unreviewed. Adding myself as committer.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2010-07-09 David Kilzer <ddkilzer@apple.com>
+
+ Revert "<http://webkit.org/b/41788> commit-log-editor: wrong ChangeLog read when invoked from subdir with git"
+
+ This reverts commit r62692.
+
+ * Scripts/commit-log-editor:
+
+2010-07-08 Kinuko Yasuda <kinuko@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ cleanup json_results_generator dependencies so that non-layout-tests can also use it safely
+ https://bugs.webkit.org/show_bug.cgi?id=38693
+
+ Introduced a new base class JSONResultsGeneratorBase that doesn't
+ have any dependency on layout_tests packages.
+ Turned JSONResultsGenerator into a wrapper class of the base class
+ so that the old code can work with it during the cleanup.
+
+ Added json_results_generator_unittest.py.
+
+ * 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: Added
+
+2010-07-09 Abhishek Arya <inferno@chromium.org>
+
+ Unreviewed.
+
+ Marking myself as a committer.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2010-07-09 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org>
+
+ Reviewed by Antti Koivisto.
+
+ Implement MiniBrowser for Qt.
+ https://bugs.webkit.org/show_bug.cgi?id=40233
+
+ * MiniBrowser/qt/BrowserWindow.cpp: Added.
+ (createNewPage):
+ (BrowserView::BrowserView):
+ (BrowserView::resizeEvent):
+ (BrowserView::load):
+ (BrowserView::view):
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::load):
+ (BrowserWindow::changeLocation):
+ (BrowserWindow::~BrowserWindow):
+ * MiniBrowser/qt/BrowserWindow.h: Added.
+ (BrowserView::~BrowserView):
+ * MiniBrowser/qt/MiniBrowser.pro: Added.
+ * MiniBrowser/qt/main.cpp: Added.
+ (main):
+
+2010-07-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Introduce the Qt autotest launcher.
+
+ Qt autotests should be executed more frequently, ideally by the Qt
+ build bot. This is the first step to provide the tests more accessible.
+
+ [Qt] It should be easier to run all Qt's autotests.
+ https://bugs.webkit.org/show_bug.cgi?id=31625
+
+ * Scripts/run-qtwebkit-tests: Added.
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ commit-queue should merge to TOT when checkout needs update
+ https://bugs.webkit.org/show_bug.cgi?id=41944
+
+ There are a bunch of different designs that are possible here. This
+ one merges to top of tree by cleaning out the working copy and
+ re-applying the patch. Once you decide to merge that way, you need to
+ decide who's going to retry. In this patch, we retry in the child
+ process instead of plumbing the failure reason to the master process.
+
+ This patch is difficult to test end-to-end, but hopefully it will work.
+ :)
+
+ * Scripts/webkitpy/tool/commands/queues.py:
+ * Scripts/webkitpy/tool/commands/stepsequence.py:
+ * Scripts/webkitpy/tool/multicommandtool.py:
+ * Scripts/webkitpy/tool/multicommandtool_unittest.py:
+
+2010-07-09 Dumitru Daniliuc <dumi@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Add a script to check for unnecessary includes in header files.
+ https://bugs.webkit.org/show_bug.cgi?id=41894
+
+ * Scripts/check-header-includes: Added.
+
+2010-07-09 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ Add --html5-treebuilder option to run-webkit-tests
+ https://bugs.webkit.org/show_bug.cgi?id=41922
+
+ We're down to one or two regressions in the HTML5lib test suite. It's
+ getting to be time to look at fixing LayoutTests.
+
+ * Scripts/old-run-webkit-tests:
+
+2010-07-08 Simon Fraser <simon.fraser@apple.com>
+
+ Fix Tiger plugin test failures; the #ifdefs were incorrect, resulting
+ in the drawing model never getting set on Tiger.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+
+2010-07-08 Aaron Boodman <aa@chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Add the ability for user scripts and user styles to affect just the top frame.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41529
+
+ * DumpRenderTree/LayoutTestController.h: Added new allFrames param.
+ * DumpRenderTree/LayoutTestController.cpp: Ditto.
+ (addUserScriptCallback):
+ (addUserStyleSheetCallback):
+ * DumpRenderTree/chromium/LayoutTestController.cpp: Ditto.
+ (LayoutTestController::addUserScript):
+ (LayoutTestController::addUserStyleSheet):
+ * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: Ditto.
+ (LayoutTestController::addUserScript):
+ (LayoutTestController::addUserStyleSheet):
+ * DumpRenderTree/mac/LayoutTestControllerMac.mm: Ditto.
+ (LayoutTestController::addUserScript):
+ (LayoutTestController::addUserStyleSheet):
+ * DumpRenderTree/win/LayoutTestControllerWin.cpp: Ditto.
+ (LayoutTestController::addUserScript):
+ (LayoutTestController::addUserStyleSheet):
+ * DumpRenderTree/wx/LayoutTestControllerWx.cpp: Ditto.
+ (LayoutTestController::addUserScript):
+ (LayoutTestController::addUserStyleSheet):
+
+2010-07-08 Adele Peterson <adele@apple.com>
+
+ Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.
+
+ Test infrastructure for https://bugs.webkit.org/show_bug.cgi?id=41721
+ <rdar://problem/8158561> Missing plug-in indicator should have a pressed state
+
+ Log when the missing plugin button is pressed.
+
+ * DumpRenderTree/mac/UIDelegate.mm:
+ (-[UIDelegate webView:didPressMissingPluginButton:]):
+ * DumpRenderTree/win/UIDelegate.cpp:
+ (UIDelegate::QueryInterface):
+ (UIDelegate::createWebViewWithRequest):
+ (UIDelegate::drawBackground):
+ (UIDelegate::decidePolicyForGeolocationRequest):
+ (UIDelegate::didPressMissingPluginButton):
+ * DumpRenderTree/win/UIDelegate.h:
+
+2010-07-08 Simon Fraser <simon.fraser@apple.com>
+
+ Fix the Tiger build.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+
+2010-07-08 Simon Fraser <simon.fraser@apple.com>
+
+ Fix windows build.
+
+ #ifdef code for Mac.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+
+2010-07-08 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Allow the TestPlugin to use Core Animation rendering for testing
+ https://bugs.webkit.org/show_bug.cgi?id=41872
+
+ Add the ability for the TestPlugin to use the CoreAnimation rendering model
+ when available, based on the "drawingmodel" attribute of the embed tag:
+ drawingmodel="coreanimation"
+
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Add PluginObjectMac.mm
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Add some macros so we can detect
+ when building on Tiger. Add a void* coreAnimationLayer member.
+
+ * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm: Added.
+ (createCoreAnimationLayer): Obj-C method to create the CALayer.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New): Look for the drawingmodel attribute to decide which drawing
+ model to use.
+ (NPP_Destroy): Release the CALayer if we have one.
+ (NPP_GetValue): Return the retained CALayer.
+
+2010-07-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Support pixel tests
+ https://bugs.webkit.org/show_bug.cgi?id=31518
+
+ Convert this file from CRLF to NL line endings. It will soon
+ be used on more than just the WinCairo platform.
+
+ * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
+ (writeFunction):
+ (printPNG):
+ (computeMD5HashStringForBitmapContext):
+ (dumpBitmap):
+
+2010-07-08 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Enable Data Execution Prevention for our test harnesses on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=41882
+
+ * DumpRenderTree/win/DumpRenderTree.vcproj:
+ * DumpRenderTree/win/ImageDiff.vcproj:
+ * WebKitAPITest/WebKitAPITest.vcproj:
+ * WebKitTestRunner/win/WebKitTestRunner.vcproj:
+
+2010-07-07 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Add DRT support for pageProperty etc.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41584
+
+ * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
+ (LayoutTestController::isPageBoxVisible):
+ (LayoutTestController::pageSizeAndMarginsInPixels):
+ (LayoutTestController::pageProperty):
+ (LayoutTestController::addUserStyleSheet):
+ * DumpRenderTree/qt/LayoutTestControllerQt.h:
+
+2010-07-08 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ Remove a warnings from the ImageDiff build by using the proper
+ printf format string for the gsize data type.
+
+ * DumpRenderTree/gtk/ImageDiff.cpp:
+ (printImage): Use the proper printf format string for the gsize data type.
+
+2010-07-08 Alice Liu <alice.liu@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=41653
+ Add new WebKitTestRunner project for Windows
+
+ * WebKitTestRunner/WebKitTestRunnerPrefix.h:
+ Similar to how it's done in DumpRenderTree, define max and min early
+ on so that they don't get replaced by a macro requiring 2 arguments.
+
+ * WebKitTestRunner/win: Added.
+ * WebKitTestRunner/win/WebKitTestRunner.sln: Added.
+ * WebKitTestRunner/win/WebKitTestRunner.vcproj: Added.
+ * WebKitTestRunner/win/main.cpp: Added.
+ (main): Implemented
+
+ Added these files with stubbed out functions:
+ * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
+ (WTR::PlatformWebView::PlatformWebView):
+ (WTR::PlatformWebView::~PlatformWebView):
+ (WTR::PlatformWebView::page):
+ * WebKitTestRunner/win/TestControllerWin.cpp: Added.
+ (WTR::TestController::initializeInjectedBundlePath):
+ * WebKitTestRunner/win/TestInvocationWin.cpp: Added.
+ (WTR::TestInvocation::runUntil):
+
+2010-07-07 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] Implement ImageDiff and add it to the build system
+ https://bugs.webkit.org/show_bug.cgi?id=41779
+
+ Add the initial implementation of the ImageDiff tool for the GTK+
+ port. This is an essential tool for doing pixel tests. The implementation
+ is based on the Mac and Chromium ports.
+
+ * DumpRenderTree/gtk/ImageDiff.cpp: Added.
+ (readPixbufFromStdin): Added.
+ (differenceImageFromDifferenceBuffer): Ditto.
+ (calculateDifference): Ditto.
+ (printImage): Ditto.
+ (printImageDifferences): Ditto.
+ (main): Ditto.
+ * GNUmakefile.am: Add ImageDiff to the WebKitTools build scripts.
+
+2010-07-08 Jay Civelli <jcivelli@chromium.org>
+
+ Unreviewed. Adding myself as a committer.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2010-07-08 Adam Roben <aroben@apple.com>
+
+ Make Windows stop running tests from platform/mac
+
+ r62742 made a change (at my suggestion!) that caused us to start
+ looking for tests in platform/mac, rather than just looking for
+ expected results in platform/mac. This patch just undoes that part of
+ r62742.
+
+ Fixes <http://webkit.org/b/41855> REGRESSION (r62742): Windows runs
+ tests from platform/mac, but shouldn't
+
+ Reviewed by Antti Koivisto and Anders Carlsson.
+
+ * Scripts/old-run-webkit-tests:
+ (top level): Removed "mac-snowleopard" and "mac" from @winPlatforms,
+ so we won't look in those directories for tests to run.
+ (expectedDirectoryForTest): Added back code from pre-r62742 to look in
+ platform/mac-snowleopard and platform/mac for expected results.
+
+2010-07-08 Antonio Gomes <tonikitoo@webkit.org>
+
+ Unreviewed. Adding myself as a reviewer.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2010-07-08 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Update my e-mail in committers.py
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2010-07-07 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Dumitru Daniliuc.
+
+ VCSUtils.pm complains about uninitialized value $newLine
+ https://bugs.webkit.org/show_bug.cgi?id=41333
+
+ Fixes an issue where VCSUtils::fixChangeLogPatch() may read off the end of
+ an array when fixing a change log entry that overlaps with an earlier
+ entry. In particular, when a patch contains a change log entry inserted
+ earlier in the change log file, but after an entry with the same author
+ and date.
+
+ * Scripts/VCSUtils.pm:
+ - Added for-loop constraint to fixChangeLogPatch() so that it does not
+ read off the end of the @overlappingLines array.
+ * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl: Added unit test.
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Comment out a part of TestNetscapePlugin that caused tests to fail on Tiger and Leopard.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+
+2010-07-07 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [DRT/Chromium] Support for indeterminate checkbox
+ https://bugs.webkit.org/show_bug.cgi?id=41747
+
+ Import http://src.chromium.org/viewvc/chrome?view=rev&revision=51499
+
+ * DumpRenderTree/chromium/WebThemeControlDRT.cpp:
+ (WebThemeControlDRT::draw):
+ * DumpRenderTree/chromium/WebThemeControlDRT.h:
+ (WebThemeControlDRT::):
+ * DumpRenderTree/chromium/WebThemeEngineDRT.cpp:
+ (WebThemeEngineDRT::paintButton):
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Clean up MiniBrowser Xcode project.
+
+ - Use xcconfig files.
+ - Rename plists to canonical Info.plist
+ - Remove localizations.
+
+ * MiniBrowser/Configurations: Added.
+ * MiniBrowser/Configurations/Base.xcconfig: Added.
+ * MiniBrowser/Configurations/DebugRelease.xcconfig: Added.
+ * MiniBrowser/Configurations/MiniBrowser.xcconfig: Added.
+ * MiniBrowser/Configurations/WebBundle.xcconfig: Added.
+ * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
+ * MiniBrowser/WebBundle-Info.plist: Removed.
+ * MiniBrowser/mac/BrowserStatisticsWindowController.m:
+ (-[BrowserStatisticsWindowController initWithThreadedWKContextRef:processWKContextRef:]):
+ * MiniBrowser/mac/BrowserWindow.xib: Added.
+ * MiniBrowser/mac/BrowserWindowController.m:
+ (-[BrowserWindowController initWithPageNamespace:]):
+ * MiniBrowser/mac/English.lproj: Removed.
+ * MiniBrowser/mac/English.lproj/BrowserWindow.xib: Removed.
+ * MiniBrowser/mac/English.lproj/InfoPlist.strings: Removed.
+ * MiniBrowser/mac/English.lproj/MainMenu.xib: Removed.
+ * MiniBrowser/mac/Info.plist: Copied from MiniBrowser/mac/MiniBrowser-Info.plist.
+ * MiniBrowser/mac/MainMenu.xib: Added.
+ * MiniBrowser/mac/MiniBrowser-Info.plist: Removed.
+ * MiniBrowser/mac/WebBundle/Info.plist: Copied from MiniBrowser/WebBundle-Info.plist.
+
+2010-07-07 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [DRT/Chromium] Fix two regressions
+ https://bugs.webkit.org/show_bug.cgi?id=41745
+
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::paintInvalidatedRegion):
+ Repaint three times to fix svg/W3C-SVG-1.1/struct-use-01-t.svg
+ and svg/custom/use-on-g-containing-foreignObject-and-image.svg
+ though test_shell does it twice. Probably DRT needs it because
+ DRT delays painting as possible.
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Try to fix build.
+
+ * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
+ (webkit_test_plugin_destroy_stream):
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Try to fix the GTK+ and Qt test failures by merging the newly added code from TestNetscapePlugin/main.cpp
+
+ * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
+ (webkit_test_plugin_new_stream):
+ (webkit_test_plugin_destroy_stream):
+ (webkit_test_plugin_write_ready):
+ (webkit_test_plugin_write):
+
+2010-07-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Don't hard code the Mac OS X 10.6 SDK for MiniBrowser.
+
+ * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Use the correct XP_MACOSX define instead of XP_MAC. This was causing test failures on some platforms.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_New):
+ (NPP_HandleEvent):
+
+2010-07-07 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Need to have a way to specify different results for Windows XP and 7
+ https://bugs.webkit.org/show_bug.cgi?id=41776
+
+ Add the ability to have platform/win-xp, platform/win-vista, and platform/win-7
+ subdirectories, so we can have different results for tests on Windows XP, Windows
+ Vista, and Windows 7.
+
+ Windows XP will try the order: win-xp, win-vista, win-7, win, mac-snowleopard, mac.
+ Windows Vista will try the order: win-vista, win-7, win, mac-snowleopard, mac.
+ Windows 7 will try the order: win-7, win, mac-snowleopard, mac.
+
+ This matches the behavior of the mac.
+
+ * Scripts/old-run-webkit-tests: Add multiple platforms for Windows, and if we are on XP
+ or Vista, try looking in other win-* subdirectories before win.
+ * Scripts/webkitdirs.pm: Add some helper functions to determine what version of Windows
+ we are running.
+
+2010-07-07 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [DRT/Chromium] Remove ASSERT_NOT_REACHED in some functions
+ https://bugs.webkit.org/show_bug.cgi?id=41753
+
+ The original code of the following functions in
+ test_shell_devtools_client.cc have NOTIMPLEMENTED(), not
+ ASSERT_NOT_REACHED(). The program shouldn't stop at these
+ functions.
+
+ * DumpRenderTree/chromium/DRTDevToolsClient.cpp:
+ (DRTDevToolsClient::activateWindow):
+ (DRTDevToolsClient::closeWindow):
+ (DRTDevToolsClient::dockWindow):
+ (DRTDevToolsClient::undockWindow):
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Test that we call NPP_DestroyStream if a plug-in returns -1 from its NPP_Write function
+ https://bugs.webkit.org/show_bug.cgi?id=41821
+
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
+ (pluginGetProperty):
+ (pluginSetProperty):
+ (pluginAllocate):
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
+ Add and initialize the returnNegativeOneFromWrite property.
+
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NPP_NewStream):
+ Set the stream type to NP_NORMAL so we'll get write callbacks.
+
+ (NPP_DestroyStream):
+ Treat the onstreamdestroy attribute as a function name and not a string.
+
+ (NPP_WriteReady):
+ Have this return a nonzero value.
+
+ (NPP_Write):
+ If returnNegativeOneFromWrite is true return -1.
+
+2010-07-07 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fix for machines with both MSVC 2005 and 2008 installed. Ensures the
+ latest version is selected by default, and allows the version to be specified.
+
+ * wx/build/settings.py:
+
+2010-07-07 Chris Fleizach <cfleizach@apple.com>
+
+ Reviewed by Darin Adler.
+
+ AX: TextArea should return AXSelectedTextRange of 0,0 if the cursor is not in the text area
+ https://bugs.webkit.org/show_bug.cgi?id=41810
+
+ * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
+ (AccessibilityUIElement::selectedTextRange):
+
+2010-07-07 Martin Robinson <mrobinson@igalia.com>
+
+ Unreviewed.
+
+ Build fix after r62700.
+
+ * GNUmakefile.am: Update the source list to reflect the new TestNetscapePlugIn
+ source file locations.
+
+2010-07-07 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by David Levin.
+
+ change --exit-after-n-crashes to --exit-after-n-crashes-or-timeouts
+ https://bugs.webkit.org/show_bug.cgi?id=41814
+
+ * BuildSlaveSupport/build.webkit.org-config/master.cfg:
+ * Scripts/old-run-webkit-tests:
+
+2010-07-07 Ojan Vafai <ojan@chromium.org>
+
+ Reviewed by David Levin.
+
+ add --exit-after-n-crashes to run-webkit-tests
+ https://bugs.webkit.org/show_bug.cgi?id=41811
+
+ Change the bots at build.webkit.org to use --exit-after-n-crashes
+ instead of --exit-after-n-failures since we want to be able to have
+ more than 20 failures on those bots, but more than 20 crashes means
+ something should be rolled out.
+
+ * Scripts/old-run-webkit-tests:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+
+2010-07-07 Brian Weinstein <bweinstein@apple.com>
+
+ Fix the Windows build by removing win/TestNetscapePlugin/main.cpp from the
+ TestNetscapePlugin project, because this was removed from the tree.
+
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Unify Mac and Windows TestNetscapePlugin main.cpp files
+ https://bugs.webkit.org/show_bug.cgi?id=41798
+
+ * DumpRenderTree/DumpRenderTree.sln:
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (strcasecmp):
+ (NP_Initialize):
+ (NP_GetEntryPoints):
+ (NP_Shutdown):
+ (NPP_New):
+ (NPP_Destroy):
+ (NPP_HandleEvent):
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
+ * DumpRenderTree/win/TestNetscapePlugin/main.cpp: Removed.
+
+2010-07-07 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fix. pageProperty needs to return a value.
+
+ * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
+ (LayoutTestController::pageProperty):
+
+2010-07-07 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/41788> commit-log-editor: wrong ChangeLog read when invoked from subdir with git
+
+ Reviewed by Anders Carlsson.
+
+ For both svn and git, commit-log-editor is invoked from the root
+ of the working directory. Unlike svn, git returns a list of
+ changed files that are relative to the directory where the
+ command was invoked. This caused the ChangeLog file in the root
+ directory to be read instead of the ChangeLog in the current
+ directory.
+
+ The fix is to use $ENV{PWD} as the base directory when fixing
+ the path to the ChangeLog files. With svn, this has no net
+ effect since $ENV{PWD} is the root of the working directory and
+ the ChangeLog paths are already relative to that directory.
+ With git, $ENV{PWD} is the directory that the commit was invoked
+ from, which fixes the ChangeLog paths so that the correct files
+ are read when creating the commit log entry.
+
+ Note that the call to makeFilePathRelative() was supposed to
+ address this issue, but it doesn't because (a) it does nothing
+ with svn working directories by design, and (b) it does nothing
+ with git working directories because it's invoked when the
+ current directory is the root of the working directory, thus
+ giving no relative path.
+
+ * Scripts/commit-log-editor: Removed call to
+ makeFilePathRelative() since since it does nothing. Moved code
+ to fix up $changeLog path so that it's fixed before trying to
+ open the file, and use $ENV{PWD} as the base path. Also use
+ canonicalizePath() to clean up paths with "../" in them.
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Another attempt at fixing the Qt build.
+
+ * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Try to fix Qt build.
+
+ * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
+
+2010-07-07 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Rename TestNetscapePlugin.subproj and move platform specific files to subdirectories
+ https://bugs.webkit.org/show_bug.cgi?id=41781
+
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp.
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h.
+ * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp.
+ * DumpRenderTree/TestNetscapePlugIn/TestObject.h: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h.
+ * DumpRenderTree/TestNetscapePlugIn/mac/Info.plist: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist.
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp: Renamed from WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp.
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def.
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc.
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Added.
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def.
+ * DumpRenderTree/TestNetscapePlugIn/win/resource.h: Renamed from WebKitTools/DumpRenderTree/win/TestNetscapePlugin/resource.h.
+ * DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj: Removed.
+
+2010-07-07 Andras Becsi <abecsi@webkit.org>
+
+ Unreviewed trivial fix.
+
+ Remove DUMPRENDERTREE_TEMP environment variable from NRWT
+ which was checked in accidentally in r62635.
+
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+
+2010-07-07 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>
+
+ Reviewed by Eric Seidel.
+
+ Pass port specific environment to server process.
+ https://bugs.webkit.org/show_bug.cgi?id=41593
+
+ * Scripts/webkitpy/layout_tests/port/qt.py:
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+
+2010-07-06 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ Fix a wrong dup detection of rebaseline-chromium-webkit-tests
+ https://bugs.webkit.org/show_bug.cgi?id=41644
+
+ rebaseline-chromium-webkit-tests used ImageDiff with 0.1%
+ tolerance. We don't need tolerance for rebaseline.
+
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ Add optional tolerance parameter to diff_image().
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ Add optional tolerance parameter to diff_image().
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ Add optional tolerance parameter to diff_image(), and pass it to ImageDiff command.
+ * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
+ diff_files() always calls diff_image() with tolerance=0.
+ diff_files() is used only by rebaseline-chromium-webkit-tests.
+
+2010-07-06 Sam Weinig <sam@webkit.org>
+
+ Fix MiniBrowser build.
+
+ * MiniBrowser/mac/WebBundle/WebBundleMain.m:
+
+2010-07-06 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add support for dumping the contents of messages to the console to WebKitTestRunner
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::InjectedBundlePage):
+ (WTR::InjectedBundlePage::_addMessageToConsole):
+ (WTR::InjectedBundlePage::addMessageToConsole):
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
+
+2010-07-06 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Patch for https://bugs.webkit.org/show_bug.cgi?id=41708
+ Add dumpAsText support for WebKitTestRunner
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::InjectedBundle):
+ (WTR::InjectedBundle::reset): Reset the LayoutTestController for each test.
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::didFinishLoadForFrame): Use the new WKBundleFrameCopyInnerText
+ API to dump the main frames text.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Fix Chromium build.
+
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::didCreateDataSource): Call leakPtr instead of release.
+ (WebViewHost::didNavigateWithinPage): Ditto.
+ (WebViewHost::updateURL): Ditto.
+
+2010-07-06 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] build-webkit should not run autogen.sh unconditionally
+ https://bugs.webkit.org/show_bug.cgi?id=41704
+
+ * Scripts/webkitdirs.pm: Only run autogen.sh during a build if GNUmakefile
+ doesn't exist. Autotools should re-run autogen.sh when necessary. Also do
+ some very minor cleanup.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Try to fix Chromium build.
+
+ * DumpRenderTree/chromium/WebViewHost.cpp: Added include of PassOwnPtr.h.
+
+2010-07-06 Darin Adler <darin@apple.com>
+
+ Fix build.
+
+ * WebKitAPITest/TestsController.cpp:
+ (WebKitAPITest::TestsController::addTest): Use leakPtr instead of release.
+
+2010-07-06 Roland Steiner <rolandsteiner@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Bug 40558 - [DRT/Chromium] Upstream TestShellDevTools for Chromium DRT
+ https://bugs.webkit.org/show_bug.cgi?id=40558
+
+ Upstream DevTools for Chromium DRT.
+ (original Chromium files rev. 51287)
+
+ * DumpRenderTree/DumpRenderTree.gypi:
+ * DumpRenderTree/chromium/DRTDevToolsAgent.cpp: Added.
+ (DRTDevToolsAgent::DRTDevToolsAgent):
+ (DRTDevToolsAgent::setWebView):
+ (DRTDevToolsAgent::sendMessageToFrontend):
+ (DRTDevToolsAgent::forceRepaint):
+ (DRTDevToolsAgent::runtimeFeatureStateChanged):
+ (DRTDevToolsAgent::injectedScriptSource):
+ (DRTDevToolsAgent::injectedScriptDispatcherSource):
+ (DRTDevToolsAgent::debuggerScriptSource):
+ (DRTDevToolsAgent::asyncCall):
+ (DRTDevToolsAgent::call):
+ (DRTDevToolsAgent::webDevToolsAgent):
+ (DRTDevToolsAgent::attach):
+ (DRTDevToolsAgent::detach):
+ (DRTDevToolsAgent::setTimelineProfilingEnabled):
+ (DRTDevToolsAgent::evaluateInWebInspector):
+ (DRTDevToolsAgent::dispatchMessageLoop):
+ * DumpRenderTree/chromium/DRTDevToolsAgent.h: Added.
+ (DRTDevToolsAgent::~DRTDevToolsAgent):
+ (DRTDevToolsAgent::hostIdentifier):
+ * DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp:
+ * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
+ (DRTDevToolsCallArgs::DRTDevToolsCallArgs):
+ (DRTDevToolsCallArgs::~DRTDevToolsCallArgs):
+ (DRTDevToolsCallArgs::callsCount):
+ * DumpRenderTree/chromium/DRTDevToolsClient.cpp: Added.
+ (DRTDevToolsClient::DRTDevToolsClient):
+ (DRTDevToolsClient::~DRTDevToolsClient):
+ (DRTDevToolsClient::sendMessageToAgent):
+ (DRTDevToolsClient::sendDebuggerCommandToAgent):
+ (DRTDevToolsClient::activateWindow):
+ (DRTDevToolsClient::closeWindow):
+ (DRTDevToolsClient::dockWindow):
+ (DRTDevToolsClient::undockWindow):
+ (DRTDevToolsClient::asyncCall):
+ (DRTDevToolsClient::call):
+ (DRTDevToolsClient::allMessagesProcessed):
+ * DumpRenderTree/chromium/DRTDevToolsClient.h:
+ * DumpRenderTree/chromium/EventSender.cpp:
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::LayoutTestController):
+ (LayoutTestController::closeWebInspector):
+ (LayoutTestController::setTimelineProfilingEnabled):
+ (LayoutTestController::evaluateInWebInspector):
+ * DumpRenderTree/chromium/LayoutTestController.h:
+ * DumpRenderTree/chromium/TestShell.cpp:
+ (TestShell::TestShell):
+ (TestShell::~TestShell):
+ (TestShell::createDRTDevToolsClient):
+ (TestShell::showDevTools):
+ (TestShell::closeDevTools):
+ (TestShell::runFileTest):
+ (TestShell::createNewWindow):
+ * DumpRenderTree/chromium/TestShell.h:
+ (TestShell::drtDevToolsAgent):
+ (TestShell::drtDevToolsClient):
+ * DumpRenderTree/chromium/config.h:
+
+2010-07-06 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>
+
+ Reviewed by Eric Seidel.
+
+ Don't pass image hash to DRT when pixel tests are disabled.
+ https://bugs.webkit.org/show_bug.cgi?id=41597
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+
+2010-07-05 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ REGRESSION(r60652): WebKitTools/Scripts/ensure-valid-python should cleanup temporary directory
+ https://bugs.webkit.org/show_bug.cgi?id=41612
+
+ * Scripts/ensure-valid-python: File::Temp::tempdir call fixed.
+
+2010-07-05 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ We should be able to specify a bug to block for webkit-patch upload
+ https://bugs.webkit.org/show_bug.cgi?id=41648
+
+ This will be useful for working on the HTML5 parser.
+
+ * Scripts/webkitpy/tool/steps/createbug.py:
+ * Scripts/webkitpy/tool/steps/options.py:
+
2010-07-05 Martin Robinson <mrobinson@igalia.com>
Reviewed by Oliver Hunt.
diff --git a/WebKitTools/DumpRenderTree/DumpRenderTree.gypi b/WebKitTools/DumpRenderTree/DumpRenderTree.gypi
index 5fc8dab..a525532 100644
--- a/WebKitTools/DumpRenderTree/DumpRenderTree.gypi
+++ b/WebKitTools/DumpRenderTree/DumpRenderTree.gypi
@@ -9,6 +9,12 @@
'chromium/CppBoundClass.h',
'chromium/CppVariant.cpp',
'chromium/CppVariant.h',
+ 'chromium/DRTDevToolsAgent.cpp',
+ 'chromium/DRTDevToolsAgent.h',
+ 'chromium/DRTDevToolsCallArgs.cpp',
+ 'chromium/DRTDevToolsCallArgs.h',
+ 'chromium/DRTDevToolsClient.cpp',
+ 'chromium/DRTDevToolsClient.h',
'chromium/DumpRenderTree.cpp',
'chromium/EventSender.cpp',
'chromium/EventSender.h',
diff --git a/WebKitTools/DumpRenderTree/DumpRenderTree.sln b/WebKitTools/DumpRenderTree/DumpRenderTree.sln
index 399c002..3647a2a 100644
--- a/WebKitTools/DumpRenderTree/DumpRenderTree.sln
+++ b/WebKitTools/DumpRenderTree/DumpRenderTree.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DumpRenderTree", "win\DumpRenderTree.vcproj", "{6567DFD4-D6DE-4CD5-825D-17E353D160E1}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestNetscapePlugin", "win\TestNetscapePlugin\TestNetscapePlugin.vcproj", "{C0737398-3565-439E-A2B8-AB2BE4D5430C}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestNetscapePlugin", "TestNetscapePlugin\win\TestNetscapePlugin.vcproj", "{C0737398-3565-439E-A2B8-AB2BE4D5430C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FindSafari", "..\FindSafari\FindSafari.vcproj", "{DA31DA52-6675-48D4-89E0-333A7144397C}"
EndProject
diff --git a/WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj b/WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj
index 6a49b44..2ed5daa 100644
--- a/WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj
+++ b/WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj
@@ -24,6 +24,8 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 0F37A4A711E6628700275F54 /* PluginObjectMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F37A4A611E6628700275F54 /* PluginObjectMac.mm */; };
+ 0F37A4AA11E6629100275F54 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5A752A108AF5D1F00138E45 /* QuartzCore.framework */; };
141BF435096A455900E0753C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9335435F03D75502008635CE /* WebKit.framework */; };
141BF436096A455900E0753C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A84F608908B136DA00E9745F /* Cocoa.framework */; };
141BF438096A455900E0753C /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A817090308B164D300CCB9FB /* JavaScriptCore.framework */; };
@@ -178,9 +180,10 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 0F37A4A611E6628700275F54 /* PluginObjectMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginObjectMac.mm; sourceTree = "<group>"; };
141BF233096A44CF00E0753C /* TestNetscapePlugIn.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestNetscapePlugIn.plugin; sourceTree = BUILT_PRODUCTS_DIR; };
141BF447096A45C800E0753C /* PluginObject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginObject.h; sourceTree = "<group>"; };
- 141BF448096A45C800E0753C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 141BF448096A45C800E0753C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = Info.plist; path = mac/Info.plist; sourceTree = "<group>"; };
14770FE00A22ADF7009342EE /* GCController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCController.h; sourceTree = "<group>"; };
1A8F024C0BB9B056008CFA34 /* TestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestObject.h; sourceTree = "<group>"; };
1AC6C77F0D07589B00CD3161 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
@@ -290,6 +293,7 @@
141BF436096A455900E0753C /* Cocoa.framework in Frameworks */,
141BF438096A455900E0753C /* JavaScriptCore.framework in Frameworks */,
141BF435096A455900E0753C /* WebKit.framework in Frameworks */,
+ 0F37A4AA11E6629100275F54 /* QuartzCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -341,7 +345,7 @@
BC9D90230C97472E0099A4A3 /* WorkQueueItem.h */,
A8B91AD20CF3B305008F91FF /* AppKit Overrides */,
A8B91AC40CF3B170008F91FF /* ObjCPlugin */,
- 141BF1F5096A439800E0753C /* TestNetscapePlugIn.subproj */,
+ 141BF1F5096A439800E0753C /* TestNetscapePlugIn */,
9345229B0BD12B2C0086EDA0 /* Resources */,
A803FF6409CAACC1009B2A37 /* Frameworks */,
9340995508540CAF007F3BC8 /* Products */,
@@ -350,17 +354,18 @@
name = DumpRenderTree;
sourceTree = "<group>";
};
- 141BF1F5096A439800E0753C /* TestNetscapePlugIn.subproj */ = {
+ 141BF1F5096A439800E0753C /* TestNetscapePlugIn */ = {
isa = PBXGroup;
children = (
141BF448096A45C800E0753C /* Info.plist */,
1AC6C77F0D07589B00CD3161 /* main.cpp */,
1AC6C7800D07589B00CD3161 /* PluginObject.cpp */,
+ 0F37A4A611E6628700275F54 /* PluginObjectMac.mm */,
141BF447096A45C800E0753C /* PluginObject.h */,
1AC6C7810D07589B00CD3161 /* TestObject.cpp */,
1A8F024C0BB9B056008CFA34 /* TestObject.h */,
);
- path = TestNetscapePlugIn.subproj;
+ path = TestNetscapePlugIn;
sourceTree = "<group>";
};
1422A2690AF6F45200E1A883 /* Controllers */ = {
@@ -678,6 +683,7 @@
1AC6C8490D07638600CD3161 /* main.cpp in Sources */,
1AC6C84A0D07638600CD3161 /* PluginObject.cpp in Sources */,
1AC6C84B0D07638600CD3161 /* TestObject.cpp in Sources */,
+ 0F37A4A711E6628700275F54 /* PluginObjectMac.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -761,6 +767,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = BCB283DE0CFA7C20007E533E /* TestNetscapePlugIn.xcconfig */;
buildSettings = {
+ INFOPLIST_FILE = TestNetscapePlugIn/mac/Info.plist;
};
name = Debug;
};
@@ -768,6 +775,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = BCB283DE0CFA7C20007E533E /* TestNetscapePlugIn.xcconfig */;
buildSettings = {
+ INFOPLIST_FILE = TestNetscapePlugIn/mac/Info.plist;
};
name = Release;
};
@@ -859,6 +867,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = BCB283DE0CFA7C20007E533E /* TestNetscapePlugIn.xcconfig */;
buildSettings = {
+ INFOPLIST_FILE = TestNetscapePlugIn/mac/Info.plist;
INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Frameworks/$(WEBKIT_FRAMEWORK_RESOURCES_PATH)";
SKIP_INSTALL = NO;
};
diff --git a/WebKitTools/DumpRenderTree/LayoutTestController.cpp b/WebKitTools/DumpRenderTree/LayoutTestController.cpp
index edab29e..cd294bc 100644
--- a/WebKitTools/DumpRenderTree/LayoutTestController.cpp
+++ b/WebKitTools/DumpRenderTree/LayoutTestController.cpp
@@ -1499,28 +1499,30 @@ static JSValueRef setScrollbarPolicyCallback(JSContextRef context, JSObjectRef,
static JSValueRef addUserScriptCallback(JSContextRef context, JSObjectRef, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
- if (argumentCount != 2)
+ if (argumentCount != 3)
return JSValueMakeUndefined(context);
JSRetainPtr<JSStringRef> source(Adopt, JSValueToStringCopy(context, arguments[0], exception));
ASSERT(!*exception);
bool runAtStart = JSValueToBoolean(context, arguments[1]);
+ bool allFrames = JSValueToBoolean(context, arguments[2]);
LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
- controller->addUserScript(source.get(), runAtStart);
+ controller->addUserScript(source.get(), runAtStart, allFrames);
return JSValueMakeUndefined(context);
}
static JSValueRef addUserStyleSheetCallback(JSContextRef context, JSObjectRef, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
- if (argumentCount != 1)
+ if (argumentCount != 2)
return JSValueMakeUndefined(context);
JSRetainPtr<JSStringRef> source(Adopt, JSValueToStringCopy(context, arguments[0], exception));
ASSERT(!*exception);
+ bool allFrames = JSValueToBoolean(context, arguments[1]);
LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
- controller->addUserStyleSheet(source.get());
+ controller->addUserStyleSheet(source.get(), allFrames);
return JSValueMakeUndefined(context);
}
diff --git a/WebKitTools/DumpRenderTree/LayoutTestController.h b/WebKitTools/DumpRenderTree/LayoutTestController.h
index be79473..16eda2c 100644
--- a/WebKitTools/DumpRenderTree/LayoutTestController.h
+++ b/WebKitTools/DumpRenderTree/LayoutTestController.h
@@ -241,8 +241,8 @@ public:
void addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
void removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
- void addUserScript(JSStringRef source, bool runAtStart);
- void addUserStyleSheet(JSStringRef source);
+ void addUserScript(JSStringRef source, bool runAtStart, bool allFrames);
+ void addUserStyleSheet(JSStringRef source, bool allFrames);
void setGeolocationPermission(bool allow);
bool isGeolocationPermissionSet() const { return m_isGeolocationPermissionSet; }
diff --git a/WebKitTools/DumpRenderTree/PixelDumpSupport.cpp b/WebKitTools/DumpRenderTree/PixelDumpSupport.cpp
index e38b2d4..e372827 100644
--- a/WebKitTools/DumpRenderTree/PixelDumpSupport.cpp
+++ b/WebKitTools/DumpRenderTree/PixelDumpSupport.cpp
@@ -30,9 +30,9 @@
#include "DumpRenderTree.h"
#include "LayoutTestController.h"
#include "PixelDumpSupport.h"
+#include <cstdio>
#include <wtf/Assertions.h>
#include <wtf/RefPtr.h>
-#include <wtf/RetainPtr.h>
#if PLATFORM(CG)
#include "PixelDumpSupportCG.h"
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
index 477ca17..671069e 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
@@ -132,6 +132,7 @@ enum {
ID_PROPERTY_TEST_OBJECT,
ID_PROPERTY_LOG_DESTROY,
ID_PROPERTY_RETURN_ERROR_FROM_NEWSTREAM,
+ ID_PROPERTY_RETURN_NEGATIVE_ONE_FROM_WRITE,
ID_PROPERTY_PRIVATE_BROWSING_ENABLED,
ID_PROPERTY_CACHED_PRIVATE_BROWSING_ENABLED,
ID_PROPERTY_THROW_EXCEPTION_PROPERTY,
@@ -147,6 +148,7 @@ static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
"testObject",
"logDestroy",
"returnErrorFromNewStream",
+ "returnNegativeOneFromWrite",
"privateBrowsingEnabled",
"cachedPrivateBrowsingEnabled",
"testThrowExceptionProperty",
@@ -282,6 +284,9 @@ static bool pluginGetProperty(NPObject* obj, NPIdentifier name, NPVariant* resul
} else if (name == pluginPropertyIdentifiers[ID_PROPERTY_RETURN_ERROR_FROM_NEWSTREAM]) {
BOOLEAN_TO_NPVARIANT(plugin->returnErrorFromNewStream, *result);
return true;
+ } else if (name == pluginPropertyIdentifiers[ID_PROPERTY_RETURN_NEGATIVE_ONE_FROM_WRITE]) {
+ BOOLEAN_TO_NPVARIANT(plugin->returnNegativeOneFromWrite, *result);
+ return true;
} else if (name == pluginPropertyIdentifiers[ID_PROPERTY_PRIVATE_BROWSING_ENABLED]) {
NPBool privateBrowsingEnabled = FALSE;
browser->getvalue(plugin->npp, NPNVprivateModeBool, &privateBrowsingEnabled);
@@ -317,6 +322,9 @@ static bool pluginSetProperty(NPObject* obj, NPIdentifier name, const NPVariant*
} else if (name == pluginPropertyIdentifiers[ID_PROPERTY_RETURN_ERROR_FROM_NEWSTREAM]) {
plugin->returnErrorFromNewStream = NPVARIANT_TO_BOOLEAN(*variant);
return true;
+ } else if (name == pluginPropertyIdentifiers[ID_PROPERTY_RETURN_NEGATIVE_ONE_FROM_WRITE]) {
+ plugin->returnNegativeOneFromWrite = NPVARIANT_TO_BOOLEAN(*variant);
+ return true;
} else if (name == pluginPropertyIdentifiers[ID_PROPERTY_THROW_EXCEPTION_PROPERTY]) {
browser->setexception(obj, "plugin object testThrowExceptionProperty SUCCESS");
return true;
@@ -967,6 +975,7 @@ static NPObject *pluginAllocate(NPP npp, NPClass *theClass)
newInstance->logDestroy = FALSE;
newInstance->logSetWindow = FALSE;
newInstance->returnErrorFromNewStream = FALSE;
+ newInstance->returnNegativeOneFromWrite = FALSE;
newInstance->stream = 0;
newInstance->firstUrl = NULL;
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.h
index 0020e56..03befb0 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.h
@@ -25,6 +25,16 @@
#include <WebKit/npfunctions.h>
+#if XP_MACOSX
+#if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
+#define BUILDING_ON_TIGER 1
+#elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
+#define BUILDING_ON_LEOPARD 1
+#elif !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
+#define BUILDING_ON_SNOW_LEOPARD 1
+#endif
+#endif // XP_MACOSX
+
extern NPNetscapeFuncs *browser;
typedef struct {
@@ -34,6 +44,7 @@ typedef struct {
NPBool eventLogging;
NPBool logSetWindow;
NPBool logDestroy;
+ NPBool returnNegativeOneFromWrite;
NPBool returnErrorFromNewStream;
NPBool cachedPrivateBrowsingMode;
NPObject* testObject;
@@ -55,6 +66,9 @@ typedef struct {
#ifdef XP_MACOSX
NPEventModel eventModel;
#endif
+#if XP_MACOSX && !defined(BUILDING_ON_TIGER)
+ void* coreAnimationLayer;
+#endif
NPWindow lastWindow;
} PluginObject;
@@ -65,3 +79,8 @@ extern void testNPRuntime(NPP npp);
extern void pluginLog(NPP instance, const char* format, ...);
extern bool testDocumentOpen(NPP npp);
extern bool testWindowOpen(NPP npp);
+
+#if XP_MACOSX && !defined(BUILDING_ON_TIGER)
+extern void* createCoreAnimationLayer();
+#endif
+
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm
new file mode 100644
index 0000000..3aff46d
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm
@@ -0,0 +1,102 @@
+/*
+ * 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. ``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 "PluginObject.h"
+
+#if !defined(BUILDING_ON_TIGER)
+
+#include <QuartzCore/QuartzCore.h>
+
+@interface TestPluginLayer : CALayer
+@end
+
+@implementation TestPluginLayer
+
+- (void)drawInContext:(CGContextRef)context
+{
+ CGRect bounds = [self bounds];
+ const char* text = "Test Plug-in";
+ CGContextSelectFont(context, "Helvetica", 24, kCGEncodingMacRoman);
+ CGContextShowTextAtPoint(context, bounds.origin.x + 3.0f, bounds.origin.y + bounds.size.height - 30.0f, text, strlen(text));
+}
+
+@end
+
+void* createCoreAnimationLayer()
+{
+ CALayer *caLayer = [[TestPluginLayer alloc] init];
+
+ NSNull *nullValue = [NSNull null];
+ NSDictionary *actions = [NSDictionary dictionaryWithObjectsAndKeys:
+ nullValue, @"anchorPoint",
+ nullValue, @"bounds",
+ nullValue, @"contents",
+ nullValue, @"contentsRect",
+ nullValue, @"opacity",
+ nullValue, @"position",
+ nullValue, @"shadowColor",
+ nullValue, @"sublayerTransform",
+ nullValue, @"sublayers",
+ nullValue, @"transform",
+ nullValue, @"zPosition",
+ nil];
+ // Turn off default animations.
+ [caLayer setStyle:[NSDictionary dictionaryWithObject:actions forKey:@"actions"]];
+ [caLayer setNeedsDisplayOnBoundsChange:YES];
+
+ [caLayer setBounds:CGRectMake(0, 0, 200, 100)];
+ [caLayer setAnchorPoint:CGPointZero];
+
+ CGColorRef color = CGColorCreateGenericRGB(0.5, 0.5, 1, 1);
+ [caLayer setBackgroundColor:color];
+ CGColorRelease(color);
+
+ [caLayer setLayoutManager:[CAConstraintLayoutManager layoutManager]];
+
+ CALayer *sublayer = [CALayer layer];
+ // Turn off default animations.
+ [sublayer setStyle:[NSDictionary dictionaryWithObject:actions forKey:@"actions"]];
+
+ color = CGColorCreateGenericRGB(0, 0, 0, 0.75);
+ [sublayer setBackgroundColor:color];
+ CGColorRelease(color);
+ [sublayer setBounds:CGRectMake(0, 0, 180, 20)];
+
+ [sublayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMinY
+ relativeTo:@"superlayer"
+ attribute:kCAConstraintMinY]];
+ [sublayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMinX
+ relativeTo:@"superlayer"
+ attribute:kCAConstraintMinX]];
+ [sublayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMaxX
+ relativeTo:@"superlayer"
+ attribute:kCAConstraintMaxX]];
+
+ [caLayer addSublayer:sublayer];
+ return caLayer;
+}
+
+#endif // !defined(BUILDING_ON_TIGER)
+
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.cpp
index 0b32191..0b32191 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.cpp
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.h
index 1295fb7..1295fb7 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.h
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/mac/Info.plist
index 7444b84..7444b84 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/mac/Info.plist
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/main.cpp
index eff9c1c..82a6e3a 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/main.cpp
@@ -23,25 +23,32 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "PluginObject.h"
+#include "PluginObject.h"
-// Mach-o entry points
-extern "C" {
- NPError NP_Initialize(NPNetscapeFuncs *browserFuncs);
- NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs);
- void NP_Shutdown(void);
+#if XP_WIN
+#define STDCALL __stdcall
+
+static inline int strcasecmp(const char* s1, const char* s2)
+{
+ return _stricmp(s1, s2);
}
-// Mach-o entry points
-NPError NP_Initialize(NPNetscapeFuncs *browserFuncs)
+#else
+#define STDCALL
+#endif
+
+// Entry points
+extern "C"
+NPError STDCALL NP_Initialize(NPNetscapeFuncs *browserFuncs)
{
browser = browserFuncs;
return NPERR_NO_ERROR;
}
-NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs)
+extern "C"
+NPError STDCALL NP_GetEntryPoints(NPPluginFuncs *pluginFuncs)
{
- pluginFuncs->version = 11;
+ pluginFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
pluginFuncs->size = sizeof(pluginFuncs);
pluginFuncs->newp = NPP_New;
pluginFuncs->destroy = NPP_Destroy;
@@ -60,7 +67,8 @@ NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs)
return NPERR_NO_ERROR;
}
-void NP_Shutdown(void)
+extern "C"
+void STDCALL NP_Shutdown(void)
{
}
@@ -70,6 +78,9 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
{
bool forceCarbon = false;
+#if XP_MACOSX
+ NPEventModel eventModel;
+
// Always turn on the CG model
NPBool supportsCoreGraphics;
if (browser->getvalue(instance, NPNVsupportsCoreGraphicsBool, &supportsCoreGraphics) != NPERR_NO_ERROR)
@@ -77,12 +88,50 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
if (!supportsCoreGraphics)
return NPERR_INCOMPATIBLE_VERSION_ERROR;
-
- browser->setvalue(instance, NPPVpluginDrawingModel, (void *)NPDrawingModelCoreGraphics);
+
+ NPDrawingModel drawingModelToUse = NPDrawingModelCoreGraphics;
+
+ NPBool supportsCoreAnimation;
+ if (browser->getvalue(instance, NPNVsupportsCoreAnimationBool, &supportsCoreAnimation) != NPERR_NO_ERROR)
+ supportsCoreAnimation = false;
+
+#ifndef NP_NO_CARBON
+ NPBool supportsCarbon = false;
+#endif
+ NPBool supportsCocoa = false;
+
+#ifndef NP_NO_CARBON
+ // A browser that doesn't know about NPNVsupportsCarbonBool is one that only supports Carbon event model.
+ if (browser->getvalue(instance, NPNVsupportsCarbonBool, &supportsCarbon) != NPERR_NO_ERROR)
+ supportsCarbon = true;
+#endif
+
+ if (browser->getvalue(instance, NPNVsupportsCocoaBool, &supportsCocoa) != NPERR_NO_ERROR)
+ supportsCocoa = false;
+
+ if (supportsCocoa && !forceCarbon) {
+ eventModel = NPEventModelCocoa;
+#ifndef NP_NO_CARBON
+ } else if (supportsCarbon) {
+ eventModel = NPEventModelCarbon;
+#endif
+ } else {
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+
+ browser->setvalue(instance, NPPVpluginEventModel, (void *)eventModel);
+#endif // XP_MACOSX
PluginObject* obj = (PluginObject*)browser->createobject(instance, getPluginClass());
instance->pdata = obj;
+#if XP_MACOSX
+ obj->eventModel = eventModel;
+#if !defined(BUILDING_ON_TIGER)
+ obj->coreAnimationLayer = 0;
+#endif
+#endif // XP_MACOSX
+
for (int i = 0; i < argc; i++) {
if (strcasecmp(argn[i], "onstreamload") == 0 && !obj->onStreamLoad)
obj->onStreamLoad = strdup(argv[i]);
@@ -113,37 +162,41 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
obj->testDocumentOpenInDestroyStream = TRUE;
else if (strcasecmp(argn[i], "testwindowopen") == 0)
obj->testWindowOpen = TRUE;
- else if (strcasecmp(argn[i], "src") == 0 && strstr(argv[i], "plugin-document-has-focus.pl"))
+ else if (strcasecmp(argn[i], "drawingmodel") == 0) {
+#if XP_MACOSX && !defined(BUILDING_ON_TIGER)
+ const char* value = argv[i];
+ if (strcasecmp(value, "coreanimation") == 0) {
+ if (supportsCoreAnimation)
+ drawingModelToUse = NPDrawingModelCoreAnimation;
+ else
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ } else if (strcasecmp(value, "coregraphics") == 0) {
+ if (supportsCoreGraphics)
+ drawingModelToUse = NPDrawingModelCoreGraphics;
+ else
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ } else
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+#endif
+ } else if (strcasecmp(argn[i], "testGetURLOnDestroy") == 0) {
+#if XP_WIN
+ // FIXME: When https://bugs.webkit.org/show_bug.cgi?id=41831 is fixed, this #ifdef can be removed.
+ obj->testGetURLOnDestroy = TRUE;
+#endif
+ } else if (strcasecmp(argn[i], "src") == 0 && strstr(argv[i], "plugin-document-has-focus.pl"))
obj->testKeyboardFocusForPlugins = TRUE;
}
-
-#ifndef NP_NO_CARBON
- NPBool supportsCarbon = false;
-#endif
- NPBool supportsCocoa = false;
-#ifndef NP_NO_CARBON
- // A browser that doesn't know about NPNVsupportsCarbonBool is one that only supports Carbon event model.
- if (browser->getvalue(instance, NPNVsupportsCarbonBool, &supportsCarbon) != NPERR_NO_ERROR)
- supportsCarbon = true;
+#if XP_MACOSX
+ browser->setvalue(instance, NPPVpluginDrawingModel, (void *)drawingModelToUse);
+#if !defined(BUILDING_ON_TIGER)
+ if (drawingModelToUse == NPDrawingModelCoreAnimation)
+ obj->coreAnimationLayer = createCoreAnimationLayer();
#endif
-
- if (browser->getvalue(instance, NPNVsupportsCocoaBool, &supportsCocoa) != NPERR_NO_ERROR)
- supportsCocoa = false;
-
- if (supportsCocoa && !forceCarbon) {
- obj->eventModel = NPEventModelCocoa;
-#ifndef NP_NO_CARBON
- } else if (supportsCarbon) {
- obj->eventModel = NPEventModelCarbon;
#endif
- } else {
- return NPERR_INCOMPATIBLE_VERSION_ERROR;
- }
-
+
browser->getvalue(instance, NPNVprivateModeBool, (void *)&obj->cachedPrivateBrowsingMode);
- browser->setvalue(instance, NPPVpluginEventModel, (void *)obj->eventModel);
-
+
return NPERR_NO_ERROR;
}
@@ -151,6 +204,9 @@ NPError NPP_Destroy(NPP instance, NPSavedData **save)
{
PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
if (obj) {
+ if (obj->testGetURLOnDestroy)
+ browser->geturlnotify(obj->npp, "about:blank", "", 0);
+
if (obj->onDestroy) {
executeScript(obj, obj->onDestroy);
free(obj->onDestroy);
@@ -171,6 +227,11 @@ NPError NPP_Destroy(NPP instance, NPSavedData **save)
if (obj->logDestroy)
pluginLog(instance, "NPP_Destroy");
+#if XP_MACOSX && !defined(BUILDING_ON_TIGER)
+ if (obj->coreAnimationLayer)
+ CFRelease(obj->coreAnimationLayer);
+#endif
+
browser->releaseobject(&obj->header);
}
return NPERR_NO_ERROR;
@@ -223,7 +284,7 @@ NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream *stream, NPBool se
{
PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
obj->stream = stream;
- *stype = NP_ASFILEONLY;
+ *stype = NP_NORMAL;
if (obj->returnErrorFromNewStream)
return NPERR_GENERIC_ERROR;
@@ -241,8 +302,28 @@ NPError NPP_DestroyStream(NPP instance, NPStream *stream, NPReason reason)
{
PluginObject* obj = (PluginObject*)instance->pdata;
- if (obj->onStreamDestroy)
- executeScript(obj, obj->onStreamDestroy);
+ if (obj->onStreamDestroy) {
+ NPObject* windowObject = 0;
+ NPError error = browser->getvalue(instance, NPNVWindowNPObject, &windowObject);
+
+ if (error == NPERR_NO_ERROR) {
+ NPVariant onStreamDestroyVariant;
+ if (browser->getproperty(instance, windowObject, browser->getstringidentifier(obj->onStreamDestroy), &onStreamDestroyVariant)) {
+ if (NPVARIANT_IS_OBJECT(onStreamDestroyVariant)) {
+ NPObject* onStreamDestroyFunction = NPVARIANT_TO_OBJECT(onStreamDestroyVariant);
+
+ NPVariant reasonVariant;
+ INT32_TO_NPVARIANT(reason, reasonVariant);
+
+ NPVariant result;
+ browser->invokeDefault(instance, onStreamDestroyFunction, &reasonVariant, 1, &result);
+ browser->releasevariantvalue(&result);
+ }
+ browser->releasevariantvalue(&onStreamDestroyVariant);
+ }
+ browser->releaseobject(windowObject);
+ }
+ }
if (obj->testDocumentOpenInDestroyStream) {
testDocumentOpen(instance);
@@ -254,12 +335,17 @@ NPError NPP_DestroyStream(NPP instance, NPStream *stream, NPReason reason)
int32_t NPP_WriteReady(NPP instance, NPStream *stream)
{
- return 0;
+ return 4096;
}
int32_t NPP_Write(NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer)
{
- return 0;
+ PluginObject* obj = (PluginObject*)instance->pdata;
+
+ if (obj->returnNegativeOneFromWrite)
+ return -1;
+
+ return len;
}
void NPP_StreamAsFile(NPP instance, NPStream *stream, const char *fname)
@@ -270,6 +356,7 @@ void NPP_Print(NPP instance, NPPrint *platformPrint)
{
}
+#if XP_MACOSX
#ifndef NP_NO_CARBON
static int16_t handleEventCarbon(NPP instance, PluginObject* obj, EventRecord* event)
{
@@ -401,12 +488,15 @@ static int16_t handleEventCocoa(NPP instance, PluginObject* obj, NPCocoaEvent* e
return 0;
}
+#endif // XP_MACOSX
+
int16_t NPP_HandleEvent(NPP instance, void *event)
{
PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
if (!obj->eventLogging)
return 0;
+#if XP_MACOSX
#ifndef NP_NO_CARBON
if (obj->eventModel == NPEventModelCarbon)
return handleEventCarbon(instance, obj, static_cast<EventRecord*>(event));
@@ -414,6 +504,10 @@ int16_t NPP_HandleEvent(NPP instance, void *event)
assert(obj->eventModel == NPEventModelCocoa);
return handleEventCocoa(instance, obj, static_cast<NPCocoaEvent*>(event));
+#else
+ // FIXME: Implement for other platforms.
+ return 0;
+#endif // XP_MACOSX
}
void NPP_URLNotify(NPP instance, const char *url, NPReason reason, void *notifyData)
@@ -438,6 +532,17 @@ NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
return NPERR_NO_ERROR;
}
+#if XP_MACOSX && !defined(BUILDING_ON_TIGER)
+ if (variable == NPPVpluginCoreAnimationLayer) {
+ if (!obj->coreAnimationLayer)
+ return NPERR_GENERIC_ERROR;
+
+ void **v = (void **)value;
+ *v = (void*)CFRetain(obj->coreAnimationLayer);
+ return NPERR_NO_ERROR;
+ }
+#endif
+
return NPERR_GENERIC_ERROR;
}
diff --git a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def
index ac41e7e..ac41e7e 100644
--- a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.def
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def
diff --git a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc
index a8fbbcd..a8fbbcd 100644
--- a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.rc
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc
diff --git a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj
index 0177d99..34d2f08 100644
--- a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin.vcproj
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj
@@ -368,15 +368,60 @@
</References>
<Files>
<File
- RelativePath=".\main.cpp"
+ RelativePath="..\main.cpp"
>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="..\..\TestNetscapePlugIn.subproj\PluginObject.cpp"
+ RelativePath="..\PluginObject.cpp"
>
</File>
<File
- RelativePath="..\..\TestNetscapePlugIn.subproj\PluginObject.h"
+ RelativePath="..\PluginObject.h"
>
</File>
<File
@@ -396,11 +441,11 @@
>
</File>
<File
- RelativePath="..\..\TestNetscapePlugIn.subproj\TestObject.cpp"
+ RelativePath="..\TestObject.cpp"
>
</File>
<File
- RelativePath="..\..\TestNetscapePlugIn.subproj\TestObject.h"
+ RelativePath="..\TestObject.h"
>
</File>
</Files>
diff --git a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def
index 158fb7c..158fb7c 100644
--- a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/TestNetscapePlugin_debug.def
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def
diff --git a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/resource.h b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/resource.h
index b0ce340..b0ce340 100644
--- a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/resource.h
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/resource.h
diff --git a/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp b/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp
index 889b7b3..7de019d 100644
--- a/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp
+++ b/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp
@@ -1,97 +1,93 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- * (C) 2009 Brent Fulgham <bfulgham@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.
- * 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 "PixelDumpSupportCairo.h"
-
-#include "DumpRenderTree.h"
-#include "PixelDumpSupport.h"
-#include <algorithm>
-#include <ctype.h>
-#include <wtf/Assertions.h>
-#include <wtf/RefPtr.h>
-#include <wtf/RetainPtr.h>
-#include <wtf/StringExtras.h>
-
-#if PLATFORM(WIN)
-#include "MD5.h"
-#endif
-
-using namespace std;
-
-static cairo_status_t writeFunction(void* closure, const unsigned char* data, unsigned int length)
-{
- Vector<unsigned char>* in = reinterpret_cast<Vector<unsigned char>*>(closure);
- in->append(data, length);
- return CAIRO_STATUS_SUCCESS;
-}
-
-static void printPNG(cairo_surface_t* image)
-{
- Vector<unsigned char> pixelData;
- // Only PNG output is supported for now.
- cairo_surface_write_to_png_stream(image, writeFunction, &pixelData);
-
- const size_t dataLength = pixelData.size();
- const unsigned char* data = pixelData.data();
-
- printPNG(data, dataLength);
-}
-
-void computeMD5HashStringForBitmapContext(BitmapContext* context, char hashString[33])
-{
- cairo_t* bitmapContext = context->cairoContext();
- cairo_surface_t* surface = cairo_get_target(bitmapContext);
-
- ASSERT(cairo_image_surface_get_format(surface) == CAIRO_FORMAT_ARGB32); // ImageDiff assumes 32 bit RGBA, we must as well.
-
- size_t pixelsHigh = cairo_image_surface_get_height(surface);
- size_t pixelsWide = cairo_image_surface_get_width(surface);
- size_t bytesPerRow = pixelsWide * cairo_image_surface_get_stride(surface);
-
- MD5_CTX md5Context;
- MD5_Init(&md5Context);
- unsigned char* bitmapData = static_cast<unsigned char*>(cairo_image_surface_get_data(surface));
- for (unsigned row = 0; row < pixelsHigh; row++) {
- MD5_Update(&md5Context, bitmapData, 4 * pixelsWide);
- bitmapData += bytesPerRow;
- }
- unsigned char hash[16];
- MD5_Final(hash, &md5Context);
-
- hashString[0] = '\0';
- for (int i = 0; i < 16; i++)
- snprintf(hashString, 33, "%s%02x", hashString, hash[i]);
-}
-
-void dumpBitmap(BitmapContext* context)
-{
- cairo_surface_t* surface = cairo_get_target(context->cairoContext());
- printPNG(surface);
-}
+/*
+ * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * (C) 2009 Brent Fulgham <bfulgham@webkit.org>
+ * (C) 2010 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 "PixelDumpSupportCairo.h"
+
+#include "DumpRenderTree.h"
+#include "PixelDumpSupport.h"
+#include <algorithm>
+#include <ctype.h>
+#include <wtf/Assertions.h>
+#include <wtf/MD5.h>
+#include <wtf/RefPtr.h>
+#include <wtf/StringExtras.h>
+
+using namespace std;
+
+static cairo_status_t writeFunction(void* closure, const unsigned char* data, unsigned int length)
+{
+ Vector<unsigned char>* in = reinterpret_cast<Vector<unsigned char>*>(closure);
+ in->append(data, length);
+ return CAIRO_STATUS_SUCCESS;
+}
+
+static void printPNG(cairo_surface_t* image)
+{
+ Vector<unsigned char> pixelData;
+ // Only PNG output is supported for now.
+ cairo_surface_write_to_png_stream(image, writeFunction, &pixelData);
+
+ const size_t dataLength = pixelData.size();
+ const unsigned char* data = pixelData.data();
+
+ printPNG(data, dataLength);
+}
+
+void computeMD5HashStringForBitmapContext(BitmapContext* context, char hashString[33])
+{
+ cairo_t* bitmapContext = context->cairoContext();
+ cairo_surface_t* surface = cairo_get_target(bitmapContext);
+
+ ASSERT(cairo_image_surface_get_format(surface) == CAIRO_FORMAT_ARGB32); // ImageDiff assumes 32 bit RGBA, we must as well.
+
+ size_t pixelsHigh = cairo_image_surface_get_height(surface);
+ size_t pixelsWide = cairo_image_surface_get_width(surface);
+ size_t bytesPerRow = cairo_image_surface_get_stride(surface);
+
+ MD5 md5Context;
+ unsigned char* bitmapData = static_cast<unsigned char*>(cairo_image_surface_get_data(surface));
+ for (unsigned row = 0; row < pixelsHigh; row++) {
+ md5Context.addBytes(bitmapData, 4 * pixelsWide);
+ bitmapData += bytesPerRow;
+ }
+ Vector<uint8_t, 16> hash;
+ md5Context.checksum(hash);
+
+ snprintf(hashString, 33, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+ hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7],
+ hash[8], hash[9], hash[10], hash[11], hash[12], hash[13], hash[14], hash[15]);
+}
+
+void dumpBitmap(BitmapContext* context)
+{
+ cairo_surface_t* surface = cairo_get_target(context->cairoContext());
+ printPNG(surface);
+}
diff --git a/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.h b/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.h
index d1a0c3f..fa1f48b 100644
--- a/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.h
+++ b/WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.h
@@ -36,6 +36,8 @@
#if PLATFORM(WIN)
#include <windows.h>
#include <cairo-win32.h>
+#elif PLATFORM(GTK)
+#include <cairo.h>
#endif
#if PLATFORM(WIN)
@@ -68,16 +70,12 @@ private:
BitmapContext(PlatformBitmapBuffer buffer, cairo_t* context)
: m_buffer(buffer)
+ , m_context(context)
{
- if (m_context)
- cairo_destroy(m_context);
-
- m_context = context;
}
PlatformBitmapBuffer m_buffer;
cairo_t* m_context;
-
};
#endif // PixelDumpSupportCairo_h
diff --git a/WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp
new file mode 100644
index 0000000..0ff77a0
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp
@@ -0,0 +1,155 @@
+/*
+ * 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 "DRTDevToolsAgent.h"
+
+#include "DRTDevToolsCallArgs.h"
+#include "DRTDevToolsClient.h"
+
+#include "public/WebCString.h"
+#include "public/WebDevToolsAgent.h"
+#include "public/WebDevToolsMessageData.h"
+#include "public/WebString.h"
+#include "public/WebView.h"
+#include "webkit/support/webkit_support.h"
+
+using namespace WebKit;
+
+DRTDevToolsAgent::DRTDevToolsAgent()
+ : m_callMethodFactory(this)
+ , m_drtDevToolsClient(0)
+ , m_webView(0)
+{
+ static int devToolsAgentCounter = 0;
+
+ m_routingID = ++devToolsAgentCounter;
+ if (m_routingID == 1)
+ WebDevToolsAgent::setMessageLoopDispatchHandler(&DRTDevToolsAgent::dispatchMessageLoop);
+}
+
+void DRTDevToolsAgent::setWebView(WebView* webView)
+{
+ m_webView = webView;
+}
+
+void DRTDevToolsAgent::sendMessageToFrontend(const WebDevToolsMessageData& data)
+{
+ if (m_drtDevToolsClient)
+ m_drtDevToolsClient->asyncCall(DRTDevToolsCallArgs(data));
+}
+
+void DRTDevToolsAgent::forceRepaint()
+{
+}
+
+void DRTDevToolsAgent::runtimeFeatureStateChanged(const WebKit::WebString& feature, bool enabled)
+{
+ // FIXME: implement this.
+}
+
+WebCString DRTDevToolsAgent::injectedScriptSource()
+{
+ return webkit_support::GetDevToolsInjectedScriptSource();
+}
+
+WebCString DRTDevToolsAgent::injectedScriptDispatcherSource()
+{
+ return webkit_support::GetDevToolsInjectedScriptDispatcherSource();
+}
+
+WebCString DRTDevToolsAgent::debuggerScriptSource()
+{
+ return webkit_support::GetDevToolsDebuggerScriptSource();
+}
+
+void DRTDevToolsAgent::asyncCall(const DRTDevToolsCallArgs &args)
+{
+ webkit_support::PostTaskFromHere(
+ m_callMethodFactory.NewRunnableMethod(&DRTDevToolsAgent::call, args));
+}
+
+void DRTDevToolsAgent::call(const DRTDevToolsCallArgs &args)
+{
+ WebDevToolsAgent* agent = webDevToolsAgent();
+ if (agent)
+ agent->dispatchMessageFromFrontend(args.m_data);
+ if (DRTDevToolsCallArgs::callsCount() == 1 && m_drtDevToolsClient)
+ m_drtDevToolsClient->allMessagesProcessed();
+}
+
+WebDevToolsAgent* DRTDevToolsAgent::webDevToolsAgent()
+{
+ if (!m_webView)
+ return 0;
+ return m_webView->devToolsAgent();
+}
+
+void DRTDevToolsAgent::attach(DRTDevToolsClient* client)
+{
+ ASSERT(!m_drtDevToolsClient);
+ m_drtDevToolsClient = client;
+ WebDevToolsAgent* agent = webDevToolsAgent();
+ if (agent)
+ agent->attach();
+}
+
+void DRTDevToolsAgent::detach(DRTDevToolsClient* client)
+{
+ ASSERT(m_drtDevToolsClient);
+ WebDevToolsAgent* agent = webDevToolsAgent();
+ if (agent)
+ agent->detach();
+ m_drtDevToolsClient = 0;
+}
+
+bool DRTDevToolsAgent::setTimelineProfilingEnabled(bool enabled)
+{
+ WebDevToolsAgent* agent = webDevToolsAgent();
+ if (!agent)
+ return false;
+ agent->setTimelineProfilingEnabled(enabled);
+ return true;
+}
+
+bool DRTDevToolsAgent::evaluateInWebInspector(long callID, const std::string& script)
+{
+ WebDevToolsAgent* agent = webDevToolsAgent();
+ if (!agent)
+ return false;
+ agent->evaluateInWebInspector(callID, WebString::fromUTF8(script));
+ return true;
+}
+
+// static method
+void DRTDevToolsAgent::dispatchMessageLoop()
+{
+ webkit_support::DispatchMessageLoop();
+}
diff --git a/WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.h b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.h
new file mode 100644
index 0000000..37fc119
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.h
@@ -0,0 +1,87 @@
+/*
+ * 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 DRTDevToolsAgent_h
+#define DRTDevToolsAgent_h
+
+#include "base/task.h" // FIXME: remove this
+#include "public/WebDevToolsAgentClient.h"
+#include <wtf/Noncopyable.h>
+
+namespace WebKit {
+
+class WebCString;
+class WebDevToolsAgent;
+class WebView;
+struct WebDevToolsMessageData;
+
+} // namespace WebKit
+
+class DRTDevToolsCallArgs;
+class DRTDevToolsClient;
+
+class DRTDevToolsAgent : public WebKit::WebDevToolsAgentClient
+ , public Noncopyable {
+public:
+ DRTDevToolsAgent();
+ virtual ~DRTDevToolsAgent() {}
+
+ void setWebView(WebKit::WebView*);
+
+ // WebDevToolsAgentClient implementation.
+ virtual void sendMessageToFrontend(const WebKit::WebDevToolsMessageData&);
+ virtual int hostIdentifier() { return m_routingID; }
+ virtual void forceRepaint();
+ virtual void runtimeFeatureStateChanged(const WebKit::WebString& feature, bool enabled);
+ virtual WebKit::WebCString injectedScriptSource();
+ virtual WebKit::WebCString injectedScriptDispatcherSource();
+ virtual WebKit::WebCString debuggerScriptSource();
+
+ void asyncCall(const DRTDevToolsCallArgs&);
+
+ void attach(DRTDevToolsClient*);
+ void detach(DRTDevToolsClient*);
+
+ bool evaluateInWebInspector(long callID, const std::string& script);
+ bool setTimelineProfilingEnabled(bool enable);
+
+private:
+ void call(const DRTDevToolsCallArgs&);
+ static void dispatchMessageLoop();
+ WebKit::WebDevToolsAgent* webDevToolsAgent();
+
+ ScopedRunnableMethodFactory<DRTDevToolsAgent> m_callMethodFactory;
+ DRTDevToolsClient* m_drtDevToolsClient;
+ int m_routingID;
+ WebKit::WebDevToolsAgent* m_webDevToolsAgent;
+ WebKit::WebView* m_webView;
+};
+
+#endif // DRTDevToolsAgent_h
diff --git a/WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp
new file mode 100644
index 0000000..dacd6f7
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp
@@ -0,0 +1,36 @@
+/*
+ * 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 "DRTDevToolsCallArgs.h"
+
+// static
+int DRTDevToolsCallArgs::m_callsCount = 0;
+
diff --git a/WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.h b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.h
new file mode 100644
index 0000000..e4a3d48
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsCallArgs.h
@@ -0,0 +1,72 @@
+/*
+ * 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 DRTDevToolsCallArgs_h
+#define DRTDevToolsCallArgs_h
+
+#include "public/WebDevToolsMessageData.h"
+#include "public/WebString.h"
+#include <wtf/Assertions.h>
+
+class DRTDevToolsCallArgs {
+public:
+ DRTDevToolsCallArgs(const WebKit::WebDevToolsMessageData& data)
+ : m_data(data)
+ {
+ ++m_callsCount;
+
+ // The same behaviour as we have in case of IPC.
+ for (size_t i = 0; i < m_data.arguments.size(); ++i) {
+ if (m_data.arguments[i].isNull())
+ m_data.arguments[i] = WebKit::WebString::fromUTF8("");
+ }
+ }
+
+ DRTDevToolsCallArgs(const DRTDevToolsCallArgs& args)
+ : m_data(args.m_data)
+ {
+ ++m_callsCount;
+ }
+
+ ~DRTDevToolsCallArgs()
+ {
+ --m_callsCount;
+ ASSERT(m_callsCount >= 0);
+ }
+
+ static int callsCount() { return m_callsCount; }
+
+ WebKit::WebDevToolsMessageData m_data;
+
+private:
+ static int m_callsCount;
+};
+
+#endif // DRTDevToolsCallArgs_h
diff --git a/WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.cpp b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.cpp
new file mode 100644
index 0000000..e14f008
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.cpp
@@ -0,0 +1,116 @@
+/*
+ * 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 "DRTDevToolsClient.h"
+
+#include "DRTDevToolsAgent.h"
+#include "DRTDevToolsCallArgs.h"
+
+#include "public/WebDevToolsAgent.h"
+#include "public/WebDevToolsFrontend.h"
+#include "public/WebFrame.h"
+#include "public/WebScriptSource.h"
+#include "public/WebString.h"
+#include "public/WebView.h"
+#include "webkit/support/webkit_support.h"
+
+using namespace WebKit;
+
+DRTDevToolsClient::DRTDevToolsClient(DRTDevToolsAgent* agent, WebView* webView)
+ : m_callMethodFactory(this)
+ , m_drtDevToolsAgent(agent)
+ , m_webView(webView)
+{
+ m_webDevToolsFrontend.set(WebDevToolsFrontend::create(m_webView,
+ this,
+ WebString::fromUTF8("en-US")));
+ m_drtDevToolsAgent->attach(this);
+}
+
+DRTDevToolsClient::~DRTDevToolsClient()
+{
+ // There is a chance that the page will be destroyed at detach step of
+ // m_drtDevToolsAgent and we should clean pending requests a bit earlier.
+ m_callMethodFactory.RevokeAll();
+ if (m_drtDevToolsAgent)
+ m_drtDevToolsAgent->detach(this);
+}
+
+void DRTDevToolsClient::sendMessageToAgent(const WebDevToolsMessageData& data)
+{
+ if (m_drtDevToolsAgent)
+ m_drtDevToolsAgent->asyncCall(DRTDevToolsCallArgs(data));
+}
+
+void DRTDevToolsClient::sendDebuggerCommandToAgent(const WebString& command)
+{
+ WebDevToolsAgent::executeDebuggerCommand(command, 1);
+}
+
+void DRTDevToolsClient::activateWindow()
+{
+ // Not implemented.
+}
+
+void DRTDevToolsClient::closeWindow()
+{
+ // Not implemented.
+}
+
+void DRTDevToolsClient::dockWindow()
+{
+ // Not implemented.
+}
+
+void DRTDevToolsClient::undockWindow()
+{
+ // Not implemented.
+}
+
+void DRTDevToolsClient::asyncCall(const DRTDevToolsCallArgs& args)
+{
+ webkit_support::PostTaskFromHere(
+ m_callMethodFactory.NewRunnableMethod(&DRTDevToolsClient::call, args));
+}
+
+void DRTDevToolsClient::call(const DRTDevToolsCallArgs& args)
+{
+ m_webDevToolsFrontend->dispatchMessageFromAgent(args.m_data);
+ if (DRTDevToolsCallArgs::callsCount() == 1)
+ allMessagesProcessed();
+}
+
+void DRTDevToolsClient::allMessagesProcessed()
+{
+ m_webView->mainFrame()->executeScript(
+ WebKit::WebScriptSource(WebString::fromUTF8(
+ "if (window.WebInspector && WebInspector.queuesAreEmpty) WebInspector.queuesAreEmpty();")));
+}
diff --git a/WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.h b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.h
new file mode 100644
index 0000000..f08644b
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.h
@@ -0,0 +1,79 @@
+/*
+ * 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 DRTDevToolsClient_h
+#define DRTDevToolsClient_h
+
+#include "base/task.h" // FIXME: remove this
+#include "public/WebDevToolsFrontendClient.h"
+#include <wtf/Noncopyable.h>
+#include <wtf/OwnPtr.h>
+
+namespace WebKit {
+
+class WebDevToolsFrontend;
+struct WebDevToolsMessageData;
+class WebString;
+class WebView;
+
+} // namespace WebKit
+
+class DRTDevToolsCallArgs;
+class DRTDevToolsAgent;
+
+class DRTDevToolsClient : public WebKit::WebDevToolsFrontendClient
+ , public Noncopyable {
+public:
+ DRTDevToolsClient(DRTDevToolsAgent*, WebKit::WebView*);
+ virtual ~DRTDevToolsClient();
+
+ // WebDevToolsFrontendClient implementation
+ virtual void sendMessageToAgent(const WebKit::WebDevToolsMessageData&);
+ virtual void sendDebuggerCommandToAgent(const WebKit::WebString& command);
+
+ virtual void activateWindow();
+ virtual void closeWindow();
+ virtual void dockWindow();
+ virtual void undockWindow();
+
+ void asyncCall(const DRTDevToolsCallArgs&);
+
+ void allMessagesProcessed();
+
+ private:
+ void call(const DRTDevToolsCallArgs&);
+
+ ScopedRunnableMethodFactory<DRTDevToolsClient> m_callMethodFactory;
+ WebKit::WebView* m_webView;
+ DRTDevToolsAgent* m_drtDevToolsAgent;
+ WTF::OwnPtr<WebKit::WebDevToolsFrontend> m_webDevToolsFrontend;
+};
+
+#endif // DRTDevToolsClient_h
diff --git a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
index 9ba6421..0f37d7e 100644
--- a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
@@ -32,6 +32,7 @@
#include "config.h"
#include "LayoutTestController.h"
+#include "DRTDevToolsAgent.h"
#include "TestShell.h"
#include "WebViewHost.h"
#include "base/string_util.h"
@@ -95,6 +96,7 @@ LayoutTestController::LayoutTestController(TestShell* shell)
bindMethod("objCIdentityIsEqual", &LayoutTestController::objCIdentityIsEqual);
bindMethod("setAlwaysAcceptCookies", &LayoutTestController::setAlwaysAcceptCookies);
bindMethod("showWebInspector", &LayoutTestController::showWebInspector);
+ bindMethod("closeWebInspector", &LayoutTestController::closeWebInspector);
bindMethod("setWindowIsKey", &LayoutTestController::setWindowIsKey);
bindMethod("setTabKeyCyclesThroughElements", &LayoutTestController::setTabKeyCyclesThroughElements);
bindMethod("setUserStyleSheetLocation", &LayoutTestController::setUserStyleSheetLocation);
@@ -555,6 +557,12 @@ void LayoutTestController::showWebInspector(const CppArgumentList&, CppVariant*
result->setNull();
}
+void LayoutTestController::closeWebInspector(const CppArgumentList& args, CppVariant* result)
+{
+ m_shell->closeDevTools();
+ result->setNull();
+}
+
void LayoutTestController::setWindowIsKey(const CppArgumentList& arguments, CppVariant* result)
{
if (arguments.size() > 0 && arguments[0].isBool())
@@ -1245,7 +1253,7 @@ void LayoutTestController::setTimelineProfilingEnabled(const CppArgumentList& ar
result->setNull();
if (arguments.size() < 1 || !arguments[0].isBool())
return;
- // FIXME: Should call TestShellDevToolsAgent::setTimelineProfilingEnabled().
+ m_shell->drtDevToolsAgent()->setTimelineProfilingEnabled(arguments[0].toBoolean());
}
void LayoutTestController::evaluateInWebInspector(const CppArgumentList& arguments, CppVariant* result)
@@ -1253,7 +1261,7 @@ void LayoutTestController::evaluateInWebInspector(const CppArgumentList& argumen
result->setNull();
if (arguments.size() < 2 || !arguments[0].isInt32() || !arguments[1].isString())
return;
- // FIXME: Should call TestShellDevToolsAgent::evaluateInWebInspector().
+ m_shell->drtDevToolsAgent()->evaluateInWebInspector(arguments[0].toInt32(), arguments[1].toString());
}
void LayoutTestController::forceRedSelectionColors(const CppArgumentList& arguments, CppVariant* result)
@@ -1265,17 +1273,22 @@ void LayoutTestController::forceRedSelectionColors(const CppArgumentList& argume
void LayoutTestController::addUserScript(const CppArgumentList& arguments, CppVariant* result)
{
result->setNull();
- if (arguments.size() < 2 || !arguments[0].isString() || !arguments[1].isBool())
+ if (arguments.size() < 3 || !arguments[0].isString() || !arguments[1].isBool() || !arguments[2].isBool())
return;
- m_shell->webView()->addUserScript(cppVariantToWebString(arguments[0]), arguments[1].toBoolean());
+ WebView::addUserScript(
+ cppVariantToWebString(arguments[0]), WebVector<WebString>(),
+ arguments[1].toBoolean() ? WebView::UserScriptInjectAtDocumentStart : WebView::UserScriptInjectAtDocumentEnd,
+ arguments[2].toBoolean() ? WebView::UserContentInjectInAllFrames : WebView::UserContentInjectInTopFrameOnly);
}
void LayoutTestController::addUserStyleSheet(const CppArgumentList& arguments, CppVariant* result)
{
result->setNull();
- if (arguments.size() < 1 || !arguments[0].isString())
+ if (arguments.size() < 2 || !arguments[0].isString() || !arguments[1].isBool())
return;
- m_shell->webView()->addUserStyleSheet(cppVariantToWebString(arguments[0]));
+ WebView::addUserStyleSheet(
+ cppVariantToWebString(arguments[0]), WebVector<WebString>(),
+ arguments[2].toBoolean() ? WebView::UserContentInjectInAllFrames : WebView::UserContentInjectInTopFrameOnly);
}
void LayoutTestController::setEditingBehavior(const CppArgumentList& arguments, CppVariant* results)
diff --git a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
index 22741d5..5d65726 100644
--- a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
+++ b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
@@ -129,6 +129,7 @@ public:
// Shows DevTools window.
void showWebInspector(const CppArgumentList&, CppVariant*);
+ void closeWebInspector(const CppArgumentList&, CppVariant*);
// Gives focus to the window.
void setWindowIsKey(const CppArgumentList&, CppVariant*);
diff --git a/WebKitTools/DumpRenderTree/chromium/TestShell.cpp b/WebKitTools/DumpRenderTree/chromium/TestShell.cpp
index 52f1e7d..a4b161a 100644
--- a/WebKitTools/DumpRenderTree/chromium/TestShell.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/TestShell.cpp
@@ -31,6 +31,8 @@
#include "config.h"
#include "TestShell.h"
+#include "DRTDevToolsAgent.h"
+#include "DRTDevToolsClient.h"
#include "LayoutTestController.h"
#include "WebViewHost.h"
#include "base/md5.h" // FIXME: Wrap by webkit_support.
@@ -81,6 +83,7 @@ TestShell::TestShell(bool testShellMode)
, m_focusedWidget(0)
, m_testShellMode(testShellMode)
, m_allowExternalPages(false)
+ , m_devTools(0)
{
WebRuntimeFeatures::enableGeolocation(true);
m_accessibilityController.set(new AccessibilityController(this));
@@ -97,12 +100,17 @@ TestShell::TestShell(bool testShellMode)
// timed-out DRT process was crashed.
m_timeout = 30 * 1000;
+ m_drtDevToolsAgent.set(new DRTDevToolsAgent);
m_webViewHost = createWebView();
m_webView = m_webViewHost->webView();
+ m_drtDevToolsAgent->setWebView(m_webView);
}
TestShell::~TestShell()
{
+ // Note: DevTools are closed together with all the other windows in the
+ // windows list.
+
loadURL(GURL("about:blank"));
// Call GC twice to clean up garbage.
callJSGC();
@@ -112,6 +120,34 @@ TestShell::~TestShell()
m_webView->close();
}
+void TestShell::createDRTDevToolsClient(DRTDevToolsAgent* agent)
+{
+ m_drtDevToolsClient.set(new DRTDevToolsClient(agent, m_devTools->webView()));
+}
+
+void TestShell::showDevTools()
+{
+ if (!m_devTools) {
+ WebURL url = webkit_support::GetDevToolsPathAsURL();
+ if (!url.isValid()) {
+ ASSERT(false);
+ return;
+ }
+ m_devTools = createNewWindow(url);
+ ASSERT(m_devTools);
+ createDRTDevToolsClient(m_drtDevToolsAgent.get());
+ }
+ m_devTools->show(WebKit::WebNavigationPolicyNewWindow);
+}
+
+void TestShell::closeDevTools()
+{
+ if (m_devTools) {
+ closeWindow(m_devTools);
+ m_devTools = 0;
+ }
+}
+
void TestShell::resetWebSettings(WebView& webView)
{
// Match the settings used by Mac DumpRenderTree, with the exception of
@@ -206,6 +242,9 @@ void TestShell::runFileTest(const TestParams& params)
|| testUrl.find("loading\\") != string::npos)
m_layoutTestController->setShouldDumpFrameLoadCallbacks(true);
+ if (inspectorTestMode)
+ showDevTools();
+
m_printer->handleTestHeader(testUrl.c_str());
loadURL(m_params.testUrl);
@@ -586,7 +625,7 @@ WebViewHost* TestShell::createWebView()
WebViewHost* TestShell::createNewWindow(const WebURL& url)
{
WebViewHost* host = new WebViewHost(this);
- WebView* view = WebView::create(host, 0);
+ WebView* view = WebView::create(host, m_drtDevToolsAgent.get());
host->setWebWidget(view);
resetWebSettings(*view);
view->initializeMainFrame(host);
diff --git a/WebKitTools/DumpRenderTree/chromium/TestShell.h b/WebKitTools/DumpRenderTree/chromium/TestShell.h
index 2397246..0f74ee1 100644
--- a/WebKitTools/DumpRenderTree/chromium/TestShell.h
+++ b/WebKitTools/DumpRenderTree/chromium/TestShell.h
@@ -28,6 +28,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#ifndef TestShell_h
+#define TestShell_h
+
#include "AccessibilityController.h"
#include "EventSender.h"
#include "LayoutTestController.h"
@@ -44,6 +47,7 @@
// various objects. Only one instance is created in one DRT process.
namespace WebKit {
+class WebDevToolsAgentClient;
class WebFrame;
class WebNotificationPresenter;
class WebPreferences;
@@ -54,6 +58,10 @@ namespace skia {
class PlatformCanvas;
}
+class DRTDevToolsAgent;
+class DRTDevToolsCallArgs;
+class DRTDevToolsClient;
+
struct TestParams {
bool dumpTree;
bool dumpPixels;
@@ -73,6 +81,7 @@ class TestShell {
public:
TestShell(bool testShellMode);
~TestShell();
+
// The main WebView.
WebKit::WebView* webView() const { return m_webView; }
// Returns the host for the main WebView.
@@ -126,11 +135,18 @@ public:
void closeRemainingWindows();
int windowCount();
static void resizeWindowForTest(WebViewHost*, const WebKit::WebURL&);
- void showDevTools() {} // FIXME: imeplement this.
+
+ void showDevTools();
+ void closeDevTools();
+
+ DRTDevToolsAgent* drtDevToolsAgent() { return m_drtDevToolsAgent.get(); }
+ DRTDevToolsClient* drtDevToolsClient() { return m_drtDevToolsClient.get(); }
static const int virtualWindowBorder = 3;
private:
+ void createDRTDevToolsClient(DRTDevToolsAgent*);
+
static void resetWebSettings(WebKit::WebView&);
void dump();
std::string dumpAllBackForwardLists();
@@ -143,6 +159,9 @@ private:
WebKit::WebWidget* m_focusedWidget;
bool m_testShellMode;
WebViewHost* m_webViewHost;
+ WebViewHost* m_devTools;
+ OwnPtr<DRTDevToolsAgent> m_drtDevToolsAgent;
+ OwnPtr<DRTDevToolsClient> m_drtDevToolsClient;
OwnPtr<AccessibilityController> m_accessibilityController;
OwnPtr<EventSender> m_eventSender;
OwnPtr<LayoutTestController> m_layoutTestController;
@@ -166,3 +185,5 @@ private:
};
void platformInit();
+
+#endif // TestShell_h
diff --git a/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.cpp b/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.cpp
index df12476..202248a 100755
--- a/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.cpp
@@ -332,6 +332,11 @@ void WebThemeControlDRT::draw()
nestedBoxes(checkIndent, checkIndent, checkIndent, checkIndent, m_bgColor, m_fgColor);
break;
+ case IndeterminateCheckboxType:
+ // Indeterminate checkbox is a box containing '-'.
+ nestedBoxes(checkIndent, halfHeight, checkIndent, halfHeight, m_bgColor, m_fgColor);
+ break;
+
case UncheckedRadioType:
circle(SkIntToScalar(halfHeight), m_bgColor);
break;
diff --git a/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.h b/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.h
index 1f73610..38831d9 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.h
+++ b/WebKitTools/DumpRenderTree/chromium/WebThemeControlDRT.h
@@ -98,6 +98,7 @@ public:
PushButtonType,
UncheckedBoxType,
CheckedBoxType,
+ IndeterminateCheckboxType,
UncheckedRadioType,
CheckedRadioType,
HorizontalScrollTrackBackType,
diff --git a/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp b/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp
index b3092cc..c28da1f 100755
--- a/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebThemeEngineDRT.cpp
@@ -147,6 +147,32 @@ void WebThemeEngineDRT::paintButton(WebCanvas* canvas,
cstate = WebThemeControlDRT::DisabledState;
break;
+ case CBS_MIXEDNORMAL:
+ // Classic theme can't represent mixed state checkbox. We assume
+ // it's equivalent to unchecked.
+ ASSERT(classicState == DFCS_BUTTONCHECK);
+ ctype = WebThemeControlDRT::IndeterminateCheckboxType;
+ cstate = WebThemeControlDRT::NormalState;
+ break;
+
+ case CBS_MIXEDHOT:
+ ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT));
+ ctype = WebThemeControlDRT::IndeterminateCheckboxType;
+ cstate = WebThemeControlDRT::HotState;
+ break;
+
+ case CBS_MIXEDPRESSED:
+ ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED));
+ ctype = WebThemeControlDRT::IndeterminateCheckboxType;
+ cstate = WebThemeControlDRT::PressedState;
+ break;
+
+ case CBS_MIXEDDISABLED:
+ ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE));
+ ctype = WebThemeControlDRT::IndeterminateCheckboxType;
+ cstate = WebThemeControlDRT::DisabledState;
+ break;
+
default:
ASSERT_NOT_REACHED();
break;
diff --git a/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp b/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp
index ef821ce..c57aeb5 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp
@@ -57,6 +57,7 @@
#include "skia/ext/platform_canvas.h"
#include "webkit/support/webkit_support.h"
#include <wtf/Assertions.h>
+#include <wtf/PassOwnPtr.h>
using namespace WebCore;
using namespace WebKit;
@@ -747,7 +748,7 @@ void WebViewHost::didCancelClientRedirect(WebFrame* frame)
void WebViewHost::didCreateDataSource(WebFrame*, WebDataSource* ds)
{
- ds->setExtraData(m_pendingExtraData.release());
+ ds->setExtraData(m_pendingExtraData.leakPtr());
}
void WebViewHost::didStartProvisionalLoad(WebFrame* frame)
@@ -862,7 +863,7 @@ void WebViewHost::didFinishLoad(WebFrame* frame)
void WebViewHost::didNavigateWithinPage(WebFrame* frame, bool isNewNavigation)
{
- frame->dataSource()->setExtraData(m_pendingExtraData.release());
+ frame->dataSource()->setExtraData(m_pendingExtraData.leakPtr());
updateForCommittedLoad(frame, isNewNavigation);
}
@@ -1193,7 +1194,7 @@ void WebViewHost::updateURL(WebFrame* frame)
if (!historyItem.isNull())
entry->setContentState(historyItem);
- navigationController()->didNavigateToEntry(entry.release());
+ navigationController()->didNavigateToEntry(entry.leakPtr());
updateAddressBar(frame->view());
m_lastPageIdUpdated = max(m_lastPageIdUpdated, m_pageId);
}
@@ -1293,12 +1294,12 @@ void WebViewHost::paintInvalidatedRegion()
WebSize widgetSize = webWidget()->size();
WebRect clientRect(0, 0, widgetSize.width, widgetSize.height);
- // Paint the canvas if necessary. Allow painting to generate extra rects the
- // first time we call it. This is necessary because some WebCore rendering
+ // Paint the canvas if necessary. Allow painting to generate extra rects
+ // for the first two calls. This is necessary because some WebCore rendering
// objects update their layout only when painted.
// Store the total area painted in total_paint. Then tell the gdk window
// to update that area after we're done painting it.
- for (int i = 0; i < 2; ++i) {
+ for (int i = 0; i < 3; ++i) {
// m_paintRect = intersect(m_paintRect , clientRect)
int left = max(m_paintRect.x, clientRect.x);
int top = max(m_paintRect.y, clientRect.y);
@@ -1314,7 +1315,7 @@ void WebViewHost::paintInvalidatedRegion()
WebRect rect(m_paintRect);
m_paintRect = WebRect();
paintRect(rect);
- if (i == 1)
+ if (i >= 1)
LOG_ERROR("painting caused additional invalidations");
}
ASSERT(m_paintRect.isEmpty());
diff --git a/WebKitTools/DumpRenderTree/chromium/config.h b/WebKitTools/DumpRenderTree/chromium/config.h
index 6029532..7dfda18 100644
--- a/WebKitTools/DumpRenderTree/chromium/config.h
+++ b/WebKitTools/DumpRenderTree/chromium/config.h
@@ -44,8 +44,10 @@
#include <wtf/Platform.h>
-// JS_EXPORTDATA is needed to inlucde wtf/WTFString.h.
#if OS(WINDOWS) && !COMPILER(GCC)
+// Allow 'this' to be used in base member initializer list.
+#pragma warning(disable : 4355)
+// JS_EXPORTDATA is needed to inlucde wtf/WTFString.h.
#define JS_EXPORTDATA __declspec(dllimport)
#else
#define JS_EXPORTDATA
diff --git a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
index d79addf..da05804 100644
--- a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
@@ -36,23 +36,22 @@
#include "EventSender.h"
#include "GCController.h"
#include "LayoutTestController.h"
+#include "PixelDumpSupport.h"
#include "WorkQueue.h"
#include "WorkQueueItem.h"
-
+#include <JavaScriptCore/JavaScript.h>
+#include <cassert>
+#include <cstdlib>
+#include <cstring>
+#include <getopt.h>
#include <gtk/gtk.h>
#include <webkit/webkit.h>
-#include <JavaScriptCore/JavaScript.h>
-
#include <wtf/Assertions.h>
#if PLATFORM(X11)
#include <fontconfig/fontconfig.h>
#endif
-#include <cassert>
-#include <getopt.h>
-#include <stdlib.h>
-#include <string.h>
using namespace std;
@@ -422,7 +421,7 @@ void dump()
if (dumpPixels) {
if (!gLayoutTestController->dumpAsText() && !gLayoutTestController->dumpDOMAsWebArchive() && !gLayoutTestController->dumpSourceAsWebArchive()) {
- // FIXME: Add support for dumping pixels
+ dumpWebViewAsPixelsAndCompareWithExpected(gLayoutTestController->expectedPixelHash());
}
}
diff --git a/WebKitTools/DumpRenderTree/gtk/ImageDiff.cpp b/WebKitTools/DumpRenderTree/gtk/ImageDiff.cpp
new file mode 100644
index 0000000..c40b232
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/gtk/ImageDiff.cpp
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2009 Zan Dobersek <zandobersek@gmail.com>
+ * Copyright (C) 2010 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 <algorithm>
+#include <cmath>
+#include <cstdio>
+#include <cstring>
+#include <gdk/gdk.h>
+
+using namespace std;
+
+static double tolerance = 0;
+static GOptionEntry commandLineOptionEntries[] =
+{
+ { "tolerance", 0, 0, G_OPTION_ARG_DOUBLE, &tolerance, "Percentage difference between images before considering them different", "T" },
+ { 0, 0, 0, G_OPTION_ARG_NONE, 0, 0, 0 },
+};
+
+GdkPixbuf* readPixbufFromStdin(long imageSize)
+{
+ unsigned char imageBuffer[2048];
+ GdkPixbufLoader* loader = gdk_pixbuf_loader_new_with_type("png", 0);
+ GError* error = 0;
+
+ while (imageSize > 0) {
+ size_t bytesToRead = min<int>(imageSize, 2048);
+ size_t bytesRead = fread(imageBuffer, 1, bytesToRead, stdin);
+
+ if (!gdk_pixbuf_loader_write(loader, reinterpret_cast<const guchar*>(imageBuffer), bytesRead, &error)) {
+ g_error_free(error);
+ gdk_pixbuf_loader_close(loader, 0);
+ g_object_unref(loader);
+ return 0;
+ }
+
+ imageSize -= static_cast<int>(bytesRead);
+ }
+
+ gdk_pixbuf_loader_close(loader, 0);
+ GdkPixbuf* decodedImage = gdk_pixbuf_loader_get_pixbuf(loader);
+ g_object_ref(decodedImage);
+ return decodedImage;
+}
+
+GdkPixbuf* differenceImageFromDifferenceBuffer(unsigned char* buffer, int width, int height)
+{
+ GdkPixbuf* image = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height);
+ if (!image)
+ return image;
+
+ int rowStride = gdk_pixbuf_get_rowstride(image);
+ unsigned char* diffPixels = gdk_pixbuf_get_pixels(image);
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ unsigned char* diffPixel = diffPixels + (y * rowStride) + (x * 3);
+ diffPixel[0] = diffPixel[1] = diffPixel[2] = *buffer++;
+ }
+ }
+
+ return image;
+}
+
+float calculateDifference(GdkPixbuf* baselineImage, GdkPixbuf* actualImage, GdkPixbuf** differenceImage)
+{
+ int width = gdk_pixbuf_get_width(actualImage);
+ int height = gdk_pixbuf_get_height(actualImage);
+ int numberOfChannels = gdk_pixbuf_get_n_channels(actualImage);
+ if ((width != gdk_pixbuf_get_width(baselineImage))
+ || (height != gdk_pixbuf_get_height(baselineImage))
+ || (numberOfChannels != gdk_pixbuf_get_n_channels(baselineImage))
+ || (gdk_pixbuf_get_has_alpha(actualImage) != gdk_pixbuf_get_has_alpha(baselineImage))) {
+ fprintf(stderr, "Error, test and reference image have different properties.\n");
+ return 100; // Completely different.
+ }
+
+ unsigned char* diffBuffer = static_cast<unsigned char*>(malloc(width * height));
+ float count = 0;
+ float sum = 0;
+ float maxDistance = 0;
+ int actualRowStride = gdk_pixbuf_get_rowstride(actualImage);
+ int baseRowStride = gdk_pixbuf_get_rowstride(baselineImage);
+ unsigned char* actualPixels = gdk_pixbuf_get_pixels(actualImage);
+ unsigned char* basePixels = gdk_pixbuf_get_pixels(baselineImage);
+ unsigned char* currentDiffPixel = diffBuffer;
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ unsigned char* actualPixel = actualPixels + (y * actualRowStride) + (x * numberOfChannels);
+ unsigned char* basePixel = basePixels + (y * baseRowStride) + (x * numberOfChannels);
+
+ float red = (actualPixel[0] - basePixel[0]) / max<float>(255 - basePixel[0], basePixel[0]);
+ float green = (actualPixel[1] - basePixel[1]) / max<float>(255 - basePixel[1], basePixel[1]);
+ float blue = (actualPixel[2] - basePixel[2]) / max<float>(255 - basePixel[2], basePixel[2]);
+ float alpha = (actualPixel[3] - basePixel[3]) / max<float>(255 - basePixel[3], basePixel[3]);
+ float distance = sqrtf(red * red + green * green + blue * blue + alpha * alpha) / 2.0f;
+
+ *currentDiffPixel++ = (unsigned char)(distance * 255.0f);
+
+ if (distance >= 1.0f / 255.0f) {
+ count += 1.0f;
+ sum += distance;
+ maxDistance = max<float>(maxDistance, distance);
+ }
+ }
+ }
+
+ // Compute the difference as a percentage combining both the number of
+ // different pixels and their difference amount i.e. the average distance
+ // over the entire image
+ float difference = 0;
+ if (count > 0.0f)
+ difference = 100.0f * sum / (height * width);
+ if (difference <= tolerance)
+ difference = 0;
+ else {
+ difference = roundf(difference * 100.0f) / 100.0f;
+ difference = max(difference, 0.01f); // round to 2 decimal places
+ *differenceImage = differenceImageFromDifferenceBuffer(diffBuffer, width, height);
+ }
+
+ free(diffBuffer);
+ return difference;
+}
+
+void printImage(GdkPixbuf* image)
+{
+ char* buffer;
+ gsize bufferSize;
+ GError* error = 0;
+ if (!gdk_pixbuf_save_to_buffer(image, &buffer, &bufferSize, "png", &error, NULL)) {
+ g_error_free(error);
+ return; // Don't bail out, as we can still use the percentage output.
+ }
+
+ printf("Content-Length: %"G_GSIZE_FORMAT"\n", bufferSize);
+ fwrite(buffer, 1, bufferSize, stdout);
+}
+
+void printImageDifferences(GdkPixbuf* baselineImage, GdkPixbuf* actualImage)
+{
+ GdkPixbuf* differenceImage = 0;
+ float difference = calculateDifference(baselineImage, actualImage, &differenceImage);
+ if (difference > 0.0f) {
+ if (differenceImage) {
+ printImage(differenceImage);
+ g_object_unref(differenceImage);
+ }
+ printf("diff: %01.2f%% failed\n", difference);
+ } else {
+ printf("diff: %01.2f%% passed\n", difference);
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ gdk_init(&argc, &argv);
+
+ GError* error = 0;
+ GOptionContext* context = g_option_context_new("- compare two image files, printing their percentage difference and the difference image to stdout");
+ g_option_context_add_main_entries(context, commandLineOptionEntries, 0);
+ if (!g_option_context_parse(context, &argc, &argv, &error)) {
+ printf("Option parsing failed: %s\n", error->message);
+ g_error_free(error);
+ return 1;
+ }
+
+ GdkPixbuf* actualImage = 0;
+ GdkPixbuf* baselineImage = 0;
+ char buffer[2048];
+ while (fgets(buffer, sizeof(buffer), stdin)) {
+ // Convert the first newline into a NUL character so that strtok doesn't produce it.
+ char* newLineCharacter = strchr(buffer, '\n');
+ if (newLineCharacter)
+ *newLineCharacter = '\0';
+
+ if (!strncmp("Content-Length: ", buffer, 16)) {
+ char* context;
+ strtok_r(buffer, " ", &context);
+ long imageSize = strtol(strtok_r(0, " ", &context), 0, 10);
+
+ if (imageSize > 0 && !actualImage) {
+ if (!(actualImage = readPixbufFromStdin(imageSize))) {
+ printf("Error, could not read actual image.\n");
+ return 1;
+ }
+ } else if (imageSize > 0 && !baselineImage) {
+ if (!(baselineImage = readPixbufFromStdin(imageSize))) {
+ printf("Error, could not read baseline image.\n");
+ return 1;
+ }
+ } else {
+ printf("Error, image size must be specified..\n");
+ return 1;
+ }
+ }
+
+ if (actualImage && baselineImage) {
+ printImageDifferences(baselineImage, actualImage);
+ g_object_unref(actualImage);
+ g_object_unref(baselineImage);
+ actualImage = 0;
+ baselineImage = 0;
+ }
+
+ fflush(stdout);
+ }
+
+ return 0;
+}
diff --git a/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp b/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
index 1814933..5c942d3 100644
--- a/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
@@ -624,12 +624,12 @@ void LayoutTestController::overridePreference(JSStringRef key, JSStringRef value
g_free(strValue);
}
-void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart)
+void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart, bool allFrames)
{
printf("LayoutTestController::addUserScript not implemented.\n");
}
-void LayoutTestController::addUserStyleSheet(JSStringRef source)
+void LayoutTestController::addUserStyleSheet(JSStringRef source, bool allFrames)
{
printf("LayoutTestController::addUserStyleSheet not implemented.\n");
}
diff --git a/WebKitTools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp b/WebKitTools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp
new file mode 100644
index 0000000..f0f461c
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2009 Zan Dobersek <zandobersek@gmail.com>
+ * Copyright (C) 2010 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 "DumpRenderTree.h"
+#include "PixelDumpSupportCairo.h"
+#include <webkit/webkit.h>
+
+PassRefPtr<BitmapContext> createBitmapContextFromWebView(bool, bool, bool, bool)
+{
+ WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
+ GdkPixmap* pixmap = gtk_widget_get_snapshot(GTK_WIDGET(view), 0);
+ gint width, height;
+ gdk_drawable_get_size(GDK_DRAWABLE(pixmap), &width, &height);
+
+ cairo_surface_t* imageSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+ cairo_t* context = cairo_create(imageSurface);
+ gdk_cairo_set_source_pixmap(context, pixmap, 0, 0);
+ cairo_paint(context);
+ g_object_unref(pixmap);
+
+ return BitmapContext::createByAdoptingBitmapAndContext(0, context);
+}
diff --git a/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm b/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
index 939398d..ba0631d 100644
--- a/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
+++ b/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
@@ -1000,9 +1000,9 @@ AccessibilityUIElement AccessibilityUIElement::cellForColumnAndRow(unsigned col,
JSStringRef AccessibilityUIElement::selectedTextRange()
{
- NSRange range = NSMakeRange(0,0);
+ NSRange range = NSMakeRange(NSNotFound, 0);
BEGIN_AX_OBJC_EXCEPTIONS
- NSNumber *indexRange = [m_element accessibilityAttributeValue:NSAccessibilitySelectedTextRangeAttribute];
+ NSValue *indexRange = [m_element accessibilityAttributeValue:NSAccessibilitySelectedTextRangeAttribute];
if (indexRange)
range = [indexRange rangeValue];
NSMutableString *rangeDescription = [NSMutableString stringWithFormat:@"{%d, %d}",range.location, range.length];
diff --git a/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm b/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
index 9b044c3..aec4c19 100644
--- a/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
+++ b/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
@@ -627,18 +627,18 @@ void LayoutTestController::setScrollbarPolicy(JSStringRef orientation, JSStringR
// FIXME: implement
}
-void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart)
+void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart, bool allFrames)
{
RetainPtr<CFStringRef> sourceCF(AdoptCF, JSStringCopyCFString(kCFAllocatorDefault, source));
NSString *sourceNS = (NSString *)sourceCF.get();
- [WebView _addUserScriptToGroup:@"org.webkit.DumpRenderTree" world:[WebScriptWorld world] source:sourceNS url:nil whitelist:nil blacklist:nil injectionTime:(runAtStart ? WebInjectAtDocumentStart : WebInjectAtDocumentEnd)];
+ [WebView _addUserScriptToGroup:@"org.webkit.DumpRenderTree" world:[WebScriptWorld world] source:sourceNS url:nil whitelist:nil blacklist:nil injectionTime:(runAtStart ? WebInjectAtDocumentStart : WebInjectAtDocumentEnd) injectedFrames:(allFrames ? WebInjectInAllFrames : WebInjectInTopFrameOnly)];
}
-void LayoutTestController::addUserStyleSheet(JSStringRef source)
+void LayoutTestController::addUserStyleSheet(JSStringRef source, bool allFrames)
{
RetainPtr<CFStringRef> sourceCF(AdoptCF, JSStringCopyCFString(kCFAllocatorDefault, source));
NSString *sourceNS = (NSString *)sourceCF.get();
- [WebView _addUserStyleSheetToGroup:@"org.webkit.DumpRenderTree" world:[WebScriptWorld world] source:sourceNS url:nil whitelist:nil blacklist:nil];
+ [WebView _addUserStyleSheetToGroup:@"org.webkit.DumpRenderTree" world:[WebScriptWorld world] source:sourceNS url:nil whitelist:nil blacklist:nil injectedFrames:(allFrames ? WebInjectInAllFrames : WebInjectInTopFrameOnly)];
}
void LayoutTestController::setDeveloperExtrasEnabled(bool enabled)
diff --git a/WebKitTools/DumpRenderTree/mac/ResourceLoadDelegate.mm b/WebKitTools/DumpRenderTree/mac/ResourceLoadDelegate.mm
index 9244110..fca65f9 100644
--- a/WebKitTools/DumpRenderTree/mac/ResourceLoadDelegate.mm
+++ b/WebKitTools/DumpRenderTree/mac/ResourceLoadDelegate.mm
@@ -166,8 +166,10 @@ using namespace std;
- (void)webView:(WebView *)wv resource:(id)identifier didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge fromDataSource:(WebDataSource *)dataSource
{
- if (!gLayoutTestController->handlesAuthenticationChallenges())
+ if (!gLayoutTestController->handlesAuthenticationChallenges()) {
+ [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];
return;
+ }
const char* user = gLayoutTestController->authenticationUsername().c_str();
NSString *nsUser = [NSString stringWithFormat:@"%s", user ? user : ""];
diff --git a/WebKitTools/DumpRenderTree/mac/UIDelegate.mm b/WebKitTools/DumpRenderTree/mac/UIDelegate.mm
index 83bf0c6..3dc378a 100644
--- a/WebKitTools/DumpRenderTree/mac/UIDelegate.mm
+++ b/WebKitTools/DumpRenderTree/mac/UIDelegate.mm
@@ -183,6 +183,12 @@ DumpRenderTreeDraggingInfo *draggingInfo = nil;
return NO;
}
+- (BOOL)webView:(WebView *)webView didPressMissingPluginButton:(DOMElement *)element
+{
+ printf("MISSING PLUGIN BUTTON PRESSED\n");
+ return TRUE;
+}
+
- (void)dealloc
{
[draggingInfo release];
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
index 008190f..dd11428 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -687,5 +687,26 @@ void LayoutTestController::evaluateScriptInIsolatedWorld(int worldID, const QStr
DumpRenderTreeSupportQt::evaluateScriptInIsolatedWorld(m_drt->webPage()->mainFrame(), worldID, script);
}
+bool LayoutTestController::isPageBoxVisible(int pageIndex)
+{
+ return DumpRenderTreeSupportQt::isPageBoxVisible(m_drt->webPage()->mainFrame(), pageIndex);
+}
+
+QString LayoutTestController::pageSizeAndMarginsInPixels(int pageIndex, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft)
+{
+ return DumpRenderTreeSupportQt::pageSizeAndMarginsInPixels(m_drt->webPage()->mainFrame(), pageIndex,
+ width, height, marginTop, marginRight, marginBottom, marginLeft);
+}
+
+QString LayoutTestController::pageProperty(const QString& propertyName, int pageNumber)
+{
+ return DumpRenderTreeSupportQt::pageProperty(m_drt->webPage()->mainFrame(), propertyName, pageNumber);
+}
+
+void LayoutTestController::addUserStyleSheet(const QString& sourceCode)
+{
+ DumpRenderTreeSupportQt::addUserStyleSheet(m_drt->webPage(), sourceCode);
+}
+
const unsigned LayoutTestController::maxViewWidth = 800;
const unsigned LayoutTestController::maxViewHeight = 600;
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
index ed1a232..76bc802 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
@@ -217,6 +217,10 @@ public slots:
void setEditingBehavior(const QString& editingBehavior);
void evaluateScriptInIsolatedWorld(int worldID, const QString& script);
+ bool isPageBoxVisible(int pageIndex);
+ QString pageSizeAndMarginsInPixels(int pageIndex, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft);
+ QString pageProperty(const QString& propertyName, int pageNumber);
+ void addUserStyleSheet(const QString& sourceCode);
private slots:
void processWork();
diff --git a/WebKitTools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro b/WebKitTools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
index 9b19231..6ab22fc 100644
--- a/WebKitTools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
+++ b/WebKitTools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro
@@ -1,7 +1,7 @@
TEMPLATE = lib
TARGET = TestNetscapePlugIn
-VPATH = ../../unix/TestNetscapePlugin ../../TestNetscapePlugIn.subproj
+VPATH = ../../unix/TestNetscapePlugin ../../TestNetscapePlugIn
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
include(../../../../WebKit.pri)
@@ -10,7 +10,7 @@ DESTDIR = $$OUTPUT_DIR/lib/plugins
mac {
CONFIG += plugin
CONFIG += plugin_bundle
- QMAKE_INFO_PLIST = ../../TestNetscapePlugIn.subproj/Info.plist
+ QMAKE_INFO_PLIST = ../../TestNetscapePlugIn/mac/Info.plist
QMAKE_PLUGIN_BUNDLE_NAME = $$TARGET
QMAKE_BUNDLE_LOCATION += "Contents/MacOS"
@@ -23,14 +23,15 @@ INCLUDEPATH += ../../../../JavaScriptCore \
../../unix/TestNetscapePlugin/ForwardingHeaders/WebKit \
../../../../WebCore \
../../../../WebCore/bridge \
- ../../TestNetscapePlugIn.subproj
+ ../../TestNetscapePlugIn
SOURCES = PluginObject.cpp \
TestObject.cpp
mac {
- SOURCES += ../../TestNetscapePlugIn.subproj/main.cpp
- LIBS += -framework Carbon
+ SOURCES += ../../TestNetscapePlugIn/main.cpp
+ OBJECTIVE_SOURCES += PluginObjectMac.mm
+ LIBS += -framework Carbon -framework Cocoa -framework QuartzCore
} else {
SOURCES += ../../unix/TestNetscapePlugin/TestNetscapePlugin.cpp
}
diff --git a/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp b/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
index e960a06..ca868be 100644
--- a/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
+++ b/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
@@ -175,7 +175,7 @@ webkit_test_plugin_new_stream(NPP instance,
{
PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
obj->stream = stream;
- *stype = NP_ASFILEONLY;
+ *stype = NP_NORMAL;
if (obj->returnErrorFromNewStream)
return NPERR_GENERIC_ERROR;
@@ -190,12 +190,32 @@ webkit_test_plugin_new_stream(NPP instance,
}
static NPError
-webkit_test_plugin_destroy_stream(NPP instance, NPStream* /*stream*/, NPError /*reason*/)
+webkit_test_plugin_destroy_stream(NPP instance, NPStream* /*stream*/, NPError reason)
{
PluginObject* obj = (PluginObject*)instance->pdata;
- if (obj->onStreamDestroy)
- executeScript(obj, obj->onStreamDestroy);
+ if (obj->onStreamDestroy) {
+ NPObject* windowObject = 0;
+ NPError error = browser->getvalue(instance, NPNVWindowNPObject, &windowObject);
+
+ if (error == NPERR_NO_ERROR) {
+ NPVariant onStreamDestroyVariant;
+ if (browser->getproperty(instance, windowObject, browser->getstringidentifier(obj->onStreamDestroy), &onStreamDestroyVariant)) {
+ if (NPVARIANT_IS_OBJECT(onStreamDestroyVariant)) {
+ NPObject* onStreamDestroyFunction = NPVARIANT_TO_OBJECT(onStreamDestroyVariant);
+
+ NPVariant reasonVariant;
+ INT32_TO_NPVARIANT(reason, reasonVariant);
+
+ NPVariant result;
+ browser->invokeDefault(instance, onStreamDestroyFunction, &reasonVariant, 1, &result);
+ browser->releasevariantvalue(&result);
+ }
+ browser->releasevariantvalue(&onStreamDestroyVariant);
+ }
+ browser->releaseobject(windowObject);
+ }
+ }
if (obj->testDocumentOpenInDestroyStream) {
testDocumentOpen(instance);
@@ -213,17 +233,22 @@ webkit_test_plugin_stream_as_file(NPP /*instance*/, NPStream* /*stream*/, const
static int32_t
webkit_test_plugin_write_ready(NPP /*instance*/, NPStream* /*stream*/)
{
- return 0;
+ return 4096;
}
static int32_t
-webkit_test_plugin_write(NPP /*instance*/,
+webkit_test_plugin_write(NPP instance,
NPStream* /*stream*/,
int32_t /*offset*/,
- int32_t /*len*/,
+ int32_t len,
void* /*buffer*/)
{
- return 0;
+ PluginObject* obj = (PluginObject*)instance->pdata;
+
+ if (obj->returnNegativeOneFromWrite)
+ return -1;
+
+ return len;
}
static void
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj b/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj
index 4d2dea8..125c6c6 100644
--- a/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj
@@ -55,6 +55,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
AdditionalLibraryDirectories=""
DelayLoadDLLs=""
@@ -84,7 +85,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -128,6 +129,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
AdditionalLibraryDirectories=""
DelayLoadDLLs=""
@@ -157,7 +159,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -200,6 +202,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
AdditionalLibraryDirectories=""
DelayLoadDLLs=""
@@ -228,7 +231,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -271,6 +274,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib CFLite_Debug.lib cairo.lib libjpeg.lib libpng.lib libcurl_imp.lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
AdditionalLibraryDirectories=""
DelayLoadDLLs=""
@@ -300,7 +304,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -344,6 +348,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib CFLite.lib cairo.lib libjpeg.lib libpng.lib libcurl_imp.lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
AdditionalLibraryDirectories=""
DelayLoadDLLs=""
@@ -373,7 +378,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -416,6 +421,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
AdditionalLibraryDirectories=""
DelayLoadDLLs=""
@@ -444,7 +450,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreVideo$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
diff --git a/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj b/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj
index 361069a..0a02110 100644
--- a/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj
+++ b/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj
@@ -51,6 +51,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
AdditionalLibraryDirectories=""
SubSystem="1"
@@ -119,6 +120,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
AdditionalLibraryDirectories=""
SubSystem="1"
@@ -186,6 +188,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
AdditionalLibraryDirectories=""
SubSystem="1"
@@ -253,6 +256,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
AdditionalLibraryDirectories=""
SubSystem="1"
diff --git a/WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp b/WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp
index df96328..b79bb2a 100644
--- a/WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp
+++ b/WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp
@@ -1040,7 +1040,7 @@ void LayoutTestController::setScrollbarPolicy(JSStringRef orientation, JSStringR
// FIXME: implement
}
-void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart)
+void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart, bool allFrames)
{
COMPtr<IWebViewPrivate> webView;
if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView))))
@@ -1054,7 +1054,7 @@ void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart)
}
-void LayoutTestController::addUserStyleSheet(JSStringRef source)
+void LayoutTestController::addUserStyleSheet(JSStringRef source, bool allFrames)
{
COMPtr<IWebViewPrivate> webView;
if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView))))
diff --git a/WebKitTools/DumpRenderTree/win/ResourceLoadDelegate.cpp b/WebKitTools/DumpRenderTree/win/ResourceLoadDelegate.cpp
index 2e031da..ce01933 100644
--- a/WebKitTools/DumpRenderTree/win/ResourceLoadDelegate.cpp
+++ b/WebKitTools/DumpRenderTree/win/ResourceLoadDelegate.cpp
@@ -280,18 +280,20 @@ HRESULT STDMETHODCALLTYPE ResourceLoadDelegate::didReceiveAuthenticationChalleng
/* [in] */ IWebURLAuthenticationChallenge *challenge,
/* [in] */ IWebDataSource *dataSource)
{
- if (!gLayoutTestController->handlesAuthenticationChallenges())
+ COMPtr<IWebURLAuthenticationChallengeSender> sender;
+ if (!challenge || FAILED(challenge->sender(&sender)))
return E_FAIL;
+
+ if (!gLayoutTestController->handlesAuthenticationChallenges()) {
+ sender->continueWithoutCredentialForAuthenticationChallenge(challenge);
+ return S_OK;
+ }
const char* user = gLayoutTestController->authenticationUsername().c_str();
const char* password = gLayoutTestController->authenticationPassword().c_str();
printf("%S - didReceiveAuthenticationChallenge - Responding with %s:%s\n", descriptionSuitableForTestResult(identifier).c_str(), user, password);
-
- COMPtr<IWebURLAuthenticationChallengeSender> sender;
- if (!challenge || FAILED(challenge->sender(&sender)))
- return E_FAIL;
-
+
COMPtr<IWebURLCredential> credential;
if (FAILED(WebKitCreateInstance(CLSID_WebURLCredential, 0, IID_IWebURLCredential, (void**)&credential)))
return E_FAIL;
diff --git a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp b/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp
deleted file mode 100644
index 24c6304..0000000
--- a/WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
- consideration of your agreement to the following terms, and your use, installation,
- modification or redistribution of this Apple software constitutes acceptance of these
- terms. If you do not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject to these
- terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
- this original Apple software (the "Apple Software"), to use, reproduce, modify and
- redistribute the Apple Software, with or without modifications, in source and/or binary
- forms; provided that if you redistribute the Apple Software in its entirety and without
- modifications, you must retain this notice and the following text and disclaimers in all
- such redistributions of the Apple Software. Neither the name, trademarks, service marks
- or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
- the Apple Software without specific prior written permission from Apple. Except as expressly
- stated in this notice, no other rights or licenses, express or implied, are granted by Apple
- herein, including but not limited to any patent rights that may be infringed by your
- derivative works or by other works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES,
- EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
- USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
- REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
- WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
- OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-
-#include <stdio.h>
-
-extern "C"
-NPError __stdcall NP_Initialize(NPNetscapeFuncs* browserFuncs)
-{
- browser = browserFuncs;
- return NPERR_NO_ERROR;
-}
-
-extern "C"
-NPError __stdcall NP_GetEntryPoints(NPPluginFuncs* pluginFuncs)
-{
- pluginFuncs->version = 11;
- pluginFuncs->size = sizeof(pluginFuncs);
- pluginFuncs->newp = NPP_New;
- pluginFuncs->destroy = NPP_Destroy;
- pluginFuncs->setwindow = NPP_SetWindow;
- pluginFuncs->newstream = NPP_NewStream;
- pluginFuncs->destroystream = NPP_DestroyStream;
- pluginFuncs->asfile = NPP_StreamAsFile;
- pluginFuncs->writeready = NPP_WriteReady;
- pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write;
- pluginFuncs->print = NPP_Print;
- pluginFuncs->event = NPP_HandleEvent;
- pluginFuncs->urlnotify = NPP_URLNotify;
- pluginFuncs->getvalue = NPP_GetValue;
- pluginFuncs->setvalue = NPP_SetValue;
-
- return NPERR_NO_ERROR;
-}
-
-
-extern "C"
-NPError __stdcall NP_Shutdown()
-{
- return NPERR_NO_ERROR;
-}
-
-static void executeScript(const PluginObject* object, const char* script)
-{
- NPObject *windowScriptObject;
- browser->getvalue(object->npp, NPNVWindowNPObject, &windowScriptObject);
-
- NPString npScript;
- npScript.UTF8Characters = script;
- npScript.UTF8Length = strlen(script);
-
- NPVariant browserResult;
- browser->evaluate(object->npp, windowScriptObject, &npScript, &browserResult);
- browser->releasevariantvalue(&browserResult);
-}
-
-NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *saved)
-{
- if (browser->version >= 14) {
- PluginObject* obj = (PluginObject*)browser->createobject(instance, getPluginClass());
- instance->pdata = obj;
-
- for (int16_t i = 0; i < argc; i++) {
- if (_stricmp(argn[i], "onstreamload") == 0 && !obj->onStreamLoad)
- obj->onStreamLoad = _strdup(argv[i]);
- else if (_stricmp(argn[i], "onStreamDestroy") == 0 && !obj->onStreamDestroy)
- obj->onStreamDestroy = _strdup(argv[i]);
- else if (_stricmp(argn[i], "onURLNotify") == 0 && !obj->onURLNotify)
- obj->onURLNotify = _strdup(argv[i]);
- else if (_stricmp(argn[i], "onDestroy") == 0 && !obj->onDestroy)
- obj->onDestroy = _strdup(argv[i]);
- else if (_stricmp(argn[i], "logSrc") == 0) {
- for (int i = 0; i < argc; i++)
- if (_stricmp(argn[i], "src") == 0)
- pluginLog(instance, "src: %s", argv[i]);
- } else if (_stricmp(argn[i], "testdocumentopenindestroystream") == 0)
- obj->testDocumentOpenInDestroyStream = TRUE;
- else if (_stricmp(argn[i], "testGetURLOnDestroy") == 0)
- obj->testGetURLOnDestroy = TRUE;
- else if (_stricmp(argn[i], "testwindowopen") == 0)
- obj->testWindowOpen = TRUE;
- else if (_stricmp(argn[i], "onSetWindow") == 0 && !obj->onSetWindow)
- obj->onSetWindow = strdup(argv[i]);
- }
-
- browser->getvalue(instance, NPNVprivateModeBool, (void *)&obj->cachedPrivateBrowsingMode);
- }
-
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_Destroy(NPP instance, NPSavedData **save)
-{
- PluginObject *obj = (PluginObject*)instance->pdata;
- if (obj) {
- if (obj->testGetURLOnDestroy)
- browser->geturlnotify(obj->npp, "about:blank", "", "");
-
- if (obj->onStreamLoad)
- free(obj->onStreamLoad);
-
- if (obj->onURLNotify)
- free(obj->onURLNotify);
-
- if (obj->onStreamDestroy)
- free(obj->onStreamDestroy);
-
- if (obj->onDestroy) {
- executeScript(obj, obj->onDestroy);
- free(obj->onDestroy);
- }
-
- if (obj->logDestroy)
- pluginLog(instance, "NPP_Destroy");
-
- if (obj->onSetWindow)
- free(obj->onSetWindow);
-
- browser->releaseobject(&obj->header);
- }
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_SetWindow(NPP instance, NPWindow *window)
-{
- PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
-
- if (obj) {
- obj->lastWindow = *window;
-
- if (obj->onSetWindow)
- executeScript(obj, obj->onSetWindow);
-
- if (obj->testWindowOpen) {
- testWindowOpen(instance);
- obj->testWindowOpen = FALSE;
- }
- }
-
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream *stream, NPBool seekable, uint16_t *stype)
-{
- PluginObject* obj = (PluginObject*)instance->pdata;
-
- if (obj->returnErrorFromNewStream)
- return NPERR_GENERIC_ERROR;
-
- obj->stream = stream;
- *stype = NP_ASFILEONLY;
-
- if (obj->onStreamLoad)
- executeScript(obj, obj->onStreamLoad);
-
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_DestroyStream(NPP instance, NPStream *stream, NPReason reason)
-{
- PluginObject* obj = (PluginObject*)instance->pdata;
-
- if (obj->onStreamDestroy)
- executeScript(obj, obj->onStreamDestroy);
-
- if (obj->testDocumentOpenInDestroyStream) {
- testDocumentOpen(instance);
- }
-
- return NPERR_NO_ERROR;
-}
-
-int32_t NPP_WriteReady(NPP instance, NPStream *stream)
-{
- return 0;
-}
-
-int32_t NPP_Write(NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer)
-{
- return 0;
-}
-
-void NPP_StreamAsFile(NPP instance, NPStream *stream, const char *fname)
-{
-}
-
-void NPP_Print(NPP instance, NPPrint *platformPrint)
-{
-}
-
-int16_t NPP_HandleEvent(NPP instance, void *event)
-{
- PluginObject *obj = (PluginObject*)instance->pdata;
- if (!obj->eventLogging)
- return 0;
-
- // FIXME: Implement this
- return 0;
-}
-
-void NPP_URLNotify(NPP instance, const char *url, NPReason reason, void *notifyData)
-{
- PluginObject *obj = (PluginObject*)instance->pdata;
-
- if (obj->onURLNotify)
- executeScript(obj, obj->onURLNotify);
-
- handleCallback(obj, url, reason, notifyData);
-}
-
-NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
-{
- if (variable == NPPVpluginScriptableNPObject) {
- void **v = (void **)value;
- PluginObject *obj = (PluginObject*)instance->pdata;
- // Return value is expected to be retained
- browser->retainobject((NPObject *)obj);
- *v = obj;
- return NPERR_NO_ERROR;
- }
- return NPERR_GENERIC_ERROR;
-}
-
-NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
-{
- PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
-
- switch (variable) {
- case NPNVprivateModeBool:
- obj->cachedPrivateBrowsingMode = *(NPBool*)value;
- return NPERR_NO_ERROR;
- default:
- return NPERR_GENERIC_ERROR;
- }
-}
diff --git a/WebKitTools/DumpRenderTree/win/UIDelegate.cpp b/WebKitTools/DumpRenderTree/win/UIDelegate.cpp
index 519b9e1..1e7669f 100755
--- a/WebKitTools/DumpRenderTree/win/UIDelegate.cpp
+++ b/WebKitTools/DumpRenderTree/win/UIDelegate.cpp
@@ -180,6 +180,10 @@ HRESULT STDMETHODCALLTYPE UIDelegate::QueryInterface(REFIID riid, void** ppvObje
*ppvObject = static_cast<IWebUIDelegate2*>(this);
else if (IsEqualGUID(riid, IID_IWebUIDelegatePrivate))
*ppvObject = static_cast<IWebUIDelegatePrivate*>(this);
+ else if (IsEqualGUID(riid, IID_IWebUIDelegatePrivate2))
+ *ppvObject = static_cast<IWebUIDelegatePrivate2*>(this);
+ else if (IsEqualGUID(riid, IID_IWebUIDelegatePrivate3))
+ *ppvObject = static_cast<IWebUIDelegatePrivate3*>(this);
else
return E_NOINTERFACE;
@@ -634,3 +638,25 @@ HRESULT STDMETHODCALLTYPE UIDelegate::desktopNotificationsDelegate(IWebDesktopNo
m_desktopNotifications.copyRefTo(result);
return S_OK;
}
+
+HRESULT STDMETHODCALLTYPE UIDelegate::createWebViewWithRequest(IWebView* sender, IWebURLRequest* request, IPropertyBag* windowFeatures, IWebView** newWebView)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE UIDelegate::drawBackground(IWebView* sender, OLE_HANDLE hdc, const RECT* dirtyRect)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE UIDelegate::decidePolicyForGeolocationRequest(IWebView* sender, IWebFrame* frame, IWebSecurityOrigin* origin, IWebGeolocationPolicyListener* listener)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE UIDelegate::didPressMissingPluginButton(IDOMElement* element)
+{
+ printf("MISSING PLUGIN BUTTON PRESSED\n");
+ return S_OK;
+}
+
diff --git a/WebKitTools/DumpRenderTree/win/UIDelegate.h b/WebKitTools/DumpRenderTree/win/UIDelegate.h
index 436e31a..0c9fdaf 100755
--- a/WebKitTools/DumpRenderTree/win/UIDelegate.h
+++ b/WebKitTools/DumpRenderTree/win/UIDelegate.h
@@ -37,7 +37,7 @@
class DRTUndoManager;
class DRTDesktopNotificationPresenter;
-class UIDelegate : public IWebUIDelegate2, IWebUIDelegatePrivate {
+class UIDelegate : public IWebUIDelegate2, IWebUIDelegatePrivate3 {
public:
UIDelegate();
@@ -325,6 +325,14 @@ public:
/* [in] */ HDC hDC,
/* [in] */ RECT rect);
+ virtual HRESULT STDMETHODCALLTYPE createWebViewWithRequest(IWebView* sender, IWebURLRequest* request, IPropertyBag* windowFeatures, IWebView** newWebView);
+
+ virtual HRESULT STDMETHODCALLTYPE drawBackground(IWebView* sender, OLE_HANDLE hdc, const RECT* dirtyRect);
+
+ virtual HRESULT STDMETHODCALLTYPE decidePolicyForGeolocationRequest(IWebView* sender, IWebFrame* frame, IWebSecurityOrigin* origin, IWebGeolocationPolicyListener* listener);
+
+ virtual HRESULT STDMETHODCALLTYPE didPressMissingPluginButton(IDOMElement*);
+
protected:
// IWebUIDelegatePrivate
diff --git a/WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp b/WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
index 511eb81..905463a 100644
--- a/WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
+++ b/WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
@@ -327,12 +327,12 @@ void LayoutTestController::overridePreference(JSStringRef /* key */, JSStringRef
// FIXME: implement
}
-void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart)
+void LayoutTestController::addUserScript(JSStringRef source, bool runAtStart, bool allFrames)
{
printf("LayoutTestController::addUserScript not implemented.\n");
}
-void LayoutTestController::addUserStyleSheet(JSStringRef source)
+void LayoutTestController::addUserStyleSheet(JSStringRef source, bool allFrames)
{
printf("LayoutTestController::addUserStyleSheet not implemented.\n");
}
@@ -458,7 +458,8 @@ void LayoutTestController::abortModal()
JSRetainPtr<JSStringRef> LayoutTestController::pageProperty(const char* propertyName, int pageNumber) const
{
-
+ // FIXME: Implement
+ return 0;
}
bool LayoutTestController::isPageBoxVisible(int pageNumber) const
diff --git a/WebKitTools/GNUmakefile.am b/WebKitTools/GNUmakefile.am
index 473b510..ef0d735 100644
--- a/WebKitTools/GNUmakefile.am
+++ b/WebKitTools/GNUmakefile.am
@@ -1,6 +1,7 @@
noinst_PROGRAMS += \
+ Programs/DumpRenderTree \
Programs/GtkLauncher \
- Programs/DumpRenderTree
+ Programs/ImageDiff
# GtkLauncher
Programs_GtkLauncher_CPPFLAGS = \
@@ -32,6 +33,7 @@ Programs_GtkLauncher_LDFLAGS = \
# DumpRenderTree
dumprendertree_cppflags := \
-I$(srcdir)/WebKitTools/DumpRenderTree \
+ -I$(srcdir)/WebKitTools/DumpRenderTree/cairo \
-I$(srcdir)/WebKitTools/DumpRenderTree/gtk \
-I$(srcdir)/WebKit/gtk \
-I$(top_builddir)/WebKit/gtk \
@@ -53,11 +55,14 @@ Programs_DumpRenderTree_SOURCES = \
WebKitTools/DumpRenderTree/JavaScriptThreading.h \
WebKitTools/DumpRenderTree/LayoutTestController.cpp \
WebKitTools/DumpRenderTree/LayoutTestController.h \
+ WebKitTools/DumpRenderTree/PixelDumpSupport.cpp \
WebKitTools/DumpRenderTree/PixelDumpSupport.h \
WebKitTools/DumpRenderTree/WorkQueue.cpp \
WebKitTools/DumpRenderTree/WorkQueue.h \
WebKitTools/DumpRenderTree/WorkQueueItem.h \
WebKitTools/DumpRenderTree/config.h \
+ WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp \
+ WebKitTools/DumpRenderTree/cairo/PixelDumpSupportCairo.h \
WebKitTools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp \
WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp \
WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp \
@@ -66,6 +71,7 @@ Programs_DumpRenderTree_SOURCES = \
WebKitTools/DumpRenderTree/gtk/EventSender.cpp \
WebKitTools/DumpRenderTree/gtk/GCControllerGtk.cpp \
WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp \
+ WebKitTools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp \
WebKitTools/DumpRenderTree/gtk/WorkQueueItemGtk.cpp
Programs_DumpRenderTree_CXXFLAGS = \
@@ -96,11 +102,35 @@ Programs_DumpRenderTree_LDFLAGS = \
-no-fast-install \
-no-install
+# ImageDiff
+Programs_ImageDiff_CPPFLAGS = $(global_cppflags)
+
+Programs_ImageDiff_SOURCES = \
+ WebKitTools/DumpRenderTree/gtk/ImageDiff.cpp
+
+Programs_ImageDiff_CXXFLAGS = \
+ $(global_cxxflags) \
+ $(global_cppflags) \
+ $(Programs_ImageDiff_CFLAGS)
+
+Programs_ImageDiff_CFLAGS = \
+ -fno-strict-aliasing \
+ $(global_cflags) \
+ $(GLOBALDEPS_CFLAGS) \
+ $(GTK_CFLAGS)
+
+Programs_ImageDiff_LDADD = \
+ $(GTK_LIBS)
+
+Programs_ImageDiff_LDFLAGS = \
+ -no-fast-install \
+ -no-install
+
# clean target
CLEANFILES += \
+ Programs/DumpRenderTree \
Programs/GtkLauncher \
- Programs/DumpRenderTree
-
+ Programs/ImageDiff
if TARGET_X11
@@ -119,7 +149,7 @@ TestNetscapePlugin_libtestnetscapeplugin_la_CPPFLAGS = \
-I$(srcdir)/WebCore \
-I$(srcdir)/WebCore/bridge \
-I$(srcdir)/WebCore/plugins \
- -I$(srcdir)/WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj \
+ -I$(srcdir)/WebKitTools/DumpRenderTree/TestNetscapePlugIn \
$(global_cppflags) \
$(javascriptcore_cppflags)
@@ -128,10 +158,10 @@ TestNetscapePlugin_libtestnetscapeplugin_la_SOURCES = \
WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npfunctions.h \
WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/ForwardingHeaders/WebKit/npruntime.h \
WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp \
- WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp \
- WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h \
- WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp \
- WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h
+ WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp \
+ WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.h \
+ WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.cpp \
+ WebKitTools/DumpRenderTree/TestNetscapePlugIn/TestObject.h
TestNetscapePlugin_libtestnetscapeplugin_la_LDFLAGS = \
-rpath ${shell pwd}/$(top_builddir)/../unix/TestNetscapePlugin/.libs \
diff --git a/WebKitTools/MiniBrowser/Configurations/Base.xcconfig b/WebKitTools/MiniBrowser/Configurations/Base.xcconfig
new file mode 100644
index 0000000..23a0c75
--- /dev/null
+++ b/WebKitTools/MiniBrowser/Configurations/Base.xcconfig
@@ -0,0 +1,65 @@
+// 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. ``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.
+
+DEBUG_INFORMATION_FORMAT = dwarf
+PREBINDING = NO
+GCC_C_LANGUAGE_STANDARD = gnu99
+GCC_PRECOMPILE_PREFIX_HEADER = YES
+GCC_TREAT_WARNINGS_AS_ERRORS = YES
+GCC_WARN_UNUSED_FUNCTION = YES
+GCC_WARN_UNUSED_VARIABLE = YES
+GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO
+WARNING_CFLAGS = -Wall -W -Wno-unused-parameter
+LINKER_DISPLAYS_MANGLED_NAMES = YES;
+
+
+TARGET_MAC_OS_X_VERSION_MAJOR = $(MAC_OS_X_VERSION_MAJOR);
+
+
+// Use GCC 4.2 with Xcode 3.1, which includes GCC 4.2 but defaults to GCC 4.0.
+// Note that Xcode versions as new as 3.1.2 use XCODE_VERSION_ACTUAL for the minor version
+// number. Newer versions of Xcode use XCODE_VERSION_MINOR for the minor version, and
+// XCODE_VERSION_ACTUAL for the full version number.
+TARGET_GCC_VERSION = $(TARGET_GCC_VERSION_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+TARGET_GCC_VERSION_ = $(TARGET_GCC_VERSION_1040);
+TARGET_GCC_VERSION_1040 = GCC_40;
+TARGET_GCC_VERSION_1050 = $(TARGET_GCC_VERSION_1050_$(XCODE_VERSION_MINOR));
+TARGET_GCC_VERSION_1050_ = $(TARGET_GCC_VERSION_1050_$(XCODE_VERSION_ACTUAL));
+TARGET_GCC_VERSION_1050_0310 = GCC_42;
+TARGET_GCC_VERSION_1050_0320 = GCC_42;
+TARGET_GCC_VERSION_1060 = GCC_42;
+TARGET_GCC_VERSION_1070 = LLVM_GCC_42;
+
+GCC_VERSION = $(GCC_VERSION_$(TARGET_GCC_VERSION));
+GCC_VERSION_GCC_40 = 4.0;
+GCC_VERSION_GCC_42 = 4.2;
+GCC_VERSION_LLVM_GCC_42 = com.apple.compilers.llvmgcc42;
+
+// If the target Mac OS X version does not match the current Mac OS X version then we'll want to build using the target version's SDK.
+SDKROOT = $(SDKROOT_$(MAC_OS_X_VERSION_MAJOR)_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+SDKROOT_1050_1040 = macosx10.4;
+SDKROOT_1060_1040 = macosx10.4;
+SDKROOT_1060_1050 = macosx10.5;
+SDKROOT_1070_1040 = macosx10.4;
+SDKROOT_1070_1050 = macosx10.5;
+SDKROOT_1070_1060 = macosx10.6;
diff --git a/WebKitTools/MiniBrowser/Configurations/DebugRelease.xcconfig b/WebKitTools/MiniBrowser/Configurations/DebugRelease.xcconfig
new file mode 100644
index 0000000..8b156e8
--- /dev/null
+++ b/WebKitTools/MiniBrowser/Configurations/DebugRelease.xcconfig
@@ -0,0 +1,40 @@
+// 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. ``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 "Base.xcconfig"
+
+ARCHS = $(ARCHS_$(TARGET_MAC_OS_X_VERSION_MAJOR));
+ARCHS_ = $(ARCHS_1040);
+ARCHS_1040 = $(NATIVE_ARCH);
+ARCHS_1050 = $(NATIVE_ARCH);
+ARCHS_1060 = $(ARCHS_STANDARD_32_64_BIT);
+ARCHS_1070 = $(ARCHS_STANDARD_32_64_BIT);
+
+ONLY_ACTIVE_ARCH = YES;
+
+MACOSX_DEPLOYMENT_TARGET = $(MACOSX_DEPLOYMENT_TARGET_$(TARGET_MAC_OS_X_VERSION_MAJOR))
+MACOSX_DEPLOYMENT_TARGET_ = 10.4;
+MACOSX_DEPLOYMENT_TARGET_1040 = 10.4;
+MACOSX_DEPLOYMENT_TARGET_1050 = 10.5;
+MACOSX_DEPLOYMENT_TARGET_1060 = 10.6;
+MACOSX_DEPLOYMENT_TARGET_1070 = 10.7;
diff --git a/WebKitTools/MiniBrowser/Configurations/MiniBrowser.xcconfig b/WebKitTools/MiniBrowser/Configurations/MiniBrowser.xcconfig
new file mode 100644
index 0000000..cf5ad84
--- /dev/null
+++ b/WebKitTools/MiniBrowser/Configurations/MiniBrowser.xcconfig
@@ -0,0 +1,26 @@
+// 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. ``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.
+
+PRODUCT_NAME = MiniBrowser
+GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch
+INFOPLIST_FILE = mac/Info.plist
diff --git a/WebKitTools/MiniBrowser/Configurations/WebBundle.xcconfig b/WebKitTools/MiniBrowser/Configurations/WebBundle.xcconfig
new file mode 100644
index 0000000..253fdf7
--- /dev/null
+++ b/WebKitTools/MiniBrowser/Configurations/WebBundle.xcconfig
@@ -0,0 +1,26 @@
+// 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. ``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.
+
+PRODUCT_NAME = WebBundle
+GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch
+INFOPLIST_FILE = mac/WebBundle/Info.plist
diff --git a/WebKitTools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj b/WebKitTools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj
index eeb70c9..9aa8cf4 100644
--- a/WebKitTools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj
+++ b/WebKitTools/MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj
@@ -7,14 +7,13 @@
objects = {
/* Begin PBXBuildFile section */
- 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
256AC3DA0F4B6AC300CF3369 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* AppDelegate.m */; };
- 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
BC20545E11C96C92008F3375 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
BC329487116A92E2008635D0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC329486116A92E2008635D0 /* main.m */; };
BC329498116A941B008635D0 /* BrowserWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC329497116A941B008635D0 /* BrowserWindowController.m */; };
- BC3294A3116A9852008635D0 /* BrowserWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3294A1116A9852008635D0 /* BrowserWindow.xib */; };
+ BC72B89511E57E07001EB4EA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58150DA1D0A300B32029 /* MainMenu.xib */; };
+ BC72B89611E57E0F001EB4EA /* BrowserWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3294A2116A9852008635D0 /* BrowserWindow.xib */; };
BC8FB5A8116AA1FE0080D413 /* WebKit2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */; };
BCBD384011B08A6800E01E54 /* WebBundleMain.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBD383D11B08A3100E01E54 /* WebBundleMain.m */; };
BCBD384411B08AAD00E01E54 /* WebKit2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */; };
@@ -48,25 +47,28 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = mac/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
- 1DDD58150DA1D0A300B32029 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = mac/English.lproj/MainMenu.xib; sourceTree = "<group>"; };
+ 1DDD58150DA1D0A300B32029 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MainMenu.xib; path = mac/MainMenu.xib; sourceTree = "<group>"; };
256AC3D80F4B6AC300CF3369 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = mac/AppDelegate.h; sourceTree = "<group>"; };
256AC3D90F4B6AC300CF3369 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = mac/AppDelegate.m; sourceTree = "<group>"; };
256AC3F00F4B6AF500CF3369 /* MiniBrowser_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiniBrowser_Prefix.pch; path = mac/MiniBrowser_Prefix.pch; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
- 8D1107310486CEB800E47090 /* MiniBrowser-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "MiniBrowser-Info.plist"; path = "mac/MiniBrowser-Info.plist"; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* MiniBrowser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MiniBrowser.app; sourceTree = BUILT_PRODUCTS_DIR; };
BC1770121188DF19007D9E9A /* make-launchable.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "make-launchable.sh"; path = "mac/make-launchable.sh"; sourceTree = "<group>"; };
BC329486116A92E2008635D0 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = mac/main.m; sourceTree = "<group>"; };
BC329496116A941B008635D0 /* BrowserWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserWindowController.h; path = mac/BrowserWindowController.h; sourceTree = "<group>"; };
BC329497116A941B008635D0 /* BrowserWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BrowserWindowController.m; path = mac/BrowserWindowController.m; sourceTree = "<group>"; };
- BC3294A2116A9852008635D0 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = mac/English.lproj/BrowserWindow.xib; sourceTree = "<group>"; };
+ BC3294A2116A9852008635D0 /* BrowserWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = BrowserWindow.xib; path = mac/BrowserWindow.xib; sourceTree = "<group>"; };
+ BC72B89711E57E6E001EB4EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ BC72B89A11E57E8A001EB4EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mac/Info.plist; sourceTree = "<group>"; };
BC8FB5A7116AA1FE0080D413 /* WebKit2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebKit2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BCA8CBDD11E578A000812FB7 /* Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Base.xcconfig; sourceTree = "<group>"; };
+ BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugRelease.xcconfig; sourceTree = "<group>"; };
+ BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = MiniBrowser.xcconfig; sourceTree = "<group>"; };
+ BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = WebBundle.xcconfig; sourceTree = "<group>"; };
BCBD381D11B0898200E01E54 /* WebBundle.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebBundle.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
- BCBD381E11B0898200E01E54 /* WebBundle-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "WebBundle-Info.plist"; sourceTree = "<group>"; };
BCBD383D11B08A3100E01E54 /* WebBundleMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebBundleMain.m; sourceTree = "<group>"; };
BCE625ED117FC80E00572433 /* BrowserStatisticsWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = BrowserStatisticsWindow.xib; path = mac/BrowserStatisticsWindow.xib; sourceTree = "<group>"; };
BCE625EF117FC82700572433 /* BrowserStatisticsWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserStatisticsWindowController.h; path = mac/BrowserStatisticsWindowController.h; sourceTree = "<group>"; };
@@ -95,9 +97,11 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 080E96DDFE201D6D7F000001 /* Classes */ = {
+ 080E96DDFE201D6D7F000001 /* MiniBrowser */ = {
isa = PBXGroup;
children = (
+ BC72B89A11E57E8A001EB4EA /* Info.plist */,
+ BC329486116A92E2008635D0 /* main.m */,
256AC3D80F4B6AC300CF3369 /* AppDelegate.h */,
256AC3D90F4B6AC300CF3369 /* AppDelegate.m */,
BC329496116A941B008635D0 /* BrowserWindowController.h */,
@@ -105,7 +109,7 @@
BCE625EF117FC82700572433 /* BrowserStatisticsWindowController.h */,
BCE625F0117FC82700572433 /* BrowserStatisticsWindowController.m */,
);
- name = Classes;
+ name = MiniBrowser;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
@@ -139,10 +143,11 @@
29B97314FDCFA39411CA2CEA /* MiniBrowser */ = {
isa = PBXGroup;
children = (
- 080E96DDFE201D6D7F000001 /* Classes */,
- 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ 256AC3F00F4B6AF500CF3369 /* MiniBrowser_Prefix.pch */,
+ 080E96DDFE201D6D7F000001 /* MiniBrowser */,
BCBD382B11B089F700E01E54 /* WebBundle */,
29B97317FDCFA39411CA2CEA /* Resources */,
+ BCA8CBDA11E5787800812FB7 /* Configurations */,
BC1770481188EB05007D9E9A /* Scripts */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
@@ -150,23 +155,11 @@
name = MiniBrowser;
sourceTree = "<group>";
};
- 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
- isa = PBXGroup;
- children = (
- 256AC3F00F4B6AF500CF3369 /* MiniBrowser_Prefix.pch */,
- BC329486116A92E2008635D0 /* main.m */,
- );
- name = "Other Sources";
- sourceTree = "<group>";
- };
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
- 8D1107310486CEB800E47090 /* MiniBrowser-Info.plist */,
- BCBD381E11B0898200E01E54 /* WebBundle-Info.plist */,
- 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
- BC3294A1116A9852008635D0 /* BrowserWindow.xib */,
- 1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
+ BC3294A2116A9852008635D0 /* BrowserWindow.xib */,
+ 1DDD58150DA1D0A300B32029 /* MainMenu.xib */,
BCE625ED117FC80E00572433 /* BrowserStatisticsWindow.xib */,
);
name = Resources;
@@ -189,9 +182,21 @@
name = Scripts;
sourceTree = "<group>";
};
+ BCA8CBDA11E5787800812FB7 /* Configurations */ = {
+ isa = PBXGroup;
+ children = (
+ BCA8CBDD11E578A000812FB7 /* Base.xcconfig */,
+ BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */,
+ BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */,
+ BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */,
+ );
+ path = Configurations;
+ sourceTree = "<group>";
+ };
BCBD382B11B089F700E01E54 /* WebBundle */ = {
isa = PBXGroup;
children = (
+ BC72B89711E57E6E001EB4EA /* Info.plist */,
BCBD383D11B08A3100E01E54 /* WebBundleMain.m */,
);
name = WebBundle;
@@ -262,9 +267,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
- 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
- BC3294A3116A9852008635D0 /* BrowserWindow.xib in Resources */,
+ BC72B89511E57E07001EB4EA /* MainMenu.xib in Resources */,
+ BC72B89611E57E0F001EB4EA /* BrowserWindow.xib in Resources */,
BCE625EE117FC80E00572433 /* BrowserStatisticsWindow.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -325,118 +329,46 @@
};
/* End PBXTargetDependency section */
-/* Begin PBXVariantGroup section */
- 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */,
- );
- name = InfoPlist.strings;
- sourceTree = "<group>";
- };
- 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
- isa = PBXVariantGroup;
- children = (
- 1DDD58150DA1D0A300B32029 /* MainMenu.xib */,
- );
- name = MainMenu.xib;
- sourceTree = "<group>";
- };
- BC3294A1116A9852008635D0 /* BrowserWindow.xib */ = {
- isa = PBXVariantGroup;
- children = (
- BC3294A2116A9852008635D0 /* English */,
- );
- name = BrowserWindow.xib;
- sourceTree = "<group>";
- };
-/* End PBXVariantGroup section */
-
/* Begin XCBuildConfiguration section */
BCBD381F11B0898300E01E54 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COPY_PHASE_STRIP = NO;
- GCC_ENABLE_OBJC_GC = supported;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch;
- INFOPLIST_FILE = "WebBundle-Info.plist";
- PRODUCT_NAME = WebBundle;
- WRAPPER_EXTENSION = bundle;
};
name = Debug;
};
BCBD382011B0898300E01E54 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = BCA8CBE011E578A000812FB7 /* WebBundle.xcconfig */;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- GCC_ENABLE_OBJC_GC = supported;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch;
- INFOPLIST_FILE = "WebBundle-Info.plist";
- PRODUCT_NAME = WebBundle;
- WRAPPER_EXTENSION = bundle;
};
name = Release;
};
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_ENABLE_FIX_AND_CONTINUE = YES;
- GCC_MODEL_TUNING = G5;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch;
- INFOPLIST_FILE = "mac/MiniBrowser-Info.plist";
- INSTALL_PATH = "$(HOME)/Applications";
- PRODUCT_NAME = MiniBrowser;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = BCA8CBDF11E578A000812FB7 /* MiniBrowser.xcconfig */;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- GCC_MODEL_TUNING = G5;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = mac/MiniBrowser_Prefix.pch;
- INFOPLIST_FILE = "mac/MiniBrowser-Info.plist";
- INSTALL_PATH = "$(HOME)/Applications";
- PRODUCT_NAME = MiniBrowser;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */;
buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- ONLY_ACTIVE_ARCH = YES;
- PREBINDING = NO;
- SDKROOT = macosx10.6;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = BCA8CBDE11E578A000812FB7 /* DebugRelease.xcconfig */;
buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- PREBINDING = NO;
- SDKROOT = macosx10.6;
};
name = Release;
};
diff --git a/WebKitTools/MiniBrowser/mac/BrowserStatisticsWindowController.m b/WebKitTools/MiniBrowser/mac/BrowserStatisticsWindowController.m
index bb5fc7d..872fb55 100644
--- a/WebKitTools/MiniBrowser/mac/BrowserStatisticsWindowController.m
+++ b/WebKitTools/MiniBrowser/mac/BrowserStatisticsWindowController.m
@@ -14,7 +14,7 @@
- (id)initWithThreadedWKContextRef:(WKContextRef)threadContext processWKContextRef:(WKContextRef)processContext
{
- if (self = [super initWithWindowNibName:@"BrowserStatisticsWindow"]) {
+ if ((self = [super initWithWindowNibName:@"BrowserStatisticsWindow"])) {
_threadContext = WKContextRetain(threadContext);
_processContext = WKContextRetain(processContext);
}
diff --git a/WebKitTools/MiniBrowser/mac/English.lproj/BrowserWindow.xib b/WebKitTools/MiniBrowser/mac/BrowserWindow.xib
index 64c4999..64c4999 100644
--- a/WebKitTools/MiniBrowser/mac/English.lproj/BrowserWindow.xib
+++ b/WebKitTools/MiniBrowser/mac/BrowserWindow.xib
diff --git a/WebKitTools/MiniBrowser/mac/BrowserWindowController.m b/WebKitTools/MiniBrowser/mac/BrowserWindowController.m
index 11e51a0..9d2f8a6 100644
--- a/WebKitTools/MiniBrowser/mac/BrowserWindowController.m
+++ b/WebKitTools/MiniBrowser/mac/BrowserWindowController.m
@@ -39,7 +39,7 @@
- (id)initWithPageNamespace:(WKPageNamespaceRef)pageNamespace
{
- if (self = [super initWithWindowNibName:@"BrowserWindow"])
+ if ((self = [super initWithWindowNibName:@"BrowserWindow"]))
_pageNamespace = WKPageNamespaceRetain(pageNamespace);
return self;
diff --git a/WebKitTools/MiniBrowser/mac/English.lproj/InfoPlist.strings b/WebKitTools/MiniBrowser/mac/English.lproj/InfoPlist.strings
deleted file mode 100644
index 477b28f..0000000
--- a/WebKitTools/MiniBrowser/mac/English.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-
diff --git a/WebKitTools/MiniBrowser/mac/MiniBrowser-Info.plist b/WebKitTools/MiniBrowser/mac/Info.plist
index 7564a7e..7564a7e 100644
--- a/WebKitTools/MiniBrowser/mac/MiniBrowser-Info.plist
+++ b/WebKitTools/MiniBrowser/mac/Info.plist
diff --git a/WebKitTools/MiniBrowser/mac/English.lproj/MainMenu.xib b/WebKitTools/MiniBrowser/mac/MainMenu.xib
index 229611c..229611c 100644
--- a/WebKitTools/MiniBrowser/mac/English.lproj/MainMenu.xib
+++ b/WebKitTools/MiniBrowser/mac/MainMenu.xib
diff --git a/WebKitTools/MiniBrowser/WebBundle-Info.plist b/WebKitTools/MiniBrowser/mac/WebBundle/Info.plist
index c285a47..c285a47 100644
--- a/WebKitTools/MiniBrowser/WebBundle-Info.plist
+++ b/WebKitTools/MiniBrowser/mac/WebBundle/Info.plist
diff --git a/WebKitTools/MiniBrowser/mac/WebBundle/WebBundleMain.m b/WebKitTools/MiniBrowser/mac/WebBundle/WebBundleMain.m
index d7f2e36..f36aaae 100644
--- a/WebKitTools/MiniBrowser/mac/WebBundle/WebBundleMain.m
+++ b/WebKitTools/MiniBrowser/mac/WebBundle/WebBundleMain.m
@@ -83,7 +83,7 @@ void _didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* client
{
LOG(@"WKBundleClient - didCreatePage\n");
- WKBundlePageClient client = {
+ WKBundlePageLoaderClient client = {
0,
0,
_didStartProvisionalLoadForFrame,
@@ -95,7 +95,7 @@ void _didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* client
_didReceiveTitleForFrame,
_didClearWindowForFrame
};
- WKBundlePageSetClient(page, &client);
+ WKBundlePageSetLoaderClient(page, &client);
}
void _willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
diff --git a/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp b/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp
new file mode 100644
index 0000000..1196cc4
--- /dev/null
+++ b/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp
@@ -0,0 +1,118 @@
+/*
+ * 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 "BrowserWindow.h"
+#include <WebKit2/WKPageNamespace.h>
+#include <WebKit2/qwkpage.h>
+
+static QWKPage* createNewPage(QWKPage* page)
+{
+ return page;
+}
+
+BrowserView::BrowserView(QWidget* parent)
+ : QGraphicsView(parent)
+ , m_item(0)
+{
+ m_context.adopt(WKContextGetSharedProcessContext());
+
+ WKRetainPtr<WKPageNamespaceRef> pageNamespace(AdoptWK, WKPageNamespaceCreate(m_context.get()));
+
+ m_item = new QGraphicsWKView(pageNamespace.get(), QGraphicsWKView::Simple, 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)));
+ m_item->page()->setCreateNewPageFunction(createNewPage);
+}
+
+void BrowserView::resizeEvent(QResizeEvent* event)
+{
+ QGraphicsView::resizeEvent(event);
+ QRectF rect(QPoint(0, 0), event->size());
+ m_item->setGeometry(rect);
+ scene()->setSceneRect(rect);
+}
+
+void BrowserView::load(const QUrl& url)
+{
+ m_item->load(url);
+}
+
+QGraphicsWKView* BrowserView::view() const
+{
+ return m_item;
+}
+
+BrowserWindow::BrowserWindow()
+{
+ m_menu = new QMenuBar();
+ m_browser = new BrowserView();
+ m_addressBar = new QLineEdit();
+
+ m_menu->addAction("Quit", this, SLOT(close()));
+
+ m_browser->setFocus(Qt::OtherFocusReason);
+
+ connect(m_addressBar, SIGNAL(returnPressed()), SLOT(changeLocation()));
+
+ QToolBar* bar = addToolBar("Navigation");
+ bar->addAction(m_browser->view()->page()->action(QWKPage::Back));
+ bar->addAction(m_browser->view()->page()->action(QWKPage::Forward));
+ bar->addAction(m_browser->view()->page()->action(QWKPage::Reload));
+ bar->addAction(m_browser->view()->page()->action(QWKPage::Stop));
+ bar->addWidget(m_addressBar);
+
+ this->setMenuBar(m_menu);
+ this->setCentralWidget(m_browser);
+
+ m_browser->setFocus(Qt::OtherFocusReason);
+}
+
+void BrowserWindow::load(const QString& url)
+{
+ m_addressBar->setText(url);
+ m_browser->load(QUrl(url));
+}
+
+void BrowserWindow::changeLocation()
+{
+ QString string = m_addressBar->text();
+ m_browser->load(string);
+}
+
+BrowserWindow::~BrowserWindow()
+{
+ delete m_addressBar;
+ delete m_browser;
+ delete m_menu;
+}
diff --git a/WebKitTools/MiniBrowser/qt/BrowserWindow.h b/WebKitTools/MiniBrowser/qt/BrowserWindow.h
new file mode 100644
index 0000000..30c5122
--- /dev/null
+++ b/WebKitTools/MiniBrowser/qt/BrowserWindow.h
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+
+#define PLATFORM(x) 0
+
+#include <stdint.h>
+#include <QtGui>
+#include <WebKit2/WKRetainPtr.h>
+#include <WebKit2/WKContext.h>
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include <WebKit2/qgraphicswkview.h>
+
+class BrowserView : public QGraphicsView {
+ Q_OBJECT
+
+public:
+ BrowserView(QWidget* parent = 0);
+ virtual ~BrowserView() { delete m_item; }
+
+ void load(const QUrl&);
+ QGraphicsWKView* view() const;
+
+protected:
+ virtual void resizeEvent(QResizeEvent*);
+
+private:
+ QGraphicsWKView* m_item;
+ WKRetainPtr<WKContextRef> m_context;
+};
+
+class BrowserWindow : public QMainWindow {
+ Q_OBJECT
+
+public:
+ BrowserWindow();
+ ~BrowserWindow();
+ void load(const QString& url);
+
+protected slots:
+ void changeLocation();
+
+private:
+ BrowserView* m_browser;
+ QMenuBar* m_menu;
+ QLineEdit* m_addressBar;
+};
diff --git a/WebKitTools/MiniBrowser/qt/MiniBrowser.pro b/WebKitTools/MiniBrowser/qt/MiniBrowser.pro
new file mode 100644
index 0000000..9a57d1b
--- /dev/null
+++ b/WebKitTools/MiniBrowser/qt/MiniBrowser.pro
@@ -0,0 +1,45 @@
+TEMPLATE = app
+TARGET = MiniBrowser
+
+SOURCES += \
+ main.cpp \
+ BrowserWindow.cpp \
+
+HEADERS += \
+ BrowserWindow.h \
+
+CONFIG += uitools
+
+isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../..
+include(../../../WebKit.pri)
+
+INCLUDEPATH += $$OUTPUT_DIR/include
+
+DESTDIR = $$OUTPUT_DIR/bin
+!CONFIG(standalone_package): CONFIG -= app_bundle
+
+QT += network
+macx:QT+=xml
+
+linux-* {
+ # From Creator's src/rpath.pri:
+ # Do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR
+ # this expands to $ORIGIN (after qmake and make), it does NOT read a qmake var.
+ QMAKE_RPATHDIR = \$\$ORIGIN/../lib $$QMAKE_RPATHDIR
+ MY_RPATH = $$join(QMAKE_RPATHDIR, ":")
+
+ QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${MY_RPATH}\'
+ QMAKE_RPATHDIR =
+} else {
+ QMAKE_RPATHDIR = $$OUTPUT_DIR/lib $$QMAKE_RPATHDIR
+}
+
+symbian {
+ TARGET.UID3 = 0xA000E543
+ TARGET.CAPABILITY = ReadUserData WriteUserData NetworkServices
+}
+
+contains(QT_CONFIG, opengl) {
+ QT += opengl
+ DEFINES += QT_CONFIGURED_WITH_OPENGL
+}
diff --git a/WebKitTools/MiniBrowser/qt/main.cpp b/WebKitTools/MiniBrowser/qt/main.cpp
new file mode 100644
index 0000000..b261397
--- /dev/null
+++ b/WebKitTools/MiniBrowser/qt/main.cpp
@@ -0,0 +1,42 @@
+/*
+ * 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 <QtGui>
+#include "BrowserWindow.h"
+
+int main(int argc, char** argv) {
+ QApplication app(argc, argv);
+
+ BrowserWindow window;
+ window.resize(960, 640);
+ window.show();
+ window.load(argc > 1 ? argv[1] : "http://www.google.com");
+
+ app.exec();
+
+ return 0;
+}
diff --git a/WebKitTools/QtTestBrowser/main.cpp b/WebKitTools/QtTestBrowser/main.cpp
index bd3be9e..25765be 100644
--- a/WebKitTools/QtTestBrowser/main.cpp
+++ b/WebKitTools/QtTestBrowser/main.cpp
@@ -827,6 +827,7 @@ void LauncherWindow::createChrome()
QMenu* fileMenu = menuBar()->addMenu("&File");
fileMenu->addAction("New Window", this, SLOT(newWindow()), QKeySequence::New);
fileMenu->addAction(tr("Open File..."), this, SLOT(openFile()), QKeySequence::Open);
+ fileMenu->addAction(tr("Open Location..."), this, SLOT(openLocation()), QKeySequence(Qt::CTRL | Qt::Key_L));
fileMenu->addAction("Close Window", this, SLOT(close()), QKeySequence::Close);
fileMenu->addSeparator();
fileMenu->addAction("Take Screen Shot...", this, SLOT(screenshot()));
diff --git a/WebKitTools/QtTestBrowser/mainwindow.cpp b/WebKitTools/QtTestBrowser/mainwindow.cpp
index c5cf15c..abb608f 100644
--- a/WebKitTools/QtTestBrowser/mainwindow.cpp
+++ b/WebKitTools/QtTestBrowser/mainwindow.cpp
@@ -171,3 +171,8 @@ void MainWindow::openFile()
}
}
+void MainWindow::openLocation()
+{
+ urlEdit->selectAll();
+ urlEdit->setFocus();
+}
diff --git a/WebKitTools/QtTestBrowser/mainwindow.h b/WebKitTools/QtTestBrowser/mainwindow.h
index d753a46..6fbf9f4 100644
--- a/WebKitTools/QtTestBrowser/mainwindow.h
+++ b/WebKitTools/QtTestBrowser/mainwindow.h
@@ -55,6 +55,7 @@ protected slots:
void setAddressUrl(const QString& url);
void setAddressUrl(const QUrl& url);
void openFile();
+ void openLocation();
void changeLocation();
private:
diff --git a/WebKitTools/Scripts/VCSUtils.pm b/WebKitTools/Scripts/VCSUtils.pm
index 24911ab..4516984 100644
--- a/WebKitTools/Scripts/VCSUtils.pm
+++ b/WebKitTools/Scripts/VCSUtils.pm
@@ -68,6 +68,7 @@ BEGIN {
&pathRelativeToSVNRepositoryRootForPath
&prepareParsedPatch
&runPatchCommand
+ &scmToggleExecutableBit
&setChangeLogDateAndReviewer
&svnRevisionForDirectory
&svnStatus
@@ -90,6 +91,7 @@ my $changeLogTimeZone = "PST8PDT";
my $gitDiffStartRegEx = qr#^diff --git (\w/)?(.+) (\w/)?([^\r\n]+)#;
my $svnDiffStartRegEx = qr#^Index: ([^\r\n]+)#;
+my $svnPropertiesStartRegEx = qr#^Property changes on: ([^\r\n]+)#; # $1 is normally the same as the index path.
my $svnPropertyStartRegEx = qr#^(Modified|Name|Added|Deleted): ([^\r\n]+)#; # $2 is the name of the property.
my $svnPropertyValueStartRegEx = qr#^ (\+|-) ([^\r\n]+)#; # $2 is the start of the property's value (which may span multiple lines).
@@ -735,6 +737,8 @@ sub parseDiffHeader($$)
#
# copiedFromPath: the path from which the file was copied if the diff
# is a copy.
+# executableBitDelta: the value 1 or -1 if the executable bit was added or
+# removed from the target file, respectively.
# indexPath: the path of the target file. For SVN-formatted diffs,
# this is the same as the path in the "Index:" line.
# isBinary: the value 1 if the diff is for a binary file.
@@ -754,6 +758,13 @@ sub parseDiffHeader($$)
#
# This subroutine preserves any leading junk encountered before the header.
#
+# Composition of an SVN diff
+#
+# There are three parts to an SVN diff: the header, the property change, and
+# the binary contents, in that order. Either the header or the property change
+# may be ommitted, but not both. If there are binary changes, then you always
+# have all three.
+#
# Args:
# $fileHandle: a file handle advanced to the first line of the next
# header block. Leading junk is okay.
@@ -773,6 +784,7 @@ sub parseDiff($$)
my $headerStartRegEx = $svnDiffStartRegEx; # SVN-style header for the default
my $headerHashRef; # Last header found, as returned by parseDiffHeader().
+ my $svnPropertiesHashRef; # Last SVN properties diff found, as returned by parseSvnDiffProperties().
my $svnText;
while (defined($line)) {
if (!$headerHashRef && ($line =~ $gitDiffStartRegEx)) {
@@ -782,6 +794,18 @@ sub parseDiff($$)
$headerStartRegEx = $gitDiffStartRegEx;
}
+ if ($line =~ $svnPropertiesStartRegEx) {
+ my $propertyPath = $1;
+ if ($svnPropertiesHashRef || $headerHashRef && ($propertyPath ne $headerHashRef->{indexPath})) {
+ # This is the start of the second diff in the while loop, which happens to
+ # be a property diff. If $svnPropertiesHasRef is defined, then this is the
+ # second consecutive property diff, otherwise it's the start of a property
+ # diff for a file that only has property changes.
+ last;
+ }
+ ($svnPropertiesHashRef, $line) = parseSvnDiffProperties($fileHandle, $line);
+ next;
+ }
if ($line !~ $headerStartRegEx) {
# Then we are in the body of the diff.
$svnText .= $line;
@@ -789,8 +813,9 @@ sub parseDiff($$)
next;
} # Otherwise, we found a diff header.
- if ($headerHashRef) {
- # Then this is the second diff header of this while loop.
+ if ($svnPropertiesHashRef || $headerHashRef) {
+ # Then either we just processed an SVN property change or this
+ # is the start of the second diff header of this while loop.
last;
}
@@ -812,12 +837,29 @@ sub parseDiff($$)
$copyHash{copiedFromPath} = $headerHashRef->{copiedFromPath};
$copyHash{indexPath} = $headerHashRef->{indexPath};
$copyHash{sourceRevision} = $headerHashRef->{sourceRevision} if $headerHashRef->{sourceRevision};
+ if ($headerHashRef->{isSvn}) {
+ $copyHash{executableBitDelta} = $svnPropertiesHashRef->{executableBitDelta} if $svnPropertiesHashRef->{executableBitDelta};
+ }
push @diffHashRefs, \%copyHash;
}
- if (!$headerHashRef->{copiedFromPath} || $headerHashRef->{isCopyWithChanges}) {
+
+ # Note, the order of evaluation for the following if conditional has been explicitly chosen so that
+ # it evaluates to false when there is no headerHashRef (e.g. a property change diff for a file that
+ # only has property changes).
+ if ($headerHashRef->{isCopyWithChanges} || (%$headerHashRef && !$headerHashRef->{copiedFromPath})) {
# Then add the usual file modification.
my %diffHash;
- # FIXME: Add executableBitDelta as a key.
+ # FIXME: We should expand this code to support other properties. In the future,
+ # parseSvnDiffProperties may return a hash whose keys are the properties.
+ if ($headerHashRef->{isSvn}) {
+ # SVN records the change to the executable bit in a separate property change diff
+ # that follows the contents of the diff, except for binary diffs. For binary
+ # diffs, the property change diff follows the diff header.
+ $diffHash{executableBitDelta} = $svnPropertiesHashRef->{executableBitDelta} if $svnPropertiesHashRef->{executableBitDelta};
+ } elsif ($headerHashRef->{isGit}) {
+ # Git records the change to the executable bit in the header of a diff.
+ $diffHash{executableBitDelta} = $headerHashRef->{executableBitDelta} if $headerHashRef->{executableBitDelta};
+ }
$diffHash{indexPath} = $headerHashRef->{indexPath};
$diffHash{isBinary} = $headerHashRef->{isBinary} if $headerHashRef->{isBinary};
$diffHash{isDeletion} = $headerHashRef->{isDeletion} if $headerHashRef->{isDeletion};
@@ -831,10 +873,24 @@ sub parseDiff($$)
}
# FIXME: Remove the need for svnConvertedText. See the %diffHash
# code comments above for more information.
- $diffHash{svnConvertedText} = $svnText;
+ #
+ # Note, we may not always have SVN converted text since we intend
+ # to deprecate it in the future. For example, a property change
+ # diff for a file that only has property changes will not return
+ # any SVN converted text.
+ $diffHash{svnConvertedText} = $svnText if $svnText;
push @diffHashRefs, \%diffHash;
}
+ if (!%$headerHashRef && $svnPropertiesHashRef) {
+ # A property change diff for a file that only has property changes.
+ my %propertyChangeHash;
+ $propertyChangeHash{executableBitDelta} = $svnPropertiesHashRef->{executableBitDelta} if $svnPropertiesHashRef->{executableBitDelta};
+ $propertyChangeHash{indexPath} = $svnPropertiesHashRef->{propertyPath};
+ $propertyChangeHash{isSvn} = 1;
+ push @diffHashRefs, \%propertyChangeHash;
+ }
+
return (\@diffHashRefs, $line);
}
@@ -859,19 +915,14 @@ sub parseDiff($$)
# executableBitDelta: the value 1 or -1 if the executable bit was added or
# removed from the target file, respectively.
# $lastReadLine: the line last read from $fileHandle.
-#
-# FIXME: This method is unused as of (05/22/2010). We will call this function
-# as part of parsing a diff. See <https://bugs.webkit.org/show_bug.cgi?id=39409>.
sub parseSvnDiffProperties($$)
{
my ($fileHandle, $line) = @_;
$_ = $line;
- my $svnFooterDiffStartRegEx = qr#Property changes on: ([^\r\n]+)#; # $1 is normally the same as the index path.
-
my %footer;
- if (/$svnFooterDiffStartRegEx/) {
+ if (/$svnPropertiesStartRegEx/) {
$footer{propertyPath} = $1;
} else {
die("Failed to find start of SVN property change, \"Property changes on \": \"$_\"");
@@ -1300,7 +1351,7 @@ sub fixChangeLogPatch($)
# Work backwards, shifting overlapping lines towards front
# while checking that patch stays equivalent.
- for ($i = $dateStartIndex - 1; $i >= $chunkStartIndex; --$i) {
+ for ($i = $dateStartIndex - 1; @overlappingLines && $i >= $chunkStartIndex; --$i) {
my $line = $lines[$i];
if (substr($line, 0, 1) ne " ") {
next;
diff --git a/WebKitTools/Scripts/build-webkit b/WebKitTools/Scripts/build-webkit
index 2934b21..18a557b 100755
--- a/WebKitTools/Scripts/build-webkit
+++ b/WebKitTools/Scripts/build-webkit
@@ -55,7 +55,7 @@ my $prefixPath;
my $makeArgs;
my $startTime = time();
-my ($threeDCanvasSupport, $threeDRenderingSupport, $channelMessagingSupport, $clientBasedGeolocationSupport, $databaseSupport, $datagridSupport, $datalistSupport,
+my ($linkPrefetchSupport, $threeDCanvasSupport, $threeDRenderingSupport, $channelMessagingSupport, $clientBasedGeolocationSupport, $databaseSupport, $datagridSupport, $datalistSupport,
$domStorageSupport, $eventsourceSupport, $filtersSupport, $geolocationSupport, $iconDatabaseSupport, $imageResizerSupport, $indexedDatabaseSupport, $inputSpeechSupport,
$javaScriptDebuggerSupport, $mathmlSupport, $offlineWebApplicationSupport, $rubySupport, $systemMallocSupport, $sandboxSupport, $sharedWorkersSupport,
$svgSupport, $svgAnimationSupport, $svgAsImageSupport, $svgDOMObjCBindingsSupport, $svgFontsSupport,
@@ -64,6 +64,9 @@ my ($threeDCanvasSupport, $threeDRenderingSupport, $channelMessagingSupport, $cl
$fileReaderSupport, $fileWriterSupport, $directoryUploadSupport);
my @features = (
+ { option => "link-prefetch", desc => "Toggle pre fetching support",
+ define => "ENABLE_LINK_PREFETCH", default => 0, value => \$linkPrefetchSupport },
+
{ option => "3d-canvas", desc => "Toggle 3D canvas support",
define => "ENABLE_3D_CANVAS", default => (isAppleMacWebKit() && !isTiger()), value => \$threeDCanvasSupport },
diff --git a/WebKitTools/Scripts/check-header-includes b/WebKitTools/Scripts/check-header-includes
new file mode 100755
index 0000000..568859e
--- /dev/null
+++ b/WebKitTools/Scripts/check-header-includes
@@ -0,0 +1,103 @@
+#!/usr/bin/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:
+#
+# * 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 looks for unnecessary #includes in the given header file,
+# or in all header files that can be recursively found in the given directory.
+
+import os
+import re
+import sys
+
+headerFile = re.compile(r'\.h$')
+includeLine = re.compile(r'^#include ("|<wtf/)([A-Z]\w+).h[>"]')
+smartPointerString = "(ListRefPtr|OwnArrayPtr|OwnPtr|PassOwnPtr|PassRefPtr|RefPtr)<className>"
+allowedIncludes = set(["Forward", "PlatformString", "StringHash", "Threading"])
+
+# Check if 'line' needs any class in 'unnecessaryIncludes' to be included in the header file.
+def checkLine(line, unnecessaryIncludes):
+ unnecessaryIncludesCopy = unnecessaryIncludes.copy()
+ for includedClass in unnecessaryIncludesCopy:
+ if re.search(includedClass, line):
+ if re.search(includedClass + "\*", line):
+ continue
+
+ smartPointerClassString = smartPointerString.replace("className", includedClass)
+ if re.search(smartPointerClassString, line):
+ continue
+
+ unnecessaryIncludes.remove(includedClass)
+
+
+# Look for unnecessary includes in the given file
+def checkFile(fileName):
+ if headerFile.search(fileName):
+ f = open(fileName, "r")
+ unnecessaryIncludes = set()
+ for line in f:
+ match = includeLine.match(line)
+ if match:
+ className = match.group(2)
+ if className == "PlatformString":
+ unnecessaryIncludes.add("String")
+ elif className not in allowedIncludes:
+ unnecessaryIncludes.add(className)
+ else:
+ checkLine(line, unnecessaryIncludes)
+
+ if len(unnecessaryIncludes) > 0:
+ print fileName
+ for includedClass in unnecessaryIncludes:
+ print includedClass
+ print
+
+
+# If 'path' is a file, check if it has unnecessary includes.
+# If 'path' is a directory, traverse it recursively and look
+# for unnecessary includes in all header files.
+def checkPath(path):
+ if os.path.isfile(path):
+ checkFile(path)
+ elif os.path.isdir(path):
+ dirList = os.listdir(path)
+ for dirName in dirList:
+ checkPath(path + "/" + dirName)
+ else:
+ print path, "is not a file or directory."
+
+
+def main():
+ if len(sys.argv) <= 1:
+ print "Usage:", sys.argv[0], "<path>"
+ return -1
+
+ checkPath(sys.argv[1])
+
+
+if __name__ == "__main__":
+ main()
diff --git a/WebKitTools/Scripts/check-webkit-style b/WebKitTools/Scripts/check-webkit-style
index 19d3762..9a1ae1e 100755
--- a/WebKitTools/Scripts/check-webkit-style
+++ b/WebKitTools/Scripts/check-webkit-style
@@ -115,7 +115,7 @@ def main():
if paths:
file_reader.process_paths(paths)
else:
- patch = checkout.create_patch(options.git_commit, options.squash)
+ patch = checkout.create_patch(options.git_commit)
patch_checker = PatchReader(file_reader)
patch_checker.check(patch)
diff --git a/WebKitTools/Scripts/ensure-valid-python b/WebKitTools/Scripts/ensure-valid-python
index 4640a01..aede812 100755
--- a/WebKitTools/Scripts/ensure-valid-python
+++ b/WebKitTools/Scripts/ensure-valid-python
@@ -42,7 +42,7 @@ my $macPythonMD5 = "84489bba813fdbb6041b69d4310a86da";
my $macPythonInstallerName = "Python.mpkg";
# We could use a consistent download location, like the source or build directory.
-my $tempDirectory = File::Temp->tempdir("WebKitPythonXXXX");
+my $tempDirectory = File::Temp::tempdir("WebKitPythonXXXX", TMPDIR => 1, CLEANUP => 1);
my $downloadDirectory = $tempDirectory;
my $mountPoint = File::Spec->join($tempDirectory, "mount");
diff --git a/WebKitTools/Scripts/old-run-webkit-tests b/WebKitTools/Scripts/old-run-webkit-tests
index 0e705a9..30c585f 100755
--- a/WebKitTools/Scripts/old-run-webkit-tests
+++ b/WebKitTools/Scripts/old-run-webkit-tests
@@ -120,6 +120,7 @@ sub writeToFile($$);
my $addPlatformExceptions = 0;
my $complexText = 0;
my $exitAfterNFailures = 0;
+my $exitAfterNCrashesOrTimeouts = 0;
my $generateNewResults = isAppleMacWebKit() ? 1 : 0;
my $guardMalloc = '';
# FIXME: Dynamic HTTP-port configuration in this file is wrong. The various
@@ -156,7 +157,7 @@ my $tmpDir = "/tmp";
my $testResultsDirectory = File::Spec->catfile($tmpDir, "layout-test-results");
my $testsPerDumpTool = 1000;
my $threaded = 0;
-my $html5parser = 0;
+my $html5treebuilder = 0;
# DumpRenderTree has an internal timeout of 30 seconds, so this must be > 30.
my $timeoutSeconds = 35;
my $tolerance = 0;
@@ -183,7 +184,10 @@ my $prettyDiffTag = "pretty-diff";
my $diffsTag = "diffs";
my $errorTag = "stderr";
+my $realPlatform;
+
my @macPlatforms = ("mac-tiger", "mac-leopard", "mac-snowleopard", "mac");
+my @winPlatforms = ("win-xp", "win-vista", "win-7", "win");
if (isAppleMacWebKit()) {
if (isTiger()) {
@@ -219,7 +223,15 @@ if (isAppleMacWebKit()) {
} elsif (isWx()) {
$platform = "wx";
} elsif (isCygwin()) {
- $platform = "win";
+ if (isWindowsXP()) {
+ $platform = "win-xp";
+ } elsif (isWindowsVista()) {
+ $platform = "win-vista";
+ } elsif (isWindows7()) {
+ $platform = "win-7";
+ } else {
+ $platform = "win";
+ }
}
if (!defined($platform)) {
@@ -243,7 +255,9 @@ Usage: $programName [options] [testdir|testpath ...]
--complex-text Use the complex text code path for all text (Mac OS X and Windows only)
-c|--configuration config Set DumpRenderTree build configuration
-g|--guard-malloc Enable malloc guard
- --exit-after-n-failures N Exit after the first N failures instead of running all tests
+ --exit-after-n-failures N Exit after the first N failures (includes crashes) instead of running all tests
+ --exit-after-n-crashes-or-timeouts N
+ Exit after the first N crashes instead of running all tests
-h|--help Show this help message
--[no-]http Run (or do not run) http tests (default: $httpDefault)
--[no-]wait-for-httpd Wait for httpd if some other test session is using it already (same as WEBKIT_WAIT_FOR_HTTPD=1). (default: $shouldWaitForHTTPD)
@@ -274,7 +288,7 @@ Usage: $programName [options] [testdir|testpath ...]
--ignore-metrics Ignore metrics in tests
--[no-]strip-editing-callbacks Remove editing callbacks from expected results
-t|--threaded Run a concurrent JavaScript thead with each test
- --html5-parser Run the tests using the HTML5 parser
+ --html5-treebuilder Run the tests using the HTML5 tree builder
--timeout t Sets the number of seconds before a test times out (default: $timeoutSeconds)
--valgrind Run DumpRenderTree inside valgrind (Qt/Linux only)
-v|--verbose More verbose output (overrides --quiet)
@@ -289,6 +303,7 @@ my $getOptionsResult = GetOptions(
'add-platform-exceptions' => \$addPlatformExceptions,
'complex-text' => \$complexText,
'exit-after-n-failures=i' => \$exitAfterNFailures,
+ 'exit-after-n-crashes-or-timeouts=i' => \$exitAfterNCrashesOrTimeouts,
'guard-malloc|g' => \$guardMalloc,
'help|h' => \$showHelp,
'http!' => \$testHTTP,
@@ -317,7 +332,7 @@ my $getOptionsResult = GetOptions(
'slowest' => \$report10Slowest,
'strip-editing-callbacks!' => \$stripEditingCallbacks,
'threaded|t' => \$threaded,
- 'html5-parser' => \$html5parser,
+ 'html5-treebuilder' => \$html5treebuilder,
'timeout=i' => \$timeoutSeconds,
'tolerance=f' => \$tolerance,
'use-remote-links-to-tests' => \$useRemoteLinksToTests,
@@ -331,6 +346,14 @@ if (!$getOptionsResult || $showHelp) {
exit 1;
}
+if ($useWebKitTestRunner) {
+ if (isAppleMacWebKit()) {
+ $realPlatform = $platform;
+ $platform = "mac-wk2";
+ }
+}
+
+
my $ignoreSkipped = $treatSkipped eq "ignore";
my $skippedOnly = $treatSkipped eq "only";
@@ -556,7 +579,7 @@ my $totalLeaks = 0;
my @toolArgs = ();
push @toolArgs, "--pixel-tests" if $pixelTests;
push @toolArgs, "--threaded" if $threaded;
-push @toolArgs, "--html5-parser" if $html5parser;
+push @toolArgs, "--html5-treebuilder" if $html5treebuilder;
push @toolArgs, "--complex-text" if $complexText;
push @toolArgs, "-";
@@ -1370,7 +1393,11 @@ sub openDumpTool()
setPathForRunningWebKitApp(\%CLEAN_ENV);
}
- # Port spesifics
+ # Port specifics
+ if (isGtk()) {
+ $CLEAN_ENV{GTK_MODULES} = "gail";
+ }
+
if (isQt()) {
$CLEAN_ENV{QTWEBKIT_PLUGIN_PATH} = productDir() . "/lib/plugins";
$CLEAN_ENV{QT_DRT_WEBVIEW_MODE} = $ENV{"QT_DRT_WEBVIEW_MODE"};
@@ -1852,13 +1879,23 @@ sub buildPlatformResultHierarchy()
mkpath($platformTestDirectory) if ($platform eq "undefined" && !-d "$platformTestDirectory");
my @platforms;
- if ($platform =~ /^mac-/) {
+
+ my $isMac = $platform =~ /^mac/;
+ my $isWin = $platform =~ /^win/;
+ if ($isMac || $isWin) {
+ my $effectivePlatform = $platform;
+ if ($platform eq "mac-wk2") {
+ push @platforms, "mac-wk2";
+ $effectivePlatform = $realPlatform;
+ }
+
+ my @platformList = $isMac ? @macPlatforms : @winPlatforms;
my $i;
- for ($i = 0; $i < @macPlatforms; $i++) {
- last if $macPlatforms[$i] eq $platform;
+ for ($i = 0; $i < @platformList; $i++) {
+ last if $platformList[$i] eq $effectivePlatform;
}
- for (; $i < @macPlatforms; $i++) {
- push @platforms, $macPlatforms[$i];
+ for (; $i < @platformList; $i++) {
+ push @platforms, $platformList[$i];
}
} elsif ($platform =~ /^qt-/) {
push @platforms, $platform;
@@ -1872,7 +1909,7 @@ sub buildPlatformResultHierarchy()
my $scoped = catdir($platformBaseDirectory, $platforms[$i]);
push(@hierarchy, $scoped) if (-d $scoped);
}
-
+
return @hierarchy;
}
@@ -1880,7 +1917,9 @@ sub buildPlatformTestHierarchy(@)
{
my (@platformHierarchy) = @_;
return @platformHierarchy if (@platformHierarchy < 2);
-
+ if ($platformHierarchy[0] =~ /mac-wk2/) {
+ return ($platformHierarchy[0], $platformHierarchy[1], $platformHierarchy[$#platformHierarchy]);
+ }
return ($platformHierarchy[0], $platformHierarchy[$#platformHierarchy]);
}
@@ -2264,14 +2303,24 @@ sub printResults
sub stopRunningTestsEarlyIfNeeded()
{
# --reset-results does not check pass vs. fail, so exitAfterNFailures makes no sense with --reset-results.
- return 0 if !$exitAfterNFailures || $resetResults;
+ return 0 if $resetResults;
my $passCount = $counts{match} || 0; # $counts{match} will be undefined if we've not yet passed a test (e.g. the first test fails).
my $newCount = $counts{new} || 0;
my $failureCount = $count - $passCount - $newCount; # "Failure" here includes timeouts, crashes, etc.
- return 0 if $failureCount < $exitAfterNFailures;
+ if ($exitAfterNFailures && $failureCount >= $exitAfterNFailures) {
+ print "\nExiting early after $failureCount failures. $count tests run.";
+ closeDumpTool();
+ return 1;
+ }
- print "\nExiting early after $failureCount failures. $count tests run.";
- closeDumpTool();
- return 1;
+ my $crashCount = $counts{crash} || 0;
+ my $timeoutCount = $counts{timedout} || 0;
+ if ($exitAfterNCrashesOrTimeouts && $crashCount + $timeoutCount >= $exitAfterNCrashesOrTimeouts) {
+ print "\nExiting early after $crashCount crashes and $timeoutCount timeouts. $count tests run.";
+ closeDumpTool();
+ return 1;
+ }
+
+ return 0;
}
diff --git a/WebKitTools/Scripts/run-qtwebkit-tests b/WebKitTools/Scripts/run-qtwebkit-tests
new file mode 100644
index 0000000..373de0a
--- /dev/null
+++ b/WebKitTools/Scripts/run-qtwebkit-tests
@@ -0,0 +1,358 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+
+#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.
+
+from __future__ import with_statement
+
+import sys
+import os
+import os.path
+import re
+import logging
+from subprocess import Popen, PIPE, STDOUT
+from optparse import OptionParser
+
+
+class Log(object):
+ def __init__(self, name):
+ self._log = logging.getLogger(name)
+ self.debug = self._log.debug
+ self.warn = self._log.warn
+ self.error = self._log.error
+ self.exception = self._log.exception
+ self.info = self._log.info
+
+
+class Options(Log):
+ """ Option manager. It parses and checks script's parameters, sets an internal variable. """
+
+ def __init__(self, args):
+ Log.__init__(self, "Options")
+ log = self._log
+ opt = OptionParser("%prog [options] PathToSearch.\nTry -h or --help.")
+ opt.add_option("-j", "--parallel-level", action="store", type="int",
+ dest="parallel_level", default=None,
+ help="Number of parallel processes executing the Qt's tests. Default: cpu count.")
+ opt.add_option("-v", "--verbose", action="store", type="int",
+ dest="verbose", default=2,
+ help="Verbose level (0 - quiet, 1 - errors only, 2 - infos and warnings, 3 - debug information). Default: %default.")
+ opt.add_option("", "--tests-options", action="store", type="string",
+ dest="tests_options", default="",
+ help="Parameters passed to Qt's tests (for example '-eventdelay 123').")
+ opt.add_option("-o", "--output-file", action="store", type="string",
+ dest="output_file", default="/tmp/qtwebkittests.html",
+ help="File where results will be stored. The file will be overwritten. Default: %default.")
+ opt.add_option("-b", "--browser", action="store", dest="browser",
+ default="xdg-open",
+ help="Browser in which results will be opened. Default %default.")
+ opt.add_option("", "--do-not-open-results", action="store_false",
+ dest="open_results", default=True,
+ help="The results shouldn't pop-up in a browser automatically")
+ opt.add_option("-d", "--developer-mode", action="store_true",
+ dest="developer", default=False,
+ help="Special mode for debugging. In general it simulates human behavior, running all autotests. In the mode everything is executed synchronously, no html output will be generated, no changes or transformation will be applied to stderr or stdout. In this mode options; parallel-level, output-file, browser and do-not-open-results will be ignored.")
+
+ self._o, self._a = opt.parse_args(args)
+ verbose = self._o.verbose
+ if verbose == 0:
+ logging.basicConfig(level=logging.CRITICAL,)
+ elif verbose == 1:
+ logging.basicConfig(level=logging.ERROR,)
+ elif verbose == 2:
+ logging.basicConfig(level=logging.INFO,)
+ elif verbose == 3:
+ logging.basicConfig(level=logging.DEBUG,)
+ else:
+ logging.basicConfig(level=logging.INFO,)
+ log.warn("Bad verbose level, switching to default.")
+ try:
+ if not os.path.exists(self._a[0]):
+ raise Exception("Given path doesn't exist.")
+ if len(self._a) > 1:
+ raise IndexError("Only one directory could be provided.")
+ self._o.path = self._a[0]
+ except IndexError:
+ log.error("Bad usage. Please try -h or --help.")
+ sys.exit(1)
+ except Exception:
+ log.error("Path '%s' doesn't exist", self._a[0])
+ sys.exit(2)
+ if self._o.developer:
+ if not self._o.parallel_level is None:
+ log.warn("Developer mode sets parallel-level option to one.")
+ self._o.parallel_level = 1
+ self._o.open_results = False
+
+ def __getattr__(self, attr):
+ """ Maps all options properties into this object (remove one level of indirection). """
+ return getattr(self._o, attr)
+
+
+def run_test(args):
+ """ Runs one given test.
+ args should contain a tuple with 3 elements;
+ TestSuiteResult containing full file name of an autotest executable.
+ str with options that should be passed to the autotest executable
+ bool if true then the stdout will be buffered and separated from the stderr, if it is false
+ then the stdout and the stderr will be merged together and left unbuffered (the TestSuiteResult output will be None).
+ """
+ log = logging.getLogger("Exec")
+ test_suite, options, buffered = args
+ try:
+ log.info("Running... %s", test_suite.test_file_name())
+ if buffered:
+ tst = Popen(test_suite.test_file_name() + options, stdout=PIPE, stderr=None, shell=True)
+ else:
+ tst = Popen(test_suite.test_file_name() + options, stdout=None, stderr=STDOUT, shell=True)
+ except OSError, e:
+ log.exception("Can't open an autotest file: '%s'. Skipping the test...", e.filename)
+ else:
+ test_suite.set_output(tst.communicate()[0]) # takes stdout only, in developer mode it would be None.
+ log.info("Finished %s", test_suite.test_file_name())
+ return test_suite
+
+
+class TestSuiteResult(object):
+ """ Keeps information about a test. """
+
+ def __init__(self):
+ self._output = None
+ self._test_file_name = None
+
+ def set_output(self, xml):
+ if xml:
+ self._output = xml.strip()
+
+ def output(self):
+ return self._output
+
+ def set_test_file_name(self, file_name):
+ self._test_file_name = file_name
+
+ def test_file_name(self):
+ return self._test_file_name
+
+
+class Main(Log):
+ """ The main script. All real work is done in run() method. """
+
+ def __init__(self, options):
+ Log.__init__(self, "Main")
+ self._options = options
+ if options.parallel_level > 1 or options.parallel_level is None:
+ try:
+ from multiprocessing import Pool
+ except ImportError:
+ self.warn("Import Error: the multiprocessing module couldn't be loaded (may be lack of python-multiprocessing package?). The Qt autotests will be executed one by one.")
+ options.parallel_level = 1
+ if options.parallel_level == 1:
+
+ class Pool(object):
+ """ A hack, created to avoid problems with multiprocessing module, this class is single thread replacement for the multiprocessing.Pool class. """
+ def __init__(self, processes):
+ pass
+
+ def imap_unordered(self, func, files):
+ return map(func, files)
+
+ def map(self, func, files):
+ return map(func, files)
+
+ self._Pool = Pool
+
+ def run(self):
+ """ Find && execute && publish results of all test. "All in one" function. """
+ self.debug("Searching executables...")
+ tests_executables = self.find_tests_paths(self._options.path)
+ self.debug("Found: %s", len(tests_executables))
+ self.debug("Executing tests...")
+ results = self.run_tests(tests_executables)
+ if not self._options.developer:
+ self.debug("Transforming...")
+ transformed_results = self.transform(results)
+ self.debug("Publishing...")
+ self.announce_results(transformed_results)
+
+ def find_tests_paths(self, path):
+ """ Finds all tests executables inside the given path. """
+ executables = []
+ for root, dirs, files in os.walk(path):
+ # Check only for a file that name starts from 'tst_' and that we can execute.
+ filtered_path = filter(lambda w: w.startswith('tst_') and os.access(os.path.join(root, w), os.X_OK), files)
+ filtered_path = map(lambda w: os.path.join(root, w), filtered_path)
+ for file_name in filtered_path:
+ r = TestSuiteResult()
+ r.set_test_file_name(file_name)
+ executables.append(r)
+ return executables
+
+ def run_tests(self, files):
+ """ Executes given files by using a pool of workers. """
+ workers = self._Pool(processes=self._options.parallel_level)
+ # to each file add options.
+ self.debug("Using %s the workers pool, number of workers %i", repr(workers), self._options.parallel_level)
+ package = map(lambda w: [w, self._options.tests_options, not self._options.developer], files)
+ self.debug("Generated packages for workers: %s", repr(package))
+ results = workers.map(run_test, package) # Collects results.
+ return results
+
+ def transform(self, results):
+ """ Transforms list of the results to specialized versions. """
+ stdout = self.convert_to_stdout(results)
+ html = self.convert_to_html(results)
+ return {"stdout": stdout, "html": html}
+
+ def announce_results(self, results):
+ """ Shows the results. """
+ self.announce_results_stdout(results['stdout'])
+ self.announce_results_html(results['html'])
+
+ def announce_results_stdout(self, results):
+ """ Show the results by printing to the stdout."""
+ print(results)
+
+ def announce_results_html(self, results):
+ """ Shows the result by creating a html file and calling a web browser to render it. """
+ with file(self._options.output_file, 'w') as f:
+ f.write(results)
+ if self._options.open_results:
+ Popen(self._options.browser + " " + self._options.output_file, stdout=None, stderr=None, shell=True)
+
+ def convert_to_stdout(self, results):
+ """ Converts results, that they could be nicely presented in the stdout. """
+ # Join all results into one piece.
+ txt = "\n\n".join(map(lambda w: w.output(), results))
+ # Find total count of failed, skipped and passed tests.
+ totals = re.findall(r"([0-9]+) passed, ([0-9]+) failed, ([0-9]+) skipped", txt)
+ totals = reduce(lambda x, y: (int(x[0]) + int(y[0]), int(x[1]) + int(y[1]), int(x[2]) + int(y[2])), totals)
+ totals = map(str, totals)
+ totals = totals[0] + " passed, " + totals[1] + " failed, " + totals[2] + " skipped"
+ # Add a summary.
+ txt += '\n\n\n' + '*' * 70
+ txt += "\n**" + ("TOTALS: " + totals).center(66) + '**'
+ txt += '\n' + '*' * 70 + '\n'
+ return txt
+
+ def convert_to_html(self, results):
+ """ Converts results, that they could showed as a html page. """
+ # Join results into one piece.
+ txt = "\n\n".join(map(lambda w: w.output(), results))
+ txt = txt.replace('&', '&amp;').replace('<', "&lt;").replace('>', "&gt;")
+ # Add a color and a style.
+ txt = re.sub(r"([* ]+(Finished)[ a-z_A-Z0-9]+[*]+)",
+ lambda w: r"",
+ txt)
+ txt = re.sub(r"([*]+[ a-z_A-Z0-9]+[*]+)",
+ lambda w: "<case class='good'><br><br><b>" + w.group(0) + r"</b></case>",
+ txt)
+ txt = re.sub(r"(Config: Using QTest library)((.)+)",
+ lambda w: "\n<case class='good'><br><i>" + w.group(0) + r"</i> ",
+ txt)
+ txt = re.sub(r"\n(PASS)((.)+)",
+ lambda w: "</case>\n<case class='good'><br><status class='pass'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(FAIL!)((.)+)",
+ lambda w: "</case>\n<case class='bad'><br><status class='fail'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(XPASS)((.)+)",
+ lambda w: "</case>\n<case class='bad'><br><status class='xpass'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(XFAIL)((.)+)",
+ lambda w: "</case>\n<case class='good'><br><status class='xfail'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(SKIP)((.)+)",
+ lambda w: "</case>\n<case class='good'><br><status class='xfail'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(QWARN)((.)+)",
+ lambda w: "</case>\n<case class='bad'><br><status class='warn'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(RESULT)((.)+)",
+ lambda w: "</case>\n<case class='good'><br><status class='benchmark'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(QFATAL)((.)+)",
+ lambda w: "</case>\n<case class='bad'><br><status class='crash'>" + w.group(1) + r"</status>" + w.group(2),
+ txt)
+ txt = re.sub(r"\n(Totals:)([0-9', a-z]*)",
+ lambda w: "</case>\n<case class='good'><br><b>" + w.group(1) + r"</b>" + w.group(2) + "</case>",
+ txt)
+ # Find total count of failed, skipped and passed tests.
+ totals = re.findall(r"([0-9]+) passed, ([0-9]+) failed, ([0-9]+) skipped", txt)
+ totals = reduce(lambda x, y: (int(x[0]) + int(y[0]), int(x[1]) + int(y[1]), int(x[2]) + int(y[2])), totals)
+ totals = map(str, totals)
+ totals = totals[0] + " passed, " + totals[1] + " failed, " + totals[2] + " skipped."
+ # Create a header of the html source.
+ txt = """
+ <html>
+ <head>
+ <script>
+ function init() {
+ // Try to find the right styleSheet (this document could be embedded in an other html doc)
+ for (i = document.styleSheets.length - 1; i >= 0; --i) {
+ if (document.styleSheets[i].cssRules[0].selectorText == "case.good") {
+ resultStyleSheet = i;
+ return;
+ }
+ }
+ // The styleSheet hasn't been found, but it should be the last one.
+ resultStyleSheet = document.styleSheets.length - 1;
+ }
+
+ function hide() {
+ document.styleSheets[resultStyleSheet].cssRules[0].style.display='none';
+ }
+
+ function show() {
+ document.styleSheets[resultStyleSheet].cssRules[0].style.display='';
+ }
+
+ </script>
+ <style type="text/css">
+ case.good {color:black}
+ case.bad {color:black}
+ status.pass {color:green}
+ status.crash {color:red}
+ status.fail {color:red}
+ status.xpass {color:663300}
+ status.xfail {color:004500}
+ status.benchmark {color:000088}
+ status.warn {color:orange}
+ status.crash {color:red; text-decoration:blink; background-color:black}
+ </style>
+ </head>
+ <body onload="init()">
+ <center>
+ <h1>Qt's autotests results</h1>%(totals)s<br>
+ <hr>
+ <form>
+ <input type="button" value="Show failures only" onclick="hide()"/>
+ &nbsp;
+ <input type="button" value="Show all" onclick="show()"/>
+ </form>
+ </center>
+ <hr>
+ %(results)s
+ </body>
+ </html>""" % {"totals": totals, "results": txt}
+ return txt
+
+
+if __name__ == '__main__':
+ options = Options(sys.argv[1:])
+ main = Main(options)
+ main.run()
diff --git a/WebKitTools/Scripts/webkitdirs.pm b/WebKitTools/Scripts/webkitdirs.pm
index 9f54c3e..674dc8c 100644
--- a/WebKitTools/Scripts/webkitdirs.pm
+++ b/WebKitTools/Scripts/webkitdirs.pm
@@ -73,6 +73,7 @@ my $isInspectorFrontend;
my $vcBuildPath;
my $windowsTmpPath;
my $windowsSourceDir;
+my $winVersion;
my $willUseVCExpressWhenBuilding = 0;
# Defined in VCSUtils.
@@ -799,6 +800,41 @@ sub isCygwin()
return ($^O eq "cygwin") || 0;
}
+sub determineWinVersion()
+{
+ return if $winVersion;
+
+ if (!isCygwin()) {
+ $winVersion = -1;
+ return;
+ }
+
+ my $versionString = `uname -s`;
+ $versionString =~ /(\d\.\d)/;
+ $winVersion = $1;
+}
+
+sub winVersion()
+{
+ determineWinVersion();
+ return $winVersion;
+}
+
+sub isWindows7()
+{
+ return winVersion() eq "6.1";
+}
+
+sub isWindowsVista()
+{
+ return winVersion() eq "6.0";
+}
+
+sub isWindowsXP()
+{
+ return winVersion() eq "5.1";
+}
+
sub isDarwin()
{
return ($^O eq "darwin") || 0;
@@ -1309,31 +1345,29 @@ sub buildAutotoolsProject($@)
}
if (! -d $dir) {
- system "mkdir", "-p", "$dir";
- if (! -d $dir) {
- die "Failed to create build directory " . $dir;
- }
+ File::Path::mkpath($dir) or die "Failed to create build directory " . $dir
}
-
chdir $dir or die "Failed to cd into " . $dir . "\n";
- my $result;
if ($clean) {
- #$result = system $make, "distclean";
return 0;
}
- print "Calling configure in " . $dir . "\n\n";
- print "Installation prefix directory: $prefix\n" if(defined($prefix));
-
- # Make the path relative since it will appear in all -I compiler flags.
- # Long argument lists cause bizarre slowdowns in libtool.
- my $relSourceDir = File::Spec->abs2rel($sourceDir);
- $relSourceDir = "." if !$relSourceDir;
-
- $result = system "$relSourceDir/autogen.sh", @buildArgs;
- if ($result ne 0) {
- die "Failed to setup build environment using 'autotools'!\n";
+ # If GNUmakefile exists, don't run autogen.sh. The makefile should be
+ # smart enough to track autotools dependencies and re-run autogen.sh
+ # when build files change.
+ my $result;
+ if (! -e "GNUmakefile") {
+ print "Calling configure in " . $dir . "\n\n";
+ print "Installation prefix directory: $prefix\n" if(defined($prefix));
+
+ # Make the path relative since it will appear in all -I compiler flags.
+ # Long argument lists cause bizarre slowdowns in libtool.
+ my $relSourceDir = File::Spec->abs2rel($sourceDir) || ".";
+ $result = system "$relSourceDir/autogen.sh", @buildArgs;
+ if ($result ne 0) {
+ die "Failed to setup build environment using 'autotools'!\n";
+ }
}
$result = system "$make $makeArgs";
diff --git a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl
index d21c706..2fd187b 100644
--- a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl
+++ b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl
@@ -30,7 +30,7 @@
# Unit tests of VCSUtils::fixChangeLogPatch().
-use Test::Simple tests => 7;
+use Test::Simple tests => 8;
use VCSUtils;
# The source ChangeLog for these tests is the following:
@@ -123,6 +123,31 @@ END
ok(fixChangeLogPatch($in) eq $in, $title);
# New test
+$title = "fixChangeLogPatch: [no change] New entry inserted earlier in the file, but after an entry with the same author and date.";
+
+$in = <<'END';
+--- ChangeLog
++++ ChangeLog
+@@ -70,6 +70,14 @@
+
+ 2009-12-22 Alice <alice@email.address>
+
++ Reviewed by Sue.
++
++ Changed some more code on 2009-12-22.
++
++ * File:
++
++2009-12-22 Alice <alice@email.address>
++
+ Reviewed by Ray.
+
+ Changed some code on 2009-12-22.
+END
+
+ok(fixChangeLogPatch($in) eq $in, $title);
+
+# New test
$title = "fixChangeLogPatch: Leading context includes first line.";
$in = <<'END';
diff --git a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
index 6af7da4..245916c 100644
--- a/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
+++ b/WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
@@ -91,10 +91,6 @@ Index: test_file.swf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
-Property changes on: test_file.swf
-___________________________________________________________________
-Name: svn:mime-type
- + application/octet-stream
Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
@@ -236,6 +232,401 @@ undef],
expectedNextLine => undef,
},
####
+# Property Changes: Simple
+##
+{
+ # New test
+ diffName => "SVN: file change diff with property change diff",
+ inputText => <<'END',
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+Property changes on: Makefile
+___________________________________________________________________
+Name: svn:executable
+ + *
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+END
+ executableBitDelta => 1,
+ indexPath => "Makefile",
+ isSvn => 1,
+ sourceRevision => "60021",
+}],
+undef],
+ expectedNextLine => undef,
+},
+{
+ # New test
+ diffName => "SVN: file change diff, followed by property change diff on different file",
+ inputText => <<'END',
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+Property changes on: Makefile.shared
+___________________________________________________________________
+Name: svn:executable
+ + *
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+END
+ indexPath => "Makefile",
+ isSvn => 1,
+ sourceRevision => "60021",
+}],
+"Property changes on: Makefile.shared\n"],
+ expectedNextLine => "___________________________________________________________________\n",
+},
+{
+ # New test
+ diffName => "SVN: property diff, followed by file change diff",
+ inputText => <<'END',
+Property changes on: Makefile
+___________________________________________________________________
+Deleted: svn:executable
+ - *
+
+Index: Makefile.shared
+===================================================================
+--- Makefile.shared (revision 60021)
++++ Makefile.shared (working copy)
+@@ -1,3 +1,4 @@
++
+SCRIPTS_PATH ?= ../WebKitTools/Scripts
+XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
+END
+ expectedReturn => [
+[{
+ executableBitDelta => -1,
+ indexPath => "Makefile",
+ isSvn => 1,
+}],
+"Index: Makefile.shared\n"],
+ expectedNextLine => "===================================================================\n",
+},
+{
+ # New test
+ diffName => "SVN: copied file with property change",
+ inputText => <<'END',
+Index: NMakefile
+===================================================================
+--- NMakefile (revision 60021) (from Makefile:60021)
++++ NMakefile (working copy)
+@@ -0,0 +1,1 @@
++MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+Property changes on: NMakefile
+___________________________________________________________________
+Added: svn:executable
+ + *
+END
+ expectedReturn => [
+[{
+ copiedFromPath => "Makefile",
+ executableBitDelta => 1,
+ indexPath => "NMakefile",
+ sourceRevision => "60021",
+}],
+undef],
+ expectedNextLine => undef,
+},
+{
+ # New test
+ diffName => "SVN: two consecutive property diffs",
+ inputText => <<'END',
+Property changes on: Makefile
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+
+Property changes on: Makefile.shared
+___________________________________________________________________
+Added: svn:executable
+ + *
+END
+ expectedReturn => [
+[{
+ executableBitDelta => 1,
+ indexPath => "Makefile",
+ isSvn => 1,
+}],
+"Property changes on: Makefile.shared\n"],
+ expectedNextLine => "___________________________________________________________________\n",
+},
+####
+# Property Changes: Binary files
+##
+{
+ # New test
+ diffName => "SVN: binary file with executable bit change",
+ inputText => <<'END',
+Index: test_file.swf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+
+Property changes on: test_file.swf
+___________________________________________________________________
+Name: svn:mime-type
+ + application/octet-stream
+Name: svn:executable
+ + *
+
+
+Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: test_file.swf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+
+
+
+Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
+END
+ executableBitDelta => 1,
+ indexPath => "test_file.swf",
+ isBinary => 1,
+ isSvn => 1,
+}],
+undef],
+ expectedNextLine => undef,
+},
+{
+ # New test
+ diffName => "SVN: binary file followed by property change on different file",
+ inputText => <<'END',
+Index: test_file.swf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+
+Property changes on: test_file.swf
+___________________________________________________________________
+Name: svn:mime-type
+ + application/octet-stream
+
+
+Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
+
+Property changes on: Makefile
+___________________________________________________________________
+Added: svn:executable
+ + *
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: test_file.swf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+
+
+
+Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
+
+END
+ indexPath => "test_file.swf",
+ isBinary => 1,
+ isSvn => 1,
+}],
+"Property changes on: Makefile\n"],
+ expectedNextLine => "___________________________________________________________________\n",
+},
+{
+ # New test
+ diffName => "SVN: binary file followed by file change on different file",
+ inputText => <<'END',
+Index: test_file.swf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+
+Property changes on: test_file.swf
+___________________________________________________________________
+Name: svn:mime-type
+ + application/octet-stream
+
+
+Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
+
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: test_file.swf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+
+
+
+Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
+
+END
+ indexPath => "test_file.swf",
+ isBinary => 1,
+ isSvn => 1,
+}],
+"Index: Makefile\n"],
+ expectedNextLine => "===================================================================\n",
+},
+####
+# Property Changes: File change with property change
+##
+{
+ # New test
+ diffName => "SVN: file change diff with property change, followed by property change diff",
+ inputText => <<'END',
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+Property changes on: Makefile
+___________________________________________________________________
+Added: svn:executable
+ + *
+
+
+Property changes on: Makefile.shared
+___________________________________________________________________
+Deleted: svn:executable
+ - *
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+
+
+END
+ executableBitDelta => 1,
+ indexPath => "Makefile",
+ isSvn => 1,
+ sourceRevision => "60021",
+}],
+"Property changes on: Makefile.shared\n"],
+ expectedNextLine => "___________________________________________________________________\n",
+},
+{
+ # New test
+ diffName => "SVN: file change diff with property change, followed by file change diff",
+ inputText => <<'END',
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+Property changes on: Makefile
+___________________________________________________________________
+Name: svn:executable
+ - *
+
+Index: Makefile.shared
+===================================================================
+--- Makefile.shared (revision 60021)
++++ Makefile.shared (working copy)
+@@ -1,3 +1,4 @@
++
+SCRIPTS_PATH ?= ../WebKitTools/Scripts
+XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
+END
+ expectedReturn => [
+[{
+ svnConvertedText => <<'END', # Same as input text
+Index: Makefile
+===================================================================
+--- Makefile (revision 60021)
++++ Makefile (working copy)
+@@ -1,3 +1,4 @@
++
+ MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools
+
+ all:
+
+
+END
+ executableBitDelta => -1,
+ indexPath => "Makefile",
+ isSvn => 1,
+ sourceRevision => "60021",
+}],
+"Index: Makefile.shared\n"],
+ expectedNextLine => "===================================================================\n",
+},
+####
# Git test cases
##
{
@@ -451,6 +842,7 @@ END
indexPath => "foo_new",
},
{
+ executableBitDelta => 1,
indexPath => "foo_new",
isGit => 1,
svnConvertedText => <<'END',
diff --git a/WebKitTools/Scripts/webkitpy/common/checkout/api.py b/WebKitTools/Scripts/webkitpy/common/checkout/api.py
index a5ac939..ca28e32 100644
--- a/WebKitTools/Scripts/webkitpy/common/checkout/api.py
+++ b/WebKitTools/Scripts/webkitpy/common/checkout/api.py
@@ -83,16 +83,16 @@ class Checkout(object):
def bug_id_for_revision(self, revision):
return self.commit_info_for_revision(revision).bug_id()
- def modified_changelogs(self, git_commit, squash):
+ def modified_changelogs(self, git_commit):
# SCM returns paths relative to scm.checkout_root
# Callers (especially those using the ChangeLog class) may
# expect absolute paths, so this method returns absolute paths.
- changed_files = self._scm.changed_files(git_commit, squash)
+ changed_files = self._scm.changed_files(git_commit)
absolute_paths = [os.path.join(self._scm.checkout_root, path) for path in changed_files]
return [path for path in absolute_paths if self._is_path_to_changelog(path)]
- def commit_message_for_this_commit(self, git_commit, squash):
- changelog_paths = self.modified_changelogs(git_commit, squash)
+ def commit_message_for_this_commit(self, git_commit):
+ changelog_paths = self.modified_changelogs(git_commit)
if not len(changelog_paths):
raise ScriptError(message="Found no modified ChangeLogs, cannot create a commit message.\n"
"All changes require a ChangeLog. See:\n"
@@ -109,9 +109,9 @@ class Checkout(object):
# FIXME: We should sort and label the ChangeLog messages like commit-log-editor does.
return CommitMessage("".join(changelog_messages).splitlines())
- def bug_id_for_this_commit(self, git_commit, squash):
+ def bug_id_for_this_commit(self, git_commit):
try:
- return parse_bug_id(self.commit_message_for_this_commit(git_commit, squash).message())
+ return parse_bug_id(self.commit_message_for_this_commit(git_commit).message())
except ScriptError, e:
pass # We might not have ChangeLogs.
@@ -131,7 +131,7 @@ class Checkout(object):
# We revert the ChangeLogs because removing lines from a ChangeLog
# doesn't make sense. ChangeLogs are append only.
- changelog_paths = self.modified_changelogs(git_commit=None, squash=False)
+ changelog_paths = self.modified_changelogs(git_commit=None)
if len(changelog_paths):
self._scm.revert_files(changelog_paths)
diff --git a/WebKitTools/Scripts/webkitpy/common/checkout/api_unittest.py b/WebKitTools/Scripts/webkitpy/common/checkout/api_unittest.py
index 1436379..fdfd879 100644
--- a/WebKitTools/Scripts/webkitpy/common/checkout/api_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/common/checkout/api_unittest.py
@@ -114,11 +114,11 @@ class CommitMessageForThisCommitTest(unittest.TestCase):
# ChangeLog is difficult to mock at current.
def test_commit_message_for_this_commit(self):
checkout = Checkout(None)
- checkout.modified_changelogs = lambda git_commit, squash: ["ChangeLog1", "ChangeLog2"]
+ checkout.modified_changelogs = lambda git_commit: ["ChangeLog1", "ChangeLog2"]
output = OutputCapture()
expected_stderr = "Parsing ChangeLog: ChangeLog1\nParsing ChangeLog: ChangeLog2\n"
commit_message = output.assert_outputs(self, checkout.commit_message_for_this_commit,
- kwargs={"git_commit": None, "squash": False}, expected_stderr=expected_stderr)
+ kwargs={"git_commit": None}, expected_stderr=expected_stderr)
self.assertEqual(commit_message.message(), self.expected_commit_message)
@@ -163,13 +163,13 @@ class CheckoutTest(unittest.TestCase):
def test_bug_id_for_this_commit(self):
scm = Mock()
checkout = Checkout(scm)
- checkout.commit_message_for_this_commit = lambda git_commit, squash: CommitMessage(ChangeLogEntry(_changelog1entry1).contents().splitlines())
- self.assertEqual(checkout.bug_id_for_this_commit(git_commit=None, squash=False), 36629)
+ checkout.commit_message_for_this_commit = lambda git_commit: CommitMessage(ChangeLogEntry(_changelog1entry1).contents().splitlines())
+ self.assertEqual(checkout.bug_id_for_this_commit(git_commit=None), 36629)
def test_modified_changelogs(self):
scm = Mock()
scm.checkout_root = "/foo/bar"
- scm.changed_files = lambda git_commit, squash: ["file1", "ChangeLog", "relative/path/ChangeLog"]
+ scm.changed_files = lambda git_commit: ["file1", "ChangeLog", "relative/path/ChangeLog"]
checkout = Checkout(scm)
expected_changlogs = ["/foo/bar/ChangeLog", "/foo/bar/relative/path/ChangeLog"]
- self.assertEqual(checkout.modified_changelogs(git_commit=None, squash=False), expected_changlogs)
+ self.assertEqual(checkout.modified_changelogs(git_commit=None), expected_changlogs)
diff --git a/WebKitTools/Scripts/webkitpy/common/checkout/scm.py b/WebKitTools/Scripts/webkitpy/common/checkout/scm.py
index d7c621c..569558a 100644
--- a/WebKitTools/Scripts/webkitpy/common/checkout/scm.py
+++ b/WebKitTools/Scripts/webkitpy/common/checkout/scm.py
@@ -35,7 +35,6 @@ import sys
import shutil
from webkitpy.common.system.executive import Executive, run_command, ScriptError
-from webkitpy.common.system.user import User
from webkitpy.common.system.deprecated_logging import error, log
@@ -94,6 +93,17 @@ def commit_error_handler(error):
Executive.default_error_handler(error)
+class AuthenticationError(Exception):
+ def __init__(self, server_host):
+ self.server_host = server_host
+
+
+class AmbiguousCommitError(Exception):
+ def __init__(self, num_local_commits, working_directory_is_clean):
+ self.num_local_commits = num_local_commits
+ self.working_directory_is_clean = working_directory_is_clean
+
+
# SCM methods are expected to return paths relative to self.checkout_root.
class SCM:
def __init__(self, cwd):
@@ -198,7 +208,7 @@ class SCM:
def delete(self, path):
self._subclass_must_implement()
- def changed_files(self, git_commit=None, squash=None):
+ def changed_files(self, git_commit=None):
self._subclass_must_implement()
def changed_files_for_revision(self):
@@ -213,7 +223,7 @@ class SCM:
def display_name(self):
self._subclass_must_implement()
- def create_patch(self, git_commit=None, squash=None):
+ def create_patch(self, git_commit=None):
self._subclass_must_implement()
def committer_email_for_revision(self, revision):
@@ -237,10 +247,7 @@ class SCM:
def revert_files(self, file_paths):
self._subclass_must_implement()
- def should_squash(self, squash):
- self._subclass_must_implement()
-
- def commit_with_message(self, message, username=None, git_commit=None, squash=None):
+ def commit_with_message(self, message, username=None, git_commit=None, force_squash=False):
self._subclass_must_implement()
def svn_commit_log(self, svn_revision):
@@ -377,7 +384,7 @@ class SVN(SCM):
parent, base = os.path.split(os.path.abspath(path))
return self.run(["svn", "delete", "--force", base], cwd=parent)
- def changed_files(self, git_commit=None, squash=None):
+ def changed_files(self, git_commit=None):
return self.run_status_and_extract_filenames(self.status_command(), self._status_regexp("ACDMR"))
def changed_files_for_revision(self, revision):
@@ -403,7 +410,7 @@ class SVN(SCM):
return "svn"
# FIXME: This method should be on Checkout.
- def create_patch(self, git_commit=None, squash=None):
+ def create_patch(self, git_commit=None):
"""Returns a byte array (str()) representing the patch file.
Patch files are effectively binary since they may contain
files of multiple different encodings."""
@@ -477,22 +484,19 @@ class SVN(SCM):
# FIXME: This should probably use cwd=self.checkout_root.
self.run(['svn', 'revert'] + file_paths)
- def should_squash(self, squash):
- # SVN doesn't support the concept of squashing.
- return False
-
- def commit_with_message(self, message, username=None, git_commit=None, squash=None):
- # squash and git-commit are not used by SVN.
+ def commit_with_message(self, message, username=None, git_commit=None, force_squash=False):
+ # git-commit and force are not used by SVN.
if self.dryrun:
# Return a string which looks like a commit so that things which parse this output will succeed.
return "Dry run, no commit.\nCommitted revision 0."
+
svn_commit_args = ["svn", "commit"]
+
if not username and not self.has_authorization_for_realm():
- username = User.prompt("%s login: " % self.svn_server_host, repeat=5)
- if not username:
- raise Exception("You need to specify the username on %s to perform the commit as." % self.svn_server_host)
+ raise AuthenticationError(self.svn_server_host)
if username:
svn_commit_args.extend(["--username", username])
+
svn_commit_args.extend(["-m", message])
# FIXME: Should this use cwd=self.checkout_root?
return self.run(svn_commit_args, error_handler=commit_error_handler)
@@ -584,24 +588,25 @@ class Git(SCM):
def delete(self, path):
return self.run(["git", "rm", "-f", path])
- def _merge_base(self, git_commit, squash):
+ def _assert_synced(self):
+ if len(run_command(['git', 'rev-list', '--max-count=1', self.remote_branch_ref(), '^HEAD'])):
+ raise ScriptError(message="Not fully merged/rebased to %s. This branch needs to be synced first." % self.remote_branch_ref())
+
+ def merge_base(self, git_commit):
if git_commit:
- # FIXME: Calling code should turn commit ranges into a list of commit IDs
- # and then treat each commit separately.
+ # Special-case HEAD.. to mean working-copy changes only.
+ if git_commit.upper() == 'HEAD..':
+ return 'HEAD'
+
if '..' not in git_commit:
git_commit = git_commit + "^.." + git_commit
return git_commit
- if self.should_squash(squash):
- return self.remote_merge_base()
-
- # FIXME: Non-squash behavior should match commit_with_message. It raises an error
- # if there are working copy changes and --squash or --no-squash wasn't passed in.
- # If --no-squash, then it should proceed with each local commit as a separate patch.
- return 'HEAD'
+ self._assert_synced()
+ return self.remote_merge_base()
- def changed_files(self, git_commit=None, squash=None):
- status_command = ['git', 'diff', '-r', '--name-status', '-C', '-M', "--no-ext-diff", "--full-index", self._merge_base(git_commit, squash)]
+ def changed_files(self, git_commit=None):
+ status_command = ['git', 'diff', '-r', '--name-status', '-C', '-M', "--no-ext-diff", "--full-index", self.merge_base(git_commit)]
return self.run_status_and_extract_filenames(status_command, self._status_regexp("ADM"))
def _changes_files_for_commit(self, git_commit):
@@ -633,12 +638,12 @@ class Git(SCM):
def display_name(self):
return "git"
- def create_patch(self, git_commit=None, squash=None):
+ def create_patch(self, git_commit=None):
"""Returns a byte array (str()) representing the patch file.
Patch files are effectively binary since they may contain
files of multiple different encodings."""
# FIXME: This should probably use cwd=self.checkout_root
- return self.run(['git', 'diff', '--binary', "--no-ext-diff", "--full-index", "-M", self._merge_base(git_commit, squash)], decode_output=False)
+ return self.run(['git', 'diff', '--binary', "--no-ext-diff", "--full-index", "-M", self.merge_base(git_commit)], decode_output=False)
@classmethod
def git_commit_from_svn_revision(cls, revision):
@@ -679,63 +684,41 @@ class Git(SCM):
def revert_files(self, file_paths):
self.run(['git', 'checkout', 'HEAD'] + file_paths)
- def _get_squash_error_message(self, num_local_commits):
- working_directory_message = "" if self.working_directory_is_clean() else " and working copy changes"
- return ("""There are %s local commits%s. Do one of the following:
- 1) Use --squash or --no-squash
- 2) git config webkit-patch.squash true/false
- """ % (num_local_commits, working_directory_message))
-
- def should_squash(self, squash):
- if squash is None:
- config_squash = Git.read_git_config('webkit-patch.squash')
- if (config_squash and config_squash is not ""):
- squash = config_squash.lower() == "true"
- else:
- # Only raise an error if there are actually multiple commits to squash.
- num_local_commits = len(self.local_commits())
- if num_local_commits > 1 or (num_local_commits > 0 and not self.working_directory_is_clean()):
- raise ScriptError(message=self._get_squash_error_message(num_local_commits))
-
- if squash and self._remote_branch_has_extra_commits():
- raise ScriptError(message="Cannot use --squash when HEAD is not fully merged/rebased to %s. "
- "This branch needs to be synced first." % self.remote_branch_ref())
+ def _assert_can_squash(self, working_directory_is_clean):
+ squash = Git.read_git_config('webkit-patch.commit_should_always_squash')
+ should_squash = squash and squash.lower() == "true"
- return squash
+ if not should_squash:
+ # Only warn if there are actually multiple commits to squash.
+ num_local_commits = len(self.local_commits())
+ if num_local_commits > 1 or (num_local_commits > 0 and not working_directory_is_clean):
+ raise AmbiguousCommitError(num_local_commits, working_directory_is_clean)
- def _remote_branch_has_extra_commits(self):
- return len(run_command(['git', 'rev-list', '--max-count=1', self.remote_branch_ref(), '^HEAD']))
-
- def commit_with_message(self, message, username=None, git_commit=None, squash=None):
+ def commit_with_message(self, message, username=None, git_commit=None, force_squash=False):
# Username is ignored during Git commits.
+ working_directory_is_clean = self.working_directory_is_clean()
+
if git_commit:
+ # Special-case HEAD.. to mean working-copy changes only.
+ if git_commit.upper() == 'HEAD..':
+ if working_directory_is_clean:
+ raise ScriptError(message="The working copy is not modified. --git-commit=HEAD.. only commits working copy changes.")
+ self.commit_locally_with_message(message)
+ return self._commit_on_branch(message, 'HEAD')
+
# Need working directory changes to be committed so we can checkout the merge branch.
- if not self.working_directory_is_clean():
+ if not working_directory_is_clean:
# FIXME: webkit-patch land will modify the ChangeLogs to correct the reviewer.
# That will modify the working-copy and cause us to hit this error.
- # The ChangeLog modification could be made to modify the existing local commit?
+ # The ChangeLog modification could be made to modify the existing local commit.
raise ScriptError(message="Working copy is modified. Cannot commit individual git_commits.")
return self._commit_on_branch(message, git_commit)
- squash = self.should_squash(squash)
- if squash:
- self.run(['git', 'reset', '--soft', self.remote_branch_ref()])
- self.commit_locally_with_message(message)
- elif not self.working_directory_is_clean():
- if not len(self.local_commits()):
- # There are only working copy changes. Assume they should be committed.
- self.commit_locally_with_message(message)
- elif squash is None:
- # The user didn't explicitly say to squash or not squash. There are local commits
- # and working copy changes. Not clear what the user wants.
- raise ScriptError(message="""There are local commits and working copy changes. Do one of the following:
-1) Commit/revert working copy changes.
-2) Use --squash or --no-squash
-3) git config webkit-patch.squash true/false
-""")
-
- # FIXME: This will commit all local commits, each with it's own message. We should restructure
- # so that each local commit has the appropriate commit message based off it's ChangeLogs.
+ if not force_squash:
+ self._assert_can_squash(working_directory_is_clean)
+ self._assert_synced()
+ self.run(['git', 'reset', '--soft', self.remote_branch_ref()])
+ self.commit_locally_with_message(message)
return self.push_local_commits_to_server()
def _commit_on_branch(self, message, git_commit):
diff --git a/WebKitTools/Scripts/webkitpy/common/checkout/scm_unittest.py b/WebKitTools/Scripts/webkitpy/common/checkout/scm_unittest.py
index eaa3b46..852f838 100644
--- a/WebKitTools/Scripts/webkitpy/common/checkout/scm_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/common/checkout/scm_unittest.py
@@ -44,7 +44,7 @@ import shutil
from datetime import date
from webkitpy.common.checkout.api import Checkout
-from webkitpy.common.checkout.scm import detect_scm_system, SCM, SVN, CheckoutNeedsUpdate, commit_error_handler
+from webkitpy.common.checkout.scm import detect_scm_system, SCM, SVN, CheckoutNeedsUpdate, commit_error_handler, AuthenticationError, AmbiguousCommitError
from webkitpy.common.config.committers import Committer # FIXME: This should not be needed
from webkitpy.common.net.bugzilla import Attachment # FIXME: This should not be needed
from webkitpy.common.system.executive import Executive, run_command, ScriptError
@@ -597,6 +597,10 @@ Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
def test_commit_with_username(self):
self._shared_test_commit_with_message("dbates@webkit.org")
+ def test_commit_without_authorization(self):
+ self.scm.has_authorization_for_realm = lambda: False
+ self.assertRaises(AuthenticationError, self._shared_test_commit_with_message)
+
def test_has_authorization_for_realm(self):
scm = detect_scm_system(self.svn_checkout_path)
fake_home_dir = tempfile.mkdtemp(suffix="fake_home_dir")
@@ -867,24 +871,14 @@ class GitSVNTest(SCMTest):
def test_commit_text_parsing(self):
write_into_file_at_path('test_file', 'more test content')
- self.scm.commit_locally_with_message("another test commit")
commit_text = self.scm.commit_with_message("another test commit")
self.assertEqual(self.scm.svn_revision_from_commit_text(commit_text), '6')
self.scm.dryrun = True
write_into_file_at_path('test_file', 'still more test content')
- self.scm.commit_locally_with_message("yet another test commit")
commit_text = self.scm.commit_with_message("yet another test commit")
self.assertEqual(self.scm.svn_revision_from_commit_text(commit_text), '0')
- def _one_local_commit_plus_working_copy_changes(self):
- write_into_file_at_path('test_file_commit1', 'more test content')
- run_command(['git', 'add', 'test_file_commit1'])
- self.scm.commit_locally_with_message("another test commit")
-
- write_into_file_at_path('test_file_commit2', 'still more test content')
- run_command(['git', 'add', 'test_file_commit2'])
-
def test_commit_with_message_working_copy_only(self):
write_into_file_at_path('test_file_commit1', 'more test content')
run_command(['git', 'add', 'test_file_commit1'])
@@ -895,21 +889,18 @@ class GitSVNTest(SCMTest):
svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
self.assertTrue(re.search(r'test_file_commit1', svn_log))
- def test_commit_with_message_squashed(self):
- self._one_local_commit_plus_working_copy_changes()
- scm = detect_scm_system(self.git_checkout_path)
- commit_text = scm.commit_with_message("yet another test commit", squash=True)
-
- self.assertEqual(scm.svn_revision_from_commit_text(commit_text), '6')
- svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
- self.assertTrue(re.search(r'test_file_commit2', svn_log))
- self.assertTrue(re.search(r'test_file_commit1', svn_log))
-
- def _two_local_commits(self):
+ def _one_local_commit(self):
write_into_file_at_path('test_file_commit1', 'more test content')
run_command(['git', 'add', 'test_file_commit1'])
self.scm.commit_locally_with_message("another test commit")
+ def _one_local_commit_plus_working_copy_changes(self):
+ self._one_local_commit()
+ write_into_file_at_path('test_file_commit2', 'still more test content')
+ run_command(['git', 'add', 'test_file_commit2'])
+
+ def _two_local_commits(self):
+ self._one_local_commit()
write_into_file_at_path('test_file_commit2', 'still more test content')
run_command(['git', 'add', 'test_file_commit2'])
self.scm.commit_locally_with_message("yet another test commit")
@@ -920,6 +911,17 @@ class GitSVNTest(SCMTest):
self.scm.commit_locally_with_message("another test commit")
self._two_local_commits()
+ def test_commit_with_message(self):
+ self._one_local_commit_plus_working_copy_changes()
+ scm = detect_scm_system(self.git_checkout_path)
+ self.assertRaises(AmbiguousCommitError, scm.commit_with_message, "yet another test commit")
+ commit_text = scm.commit_with_message("yet another test commit", force_squash=True)
+
+ self.assertEqual(scm.svn_revision_from_commit_text(commit_text), '6')
+ svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
+ self.assertTrue(re.search(r'test_file_commit2', svn_log))
+ self.assertTrue(re.search(r'test_file_commit1', svn_log))
+
def test_commit_with_message_git_commit(self):
self._two_local_commits()
@@ -943,51 +945,68 @@ class GitSVNTest(SCMTest):
self.assertTrue(re.search(r'test_file_commit1', svn_log))
self.assertTrue(re.search(r'test_file_commit2', svn_log))
- def test_commit_with_message_multiple_local_commits(self):
- self._two_local_commits()
+ def test_changed_files_working_copy_only(self):
+ self._one_local_commit_plus_working_copy_changes()
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.commit_with_message, ["another test commit"])
+ commit_text = scm.commit_with_message("another test commit", git_commit="HEAD..")
+ self.assertFalse(re.search(r'test_file_commit1', svn_log))
+ self.assertTrue(re.search(r'test_file_commit2', svn_log))
+
+ def test_commit_with_message_only_local_commit(self):
+ self._one_local_commit()
+ scm = detect_scm_system(self.git_checkout_path)
+ commit_text = scm.commit_with_message("another test commit")
+ svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
+ self.assertTrue(re.search(r'test_file_commit1', svn_log))
def test_commit_with_message_multiple_local_commits_and_working_copy(self):
self._two_local_commits()
write_into_file_at_path('test_file_commit1', 'working copy change')
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.commit_with_message, ["another test commit"])
+
+ self.assertRaises(AmbiguousCommitError, scm.commit_with_message, "another test commit")
+ commit_text = scm.commit_with_message("another test commit", force_squash=True)
+
+ self.assertEqual(scm.svn_revision_from_commit_text(commit_text), '6')
+ svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
+ self.assertTrue(re.search(r'test_file_commit2', svn_log))
+ self.assertTrue(re.search(r'test_file_commit1', svn_log))
def test_commit_with_message_git_commit_and_working_copy(self):
self._two_local_commits()
write_into_file_at_path('test_file_commit1', 'working copy change')
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.commit_with_message, ["another test commit", 'git_commit="HEAD^"'])
+ self.assertRaises(ScriptError, scm.commit_with_message, "another test commit", git_commit="HEAD^")
- def test_commit_with_message_multiple_local_commits_no_squash(self):
+ def test_commit_with_message_multiple_local_commits_always_squash(self):
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- commit_text = scm.commit_with_message("yet another test commit", squash=False)
+ scm._assert_can_squash = lambda working_directory_is_clean: True
+ commit_text = scm.commit_with_message("yet another test commit")
self.assertEqual(scm.svn_revision_from_commit_text(commit_text), '6')
svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
self.assertTrue(re.search(r'test_file_commit2', svn_log))
- self.assertFalse(re.search(r'test_file_commit1', svn_log))
-
- svn_log = run_command(['git', 'svn', 'log', '--limit=2', '--verbose'])
self.assertTrue(re.search(r'test_file_commit1', svn_log))
- def test_commit_with_message_multiple_local_commits_squash(self):
+ def test_commit_with_message_multiple_local_commits(self):
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- commit_text = scm.commit_with_message("yet another test commit", squash=True)
+ self.assertRaises(AmbiguousCommitError, scm.commit_with_message, "yet another test commit")
+ commit_text = scm.commit_with_message("yet another test commit", force_squash=True)
+
self.assertEqual(scm.svn_revision_from_commit_text(commit_text), '6')
svn_log = run_command(['git', 'svn', 'log', '--limit=1', '--verbose'])
self.assertTrue(re.search(r'test_file_commit2', svn_log))
self.assertTrue(re.search(r'test_file_commit1', svn_log))
- def test_commit_with_message_not_synced_squash(self):
+ def test_commit_with_message_not_synced(self):
run_command(['git', 'checkout', '-b', 'my-branch', 'trunk~3'])
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.commit_with_message, "another test commit", squash=True)
+ self.assertRaises(AmbiguousCommitError, scm.commit_with_message, "another test commit")
+ self.assertRaises(ScriptError, scm.commit_with_message, "another test commit", force_squash=True)
def test_remote_branch_ref(self):
self.assertEqual(self.scm.remote_branch_ref(), 'refs/remotes/trunk')
@@ -1004,26 +1023,16 @@ class GitSVNTest(SCMTest):
def test_create_patch_local_plus_working_copy(self):
self._one_local_commit_plus_working_copy_changes()
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.create_patch)
-
- def test_create_patch_multiple_local_commits(self):
- self._two_local_commits()
- scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.create_patch)
-
- def test_create_patch_squashed(self):
- self._one_local_commit_plus_working_copy_changes()
- scm = detect_scm_system(self.git_checkout_path)
- patch = scm.create_patch(squash=True)
- self.assertTrue(re.search(r'test_file_commit2', patch))
+ patch = scm.create_patch()
self.assertTrue(re.search(r'test_file_commit1', patch))
+ self.assertTrue(re.search(r'test_file_commit2', patch))
- def test_create_patch_not_squashed(self):
+ def test_create_patch(self):
self._one_local_commit_plus_working_copy_changes()
scm = detect_scm_system(self.git_checkout_path)
- patch = scm.create_patch(squash=False)
+ patch = scm.create_patch()
self.assertTrue(re.search(r'test_file_commit2', patch))
- self.assertFalse(re.search(r'test_file_commit1', patch))
+ self.assertTrue(re.search(r'test_file_commit1', patch))
def test_create_patch_git_commit(self):
self._two_local_commits()
@@ -1040,26 +1049,25 @@ class GitSVNTest(SCMTest):
self.assertTrue(re.search(r'test_file_commit2', patch))
self.assertTrue(re.search(r'test_file_commit1', patch))
- def test_create_patch_multiple_local_commits_no_squash(self):
- self._two_local_commits()
+ def test_create_patch_working_copy_only(self):
+ self._one_local_commit_plus_working_copy_changes()
scm = detect_scm_system(self.git_checkout_path)
- patch = scm.create_patch(squash=False)
- # FIXME: It's weird that with squash=False, create_patch/changed_files ignores local commits,
- # but commit_with_message commits them.
- self.assertTrue(patch == "")
+ patch = scm.create_patch(git_commit="HEAD..")
+ self.assertFalse(re.search(r'test_file_commit1', patch))
+ self.assertTrue(re.search(r'test_file_commit2', patch))
- def test_create_patch_multiple_local_commits_squash(self):
+ def test_create_patch_multiple_local_commits(self):
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- patch = scm.create_patch(squash=True)
+ patch = scm.create_patch()
self.assertTrue(re.search(r'test_file_commit2', patch))
self.assertTrue(re.search(r'test_file_commit1', patch))
- def test_create_patch_not_synced_squash(self):
+ def test_create_patch_not_synced(self):
run_command(['git', 'checkout', '-b', 'my-branch', 'trunk~3'])
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.create_patch, squash=True)
+ self.assertRaises(ScriptError, scm.create_patch)
def test_create_binary_patch(self):
# Create a git binary patch and check the contents.
@@ -1090,26 +1098,9 @@ class GitSVNTest(SCMTest):
def test_changed_files_local_plus_working_copy(self):
self._one_local_commit_plus_working_copy_changes()
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.changed_files)
-
- def test_changed_files_multiple_local_commits(self):
- self._two_local_commits()
- scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.changed_files)
-
- def test_changed_files_squashed(self):
- self._one_local_commit_plus_working_copy_changes()
- scm = detect_scm_system(self.git_checkout_path)
- files = scm.changed_files(squash=True)
- self.assertTrue('test_file_commit2' in files)
+ files = scm.changed_files()
self.assertTrue('test_file_commit1' in files)
-
- def test_changed_files_not_squashed(self):
- self._one_local_commit_plus_working_copy_changes()
- scm = detect_scm_system(self.git_checkout_path)
- files = scm.changed_files(squash=False)
self.assertTrue('test_file_commit2' in files)
- self.assertFalse('test_file_commit1' in files)
def test_changed_files_git_commit(self):
self._two_local_commits()
@@ -1126,26 +1117,25 @@ class GitSVNTest(SCMTest):
self.assertTrue('test_file_commit1' in files)
self.assertTrue('test_file_commit2' in files)
- def test_changed_files_multiple_local_commits_no_squash(self):
- self._two_local_commits()
+ def test_changed_files_working_copy_only(self):
+ self._one_local_commit_plus_working_copy_changes()
scm = detect_scm_system(self.git_checkout_path)
- files = scm.changed_files(squash=False)
- # FIXME: It's weird that with squash=False, create_patch/changed_files ignores local commits,
- # but commit_with_message commits them.
- self.assertTrue(len(files) == 0)
+ files = scm.changed_files(git_commit="HEAD..")
+ self.assertFalse('test_file_commit1' in files)
+ self.assertTrue('test_file_commit2' in files)
- def test_changed_files_multiple_local_commits_squash(self):
+ def test_changed_files_multiple_local_commits(self):
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- files = scm.changed_files(squash=True)
+ files = scm.changed_files()
self.assertTrue('test_file_commit2' in files)
self.assertTrue('test_file_commit1' in files)
- def test_changed_files_not_synced_squash(self):
+ def test_changed_files_not_synced(self):
run_command(['git', 'checkout', '-b', 'my-branch', 'trunk~3'])
self._two_local_commits()
scm = detect_scm_system(self.git_checkout_path)
- self.assertRaises(ScriptError, scm.changed_files, squash=True)
+ self.assertRaises(ScriptError, scm.changed_files)
def test_changed_files(self):
self._shared_test_changed_files()
diff --git a/WebKitTools/Scripts/webkitpy/common/config/committers.py b/WebKitTools/Scripts/webkitpy/common/config/committers.py
index 7b69815..e5f0a50 100644
--- a/WebKitTools/Scripts/webkitpy/common/config/committers.py
+++ b/WebKitTools/Scripts/webkitpy/common/config/committers.py
@@ -64,6 +64,7 @@ class Reviewer(Committer):
committers_unable_to_review = [
Committer("Aaron Boodman", "aa@chromium.org", "aboodman"),
+ Committer("Abhishek Arya", "inferno@chromium.org", "inferno-sec"),
Committer("Adam Langley", "agl@chromium.org", "agl"),
Committer("Albert J. Wong", "ajwong@chromium.org"),
Committer("Alejandro G. Castro", ["alex@igalia.com", "alex@webkit.org"]),
@@ -76,7 +77,6 @@ committers_unable_to_review = [
Committer("Andy Estes", "aestes@apple.com", "estes"),
Committer("Anthony Ricaud", "rik@webkit.org", "rik"),
Committer("Anton Muhin", "antonm@chromium.org", "antonm"),
- Committer("Antonio Gomes", "tonikitoo@webkit.org", "tonikitoo"),
Committer("Ben Murdoch", "benm@google.com", "benm"),
Committer("Benjamin C Meyer", ["ben@meyerhome.net", "ben@webkit.org"], "icefox"),
Committer("Benjamin Otte", ["otte@gnome.org", "otte@webkit.org"], "otte"),
@@ -115,6 +115,7 @@ committers_unable_to_review = [
Committer("Jakub Wieczorek", "jwieczorek@webkit.org", "fawek"),
Committer("James Hawkins", ["jhawkins@chromium.org", "jhawkins@google.com"], "jhawkins"),
Committer("James Robinson", ["jamesr@chromium.org", "jamesr@google.com"], "jamesr"),
+ Committer("Jay Civelli", "jcivelli@chromium.org", "jcivelli"),
Committer("Jens Alfke", ["snej@chromium.org", "jens@apple.com"]),
Committer("Jer Noble", "jer.noble@apple.com", "jernoble"),
Committer("Jeremy Moskovich", ["playmobil@google.com", "jeremy@chromium.org"], "jeremymos"),
@@ -149,6 +150,7 @@ committers_unable_to_review = [
Committer("Mike Thole", ["mthole@mikethole.com", "mthole@apple.com"]),
Committer("Mikhail Naganov", "mnaganov@chromium.org"),
Committer("MORITA Hajime", "morrita@google.com", "morrita"),
+ Committer("Nico Weber", ["thakis@chromium.org", "thakis@google.com"], "thakis"),
Committer("Pam Greene", "pam@chromium.org", "pamg"),
Committer("Peter Kasting", ["pkasting@google.com", "pkasting@chromium.org"], "pkasting"),
Committer("Philippe Normand", ["pnormand@igalia.com", "philn@webkit.org"], "philn-tp"),
@@ -193,6 +195,7 @@ reviewers_list = [
Reviewer("Alice Liu", "alice.liu@apple.com", "aliu"),
Reviewer("Alp Toker", ["alp@nuanti.com", "alp@atoker.com", "alp@webkit.org"], "alp"),
Reviewer("Anders Carlsson", ["andersca@apple.com", "acarlsson@apple.com"], "andersca"),
+ Reviewer("Antonio Gomes", "tonikitoo@webkit.org", "tonikitoo"),
Reviewer("Antti Koivisto", ["koivisto@iki.fi", "antti@apple.com"], "anttik"),
Reviewer("Ariya Hidayat", ["ariya.hidayat@gmail.com", "ariya@webkit.org"], "ariya"),
Reviewer("Beth Dakin", "bdakin@apple.com", "dethbakin"),
@@ -254,7 +257,7 @@ reviewers_list = [
Reviewer("Steve Falkenburg", "sfalken@apple.com", "sfalken"),
Reviewer("Tim Omernick", "timo@apple.com"),
Reviewer("Timothy Hatcher", ["timothy@hatcher.name", "timothy@apple.com"], "xenon"),
- Reviewer(u"Tor Arne Vestb\u00f8", "vestbo@webkit.org", "torarne"),
+ Reviewer(u"Tor Arne Vestb\u00f8", ["vestbo@webkit.org", "tor.arne.vestbo@nokia.com"], "torarne"),
Reviewer("Vicki Murley", "vicki@apple.com"),
Reviewer("Xan Lopez", ["xan.lopez@gmail.com", "xan@gnome.org", "xan@webkit.org"], "xan"),
Reviewer("Yury Semikhatsky", "yurys@chromium.org", "yurys"),
diff --git a/WebKitTools/Scripts/webkitpy/common/net/rietveld.py b/WebKitTools/Scripts/webkitpy/common/net/rietveld.py
index eccda3a..0c6a313 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/rietveld.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/rietveld.py
@@ -73,6 +73,6 @@ class Rietveld(object):
# Use RealMain instead of calling upload from the commandline so that
# we can pass in the diff ourselves. Otherwise, upload will just use
- # git diff for git checkouts, which doesn't respect --squash and --git-commit.
+ # git diff for git checkouts, which doesn't respect --git-commit.
issue, patchset = upload.RealMain(args, data=diff)
return issue
diff --git a/WebKitTools/Scripts/webkitpy/common/system/executive.py b/WebKitTools/Scripts/webkitpy/common/system/executive.py
index 9c5889b..6088680 100644
--- a/WebKitTools/Scripts/webkitpy/common/system/executive.py
+++ b/WebKitTools/Scripts/webkitpy/common/system/executive.py
@@ -183,7 +183,7 @@ class Executive(object):
# According to http://docs.python.org/library/os.html
# os.kill isn't available on Windows. python 2.5.5 os.kill appears
# to work in cygwin, however it occasionally raises EAGAIN.
- retries_left = 3 if sys.platform == "cygwin" else 1
+ retries_left = 10 if sys.platform == "cygwin" else 1
while retries_left > 0:
try:
retries_left -= 1
diff --git a/WebKitTools/Scripts/webkitpy/common/system/user.py b/WebKitTools/Scripts/webkitpy/common/system/user.py
index b4df3cb..9444c00 100644
--- a/WebKitTools/Scripts/webkitpy/common/system/user.py
+++ b/WebKitTools/Scripts/webkitpy/common/system/user.py
@@ -51,7 +51,7 @@ except ImportError:
class User(object):
- # FIXME: These are @classmethods because scm.py and bugzilla.py don't have a Tool object (thus no User instance).
+ # FIXME: These are @classmethods because bugzilla.py doesn't have a Tool object (thus no User instance).
@classmethod
def prompt(cls, message, repeat=1, raw_input=raw_input):
response = None
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
index a2e2091..6364511 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
@@ -429,7 +429,8 @@ class TestShellThread(threading.Thread):
# previous run will be copied into the baseline.)
image_hash = test_info.image_hash()
if (image_hash and
- (self._test_args.new_baseline or self._test_args.reset_results)):
+ (self._test_args.new_baseline or self._test_args.reset_results or
+ not self._options.pixel_tests)):
image_hash = ""
start = time.time()
crash, timeout, actual_checksum, output, error = \
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
index bb214f7..c0525ea 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (C) 2010 Google Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -35,7 +34,8 @@ from webkitpy.layout_tests.layout_package import test_expectations
from webkitpy.layout_tests.layout_package import test_failures
import webkitpy.thirdparty.simplejson as simplejson
-class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGenerator):
+
+class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGeneratorBase):
"""A JSON results generator for layout tests."""
LAYOUT_TESTS_PATH = "LayoutTests"
@@ -44,6 +44,16 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGenerator):
WONTFIX = "wontfixCounts"
DEFERRED = "deferredCounts"
+ # Note that we omit test_expectations.FAIL from this list because
+ # it should never show up (it's a legacy input expectation, never
+ # an output expectation).
+ FAILURE_TO_CHAR = {test_expectations.CRASH: "C",
+ test_expectations.TIMEOUT: "T",
+ test_expectations.IMAGE: "I",
+ test_expectations.TEXT: "F",
+ test_expectations.MISSING: "O",
+ test_expectations.IMAGE_PLUS_TEXT: "Z"}
+
def __init__(self, port, builder_name, build_name, build_number,
results_file_base_path, builder_base_url,
test_timings, expectations, result_summary, all_tests):
@@ -53,20 +63,14 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGenerator):
Args:
result_summary: ResultsSummary object storing the summary of the test
results.
- (see the comment of JSONResultsGenerator.__init__ for other Args)
"""
+ super(JSONLayoutResultsGenerator, self).__init__(
+ builder_name, build_name, build_number, results_file_base_path,
+ builder_base_url, {}, port.test_repository_paths())
+
self._port = port
- self._builder_name = builder_name
- self._build_name = build_name
- self._build_number = build_number
- self._builder_base_url = builder_base_url
- self._results_file_path = os.path.join(results_file_base_path,
- self.RESULTS_FILENAME)
self._expectations = expectations
- # We don't use self._skipped_tests and self._passed_tests as we
- # override _InsertFailureSummaries.
-
# We want relative paths to LayoutTest root for JSON output.
path_to_name = self._get_path_relative_to_layout_test_root
self._result_summary = result_summary
@@ -77,9 +81,8 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGenerator):
self._test_timings = dict(
(path_to_name(test_tuple.filename), test_tuple.test_run_time)
for test_tuple in test_timings)
- self._svn_repositories = port.test_repository_paths()
- self._generate_json_output()
+ self.generate_json_output()
def _get_path_relative_to_layout_test_root(self, test):
"""Returns the path of the test relative to the layout test root.
@@ -102,6 +105,27 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGenerator):
return relativePath.replace('\\', '/')
# override
+ def _get_test_timing(self, test_name):
+ if test_name in self._test_timings:
+ # Floor for now to get time in seconds.
+ return int(self._test_timings[test_name])
+ return 0
+
+ # override
+ def _get_failed_test_names(self):
+ return set(self._failures.keys())
+
+ # override
+ def _get_result_type_char(self, test_name):
+ if test_name not in self._all_tests:
+ return self.NO_DATA_RESULT
+
+ if test_name in self._failures:
+ return self.FAILURE_TO_CHAR[self._failures[test_name]]
+
+ return self.PASS_RESULT
+
+ # override
def _convert_json_to_current_version(self, results_json):
archive_version = None
if self.VERSION_KEY in results_json:
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
index 1cf1b95..595fc2b 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# Copyright (C) 2010 Google Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -38,16 +37,27 @@ import time
import urllib2
import xml.dom.minidom
-from webkitpy.common.checkout import scm
-from webkitpy.common.system.executive import ScriptError
-from webkitpy.layout_tests.layout_package import test_expectations
import webkitpy.thirdparty.simplejson as simplejson
-_log = logging.getLogger("webkitpy.layout_tests.layout_package."
- "json_results_generator")
+# A JSON results generator for generic tests.
+# FIXME: move this code out of the layout_package directory.
+_log = logging.getLogger("webkitpy.layout_tests.layout_package.json_results_generator")
-class JSONResultsGenerator(object):
+
+class TestResult(object):
+ """A simple class that represents a single test result."""
+ def __init__(self, name, failed=False, skipped=False, elapsed_time=0):
+ self.name = name
+ self.failed = failed
+ self.skipped = skipped
+ self.time = elapsed_time
+
+ def fixable(self):
+ return self.failed or self.skipped
+
+
+class JSONResultsGeneratorBase(object):
"""A JSON results generator for generic tests."""
MAX_NUMBER_OF_BUILD_RESULTS_TO_LOG = 750
@@ -57,6 +67,7 @@ class JSONResultsGenerator(object):
JSON_SUFFIX = ");"
PASS_RESULT = "P"
SKIP_RESULT = "X"
+ FAIL_RESULT = "F"
NO_DATA_RESULT = "N"
VERSION = 3
VERSION_KEY = "version"
@@ -70,22 +81,11 @@ class JSONResultsGenerator(object):
FIXABLE = "fixableCounts"
ALL_FIXABLE_COUNT = "allFixableCount"
- # Note that we omit test_expectations.FAIL from this list because
- # it should never show up (it's a legacy input expectation, never
- # an output expectation).
- FAILURE_TO_CHAR = {test_expectations.CRASH: "C",
- test_expectations.TIMEOUT: "T",
- test_expectations.IMAGE: "I",
- test_expectations.TEXT: "F",
- test_expectations.MISSING: "O",
- test_expectations.IMAGE_PLUS_TEXT: "Z"}
- FAILURE_CHARS = FAILURE_TO_CHAR.values()
-
RESULTS_FILENAME = "results.json"
- def __init__(self, port, builder_name, build_name, build_number,
+ def __init__(self, builder_name, build_name, build_number,
results_file_base_path, builder_base_url,
- test_timings, failures, passed_tests, skipped_tests, all_tests):
+ test_results_map, svn_repositories=None):
"""Modifies the results.json file. Grabs it off the archive directory
if it is not found locally.
@@ -96,12 +96,11 @@ class JSONResultsGenerator(object):
results_file_base_path: Absolute path to the directory containing the
results json file.
builder_base_url: the URL where we have the archived test results.
- test_timings: Map of test name to a test_run-time.
- failures: Map of test name to a failure type (of test_expectations).
- passed_tests: A set containing all the passed tests.
- skipped_tests: A set containing all the skipped tests.
- all_tests: List of all the tests that were run. This should not
- include skipped tests.
+ If this is None no archived results will be retrieved.
+ test_results_map: A dictionary that maps test_name to TestResult.
+ 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.
"""
self._builder_name = builder_name
self._build_name = build_name
@@ -109,31 +108,106 @@ class JSONResultsGenerator(object):
self._builder_base_url = builder_base_url
self._results_file_path = os.path.join(results_file_base_path,
self.RESULTS_FILENAME)
- self._test_timings = test_timings
- self._failures = failures
- self._passed_tests = passed_tests
- self._skipped_tests = skipped_tests
- self._all_tests = all_tests
- self._svn_repositories = port.test_repository_paths()
- self._generate_json_output()
+ self._test_results_map = test_results_map
+ self._test_results = test_results_map.values()
+
+ self._svn_repositories = svn_repositories
+ if not self._svn_repositories:
+ self._svn_repositories = {}
+
+ self._json = None
- def _generate_json_output(self):
+ def generate_json_output(self):
"""Generates the JSON output file."""
- json = self._get_json()
- if json:
+ if not self._json:
+ self._json = self.get_json()
+ if self._json:
+ # Specify separators in order to get compact encoding.
+ json_data = simplejson.dumps(self._json, separators=(',', ':'))
+ json_string = self.JSON_PREFIX + json_data + self.JSON_SUFFIX
+
results_file = codecs.open(self._results_file_path, "w", "utf-8")
- results_file.write(json)
+ results_file.write(json_string)
results_file.close()
+ def get_json(self):
+ """Gets the results for the results.json file."""
+ if self._json:
+ return self._json
+
+ 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 bot.
+ _log.error("Archive directory is inaccessible. Not modifying "
+ "or clobbering the results.json file: " + str(error))
+ return None
+
+ builder_name = self._builder_name
+ if results_json and builder_name not in results_json:
+ _log.debug("Builder name (%s) is not in the results.json file."
+ % builder_name)
+
+ self._convert_json_to_current_version(results_json)
+
+ if builder_name not in results_json:
+ results_json[builder_name] = (
+ self._create_results_for_builder_json())
+
+ results_for_builder = results_json[builder_name]
+
+ self._insert_generic_metadata(results_for_builder)
+
+ self._insert_failure_summaries(results_for_builder)
+
+ # Update the all failing tests with result type and time.
+ tests = results_for_builder[self.TESTS]
+ 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)
+
+ self._json = results_json
+ return self._json
+
+ def _get_test_timing(self, test_name):
+ """Returns test timing data (elapsed time) in second
+ for the given test_name."""
+ if test_name in self._test_results_map:
+ # Floor for now to get time in seconds.
+ return int(self._test_results_map[test_name].time)
+ return 0
+
+ def _get_failed_test_names(self):
+ """Returns a set of failed test names."""
+ return set([r.name for r in self._test_results if r.failed])
+
+ def _get_result_type_char(self, test_name):
+ """Returns a single char (e.g. SKIP_RESULT, FAIL_RESULT,
+ PASS_RESULT, NO_DATA_RESULT, etc) that indicates the test result
+ for the given test_name.
+ """
+ if test_name not in self._test_results_map:
+ return JSONResultsGenerator.NO_DATA_RESULT
+
+ test_result = self._test_results_map[test_name]
+ if test_result.skipped:
+ return JSONResultsGenerator.SKIP_RESULT
+ if test_result.failed:
+ return JSONResultsGenerator.FAIL_RESULT
+
+ return JSONResultsGenerator.PASS_RESULT
+
# FIXME: Callers should use scm.py instead.
+ # FIXME: Identify and fix the run-time errors that were observed on Windows
+ # chromium buildbot when we had updated this code to use scm.py once before.
def _get_svn_revision(self, in_directory):
"""Returns the svn revision for the given directory.
Args:
in_directory: The directory where svn is to be run.
"""
-
if os.path.exists(os.path.join(in_directory, '.svn')):
# Note: Not thread safe: http://bugs.python.org/issue2320
output = subprocess.Popen(["svn", "info", "--xml"],
@@ -196,76 +270,34 @@ class JSONResultsGenerator(object):
return results_json, error
- def _get_json(self):
- """Gets the results for the results.json file."""
- 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 bot.
- _log.error("Archive directory is inaccessible. Not modifying "
- "or clobbering the results.json file: " + str(error))
- return None
-
- builder_name = self._builder_name
- if results_json and builder_name not in results_json:
- _log.debug("Builder name (%s) is not in the results.json file."
- % builder_name)
-
- self._convert_json_to_current_version(results_json)
-
- if builder_name not in results_json:
- results_json[builder_name] = (
- self._create_results_for_builder_json())
-
- results_for_builder = results_json[builder_name]
-
- self._insert_generic_metadata(results_for_builder)
-
- self._insert_failure_summaries(results_for_builder)
-
- # Update the all failing tests with result type and time.
- tests = results_for_builder[self.TESTS]
- all_failing_tests = set(self._failures.iterkeys())
- all_failing_tests.update(tests.iterkeys())
- for test in all_failing_tests:
- self._insert_test_time_and_result(test, tests)
-
- # Specify separators in order to get compact encoding.
- results_str = simplejson.dumps(results_json, separators=(',', ':'))
- return self.JSON_PREFIX + results_str + self.JSON_SUFFIX
-
def _insert_failure_summaries(self, results_for_builder):
"""Inserts aggregate pass/failure statistics into the JSON.
- This method reads self._skipped_tests, self._passed_tests and
- self._failures and inserts FIXABLE, FIXABLE_COUNT and ALL_FIXABLE_COUNT
- entries.
+ This method reads self._test_results and generates
+ FIXABLE, FIXABLE_COUNT and ALL_FIXABLE_COUNT entries.
Args:
results_for_builder: Dictionary containing the test results for a
single builder.
"""
- # Insert the number of tests that failed.
+ # Insert the number of tests that failed or skipped.
+ fixable_count = len([r for r in self._test_results if r.fixable()])
self._insert_item_into_raw_list(results_for_builder,
- len(set(self._failures.keys()) | self._skipped_tests),
- self.FIXABLE_COUNT)
+ fixable_count, self.FIXABLE_COUNT)
# Create a pass/skip/failure summary dictionary.
entry = {}
- entry[self.SKIP_RESULT] = len(self._skipped_tests)
- entry[self.PASS_RESULT] = len(self._passed_tests)
- get = entry.get
- for failure_type in self._failures.values():
- failure_char = self.FAILURE_TO_CHAR[failure_type]
- entry[failure_char] = get(failure_char, 0) + 1
+ for test_name in self._test_results_map.iterkeys():
+ result_char = self._get_result_type_char(test_name)
+ entry[result_char] = entry.get(result_char, 0) + 1
# Insert the pass/skip/failure summary dictionary.
self._insert_item_into_raw_list(results_for_builder, entry,
self.FIXABLE)
# Insert the number of all the tests that are supposed to pass.
+ all_test_count = len(self._test_results)
self._insert_item_into_raw_list(results_for_builder,
- len(self._skipped_tests | self._all_tests),
- self.ALL_FIXABLE_COUNT)
+ all_test_count, self.ALL_FIXABLE_COUNT)
def _insert_item_into_raw_list(self, results_for_builder, item, key):
"""Inserts the item into the list with the given key in the results for
@@ -331,18 +363,8 @@ class JSONResultsGenerator(object):
tests: Dictionary containing test result entries.
"""
- result = JSONResultsGenerator.PASS_RESULT
- time = 0
-
- if test_name not in self._all_tests:
- result = JSONResultsGenerator.NO_DATA_RESULT
-
- if test_name in self._failures:
- result = self.FAILURE_TO_CHAR[self._failures[test_name]]
-
- if test_name in self._test_timings:
- # Floor for now to get time in seconds.
- time = int(self._test_timings[test_name])
+ result = self._get_result_type_char(test_name)
+ time = self._get_test_timing(test_name)
if test_name not in tests:
tests[test_name] = self._create_results_and_times_json()
@@ -420,3 +442,59 @@ class JSONResultsGenerator(object):
"""Returns whether all the results are of the given type
(e.g. all passes)."""
return len(results) == 1 and results[0][1] == type
+
+
+# A wrapper class for JSONResultsGeneratorBase.
+# Note: There's a script outside the WebKit codebase calling this script.
+# FIXME: Please keep the interface until the other script is cleaned up.
+# (http://src.chromium.org/viewvc/chrome/trunk/src/webkit/tools/layout_tests/webkitpy/layout_tests/test_output_xml_to_json.py?view=markup)
+class JSONResultsGenerator(JSONResultsGeneratorBase):
+ # The flag is for backward compatibility.
+ output_json_in_init = True
+
+ def __init__(self, port, builder_name, build_name, build_number,
+ results_file_base_path, builder_base_url,
+ test_timings, failures, passed_tests, skipped_tests, all_tests):
+ """Generates a JSON results file.
+
+ Args
+ builder_name: the builder name (e.g. Webkit).
+ build_name: the build name (e.g. webkit-rel).
+ build_number: the build number.
+ results_file_base_path: Absolute path to the directory containing the
+ results json file.
+ builder_base_url: the URL where we have the archived test results.
+ test_timings: Map of test name to a test_run-time.
+ failures: Map of test name to a failure type (of test_expectations).
+ passed_tests: A set containing all the passed tests.
+ skipped_tests: A set containing all the skipped tests.
+ all_tests: List of all the tests that were run. This should not
+ include skipped tests.
+ """
+
+ # Create a map of (name, TestResult).
+ test_results_map = dict()
+ get = test_results_map.get
+ for (test, time) in test_timings.iteritems():
+ test_results_map[test] = TestResult(test, elapsed_time=time)
+ for test in failures.iterkeys():
+ test_results_map[test] = test_result = get(test, TestResult(test))
+ test_result.failed = True
+ for test in skipped_tests:
+ test_results_map[test] = test_result = get(test, TestResult(test))
+ test_result.skipped = True
+ for test in passed_tests:
+ test_results_map[test] = test_result = get(test, TestResult(test))
+ test_result.failed = False
+ test_result.skipped = False
+ for test in all_tests:
+ if test not in test_results_map:
+ test_results_map[test] = TestResult(test)
+
+ super(JSONResultsGenerator, self).__init__(
+ builder_name, build_name, build_number,
+ results_file_base_path, builder_base_url, test_results_map,
+ svn_repositories=port.test_repository_paths())
+
+ if self.__class__.output_json_in_init:
+ self.generate_json_output()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
new file mode 100644
index 0000000..0a60cc7
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py
@@ -0,0 +1,126 @@
+# 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.
+
+"""Unit tests for json_results_generator.py."""
+
+import unittest
+import optparse
+import random
+import shutil
+import tempfile
+
+from webkitpy.layout_tests.layout_package import json_results_generator
+from webkitpy.layout_tests.layout_package import test_expectations
+from webkitpy.layout_tests import port
+
+
+class JSONGeneratorTest(unittest.TestCase):
+ def setUp(self):
+ json_results_generator.JSONResultsGenerator.output_json_in_init = False
+ self.builder_name = 'DUMMY_BUILDER_NAME'
+ self.build_name = 'DUMMY_BUILD_NAME'
+ self.build_number = 'DUMMY_BUILDER_NUMBER'
+
+ def _test_json_generation(self, passed_tests, failed_tests, skipped_tests):
+ # Make sure we have sets (rather than lists).
+ passed_tests = set(passed_tests)
+ skipped_tests = set(skipped_tests)
+ tests_list = passed_tests | set(failed_tests.keys())
+ test_timings = {}
+ for test in tests_list:
+ test_timings[test] = float(random.randint(1, 10))
+
+ port_obj = port.get(None)
+
+ # Generate a JSON file.
+ generator = json_results_generator.JSONResultsGenerator(port_obj,
+ self.builder_name, self.build_name, self.build_number,
+ '',
+ None, # don't fetch past json results archive
+ test_timings,
+ failed_tests,
+ passed_tests,
+ skipped_tests,
+ tests_list)
+
+ json = generator.get_json()
+
+ # Aliasing to a short name for better access to its constants.
+ JRG = json_results_generator.JSONResultsGenerator
+
+ self.assertTrue(JRG.VERSION_KEY in json)
+ self.assertTrue(self.builder_name in json)
+
+ buildinfo = json[self.builder_name]
+ self.assertTrue(JRG.FIXABLE in buildinfo)
+ self.assertTrue(JRG.TESTS in buildinfo)
+ self.assertTrue(len(buildinfo[JRG.BUILD_NUMBERS]) == 1)
+ self.assertTrue(buildinfo[JRG.BUILD_NUMBERS][0] == self.build_number)
+
+ if tests_list or skipped_tests:
+ fixable = buildinfo[JRG.FIXABLE][0]
+ if passed_tests:
+ self.assertTrue(fixable[JRG.PASS_RESULT] == len(passed_tests))
+ else:
+ self.assertTrue(JRG.PASS_RESULT not in fixable or
+ fixable[JRG.PASS_RESULT] == 0)
+ if skipped_tests:
+ self.assertTrue(fixable[JRG.SKIP_RESULT] == len(skipped_tests))
+ else:
+ self.assertTrue(JRG.SKIP_RESULT not in fixable or
+ fixable[JRG.SKIP_RESULT] == 0)
+
+ if failed_tests:
+ tests = buildinfo[JRG.TESTS]
+ for test_name, failure in failed_tests.iteritems():
+ self.assertTrue(test_name in tests)
+ test = tests[test_name]
+ self.assertTrue(test[JRG.RESULTS][0][0] == 1)
+ self.assertTrue(test[JRG.RESULTS][0][1] == JRG.FAIL_RESULT)
+ self.assertTrue(test[JRG.TIMES][0][0] == 1)
+ self.assertTrue(test[JRG.TIMES][0][1] ==
+ int(test_timings[test_name]))
+
+ fixable_count = len(skipped_tests) + len(failed_tests.keys())
+ if skipped_tests or failed_tests:
+ self.assertTrue(buildinfo[JRG.FIXABLE_COUNT][0] == fixable_count)
+
+ def test_json_generation(self):
+ reason = test_expectations.TEXT
+
+ self._test_json_generation([], {}, [])
+ self._test_json_generation(['A', 'B'], {}, [])
+ self._test_json_generation([], {'A': reason, 'B': reason}, [])
+ self._test_json_generation([], {}, ['A', 'B'])
+ self._test_json_generation(['A'], {'B': reason, 'C': reason}, [])
+ self._test_json_generation([], {'A': reason, 'B': reason}, ['C', 'D'])
+ self._test_json_generation(['A', 'B', 'C'], {'D': reason}, ['E', 'F'])
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
index e73579f..e1b23ac 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
@@ -128,13 +128,16 @@ class Port(object):
return expected_text != actual_text
def diff_image(self, expected_filename, actual_filename,
- diff_filename=None):
+ diff_filename=None, tolerance=0):
"""Compare two image files and produce a delta image file.
Return True if the two files are different, False if they are the same.
Also produce a delta image of the two images and write that into
|diff_filename| if it is not None.
+ |tolerance| should be a percentage value (0.0 - 100.0).
+ If it is omitted, the port default tolerance value is used.
+
While this is a generic routine, we include it in the Port
interface so that it can be overriden for testing purposes."""
executable = self._path_to_image_diff()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/qt.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/qt.py
index 9032a24..41b2ba0 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/qt.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/qt.py
@@ -32,6 +32,8 @@ import logging
import os
import signal
+import webkit
+
from webkitpy.layout_tests.port.webkit import WebKitPort
_log = logging.getLogger("webkitpy.layout_tests.port.qt")
@@ -90,3 +92,8 @@ class QtPort(WebKitPort):
def _path_to_driver(self):
return self._build_path('bin/DumpRenderTree')
+
+ def setup_environ_for_server(self):
+ env = webkit.WebKitPort.setup_environ_for_server(self)
+ env['QTWEBKIT_PLUGIN_PATH'] = self._build_path('lib/plugins')
+ return env
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py
index e6d4c99..6eef54e 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py
@@ -60,7 +60,7 @@ class TestPort(base.Port):
return False
def diff_image(self, expected_filename, actual_filename,
- diff_filename=None):
+ diff_filename=None, tolerance=0):
return False
def diff_text(self, expected_text, actual_text,
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py
index 2097ce7..e1151a6 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py
@@ -116,10 +116,13 @@ class WebKitPort(base.Port):
return True
def diff_image(self, expected_filename, actual_filename,
- diff_filename=None):
+ diff_filename=None, tolerance=0.1):
"""Return True if the two files are different. Also write a delta
image of the two images into |diff_filename| if it is not None."""
+ # FIXME: either expose the tolerance argument as a command-line
+ # parameter, or make it go away and always use exact matches.
+
# Handle the case where the test didn't actually generate an image.
actual_length = os.stat(actual_filename).st_size
if actual_length == 0:
@@ -127,13 +130,11 @@ class WebKitPort(base.Port):
shutil.copyfile(actual_filename, expected_filename)
return True
- sp = self._diff_image_request(expected_filename, actual_filename)
+ sp = self._diff_image_request(expected_filename, actual_filename, tolerance)
return self._diff_image_reply(sp, expected_filename, diff_filename)
- def _diff_image_request(self, expected_filename, actual_filename):
- # FIXME: either expose the tolerance argument as a command-line
- # parameter, or make it go away and aways use exact matches.
- command = [self._path_to_image_diff(), '--tolerance', '0.1']
+ def _diff_image_request(self, expected_filename, actual_filename, tolerance):
+ command = [self._path_to_image_diff(), '--tolerance', str(tolerance)]
sp = server_process.ServerProcess(self, 'ImageDiff', command)
actual_length = os.stat(actual_filename).st_size
@@ -378,7 +379,7 @@ class WebKitDriver(base.Driver):
command += [self._port._path_to_driver(), '-']
if self._image_path:
command.append('--pixel-tests')
- environment = os.environ
+ environment = self._port.setup_environ_for_server()
environment['DYLD_FRAMEWORK_PATH'] = self._port._build_path()
self._server_process = server_process.ServerProcess(self._port,
"DumpRenderTree", command, environment)
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py
index 35f32d4..fa4df9b 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py
@@ -916,8 +916,14 @@ def main():
option_parser.add_option('-d', '--html_directory',
default='',
- help=('The directory that stores the results for'
- ' rebaselining comparison.'))
+ help=('The directory that stores the results for '
+ 'rebaselining comparison.'))
+
+ option_parser.add_option('', '--use_drt',
+ action='store_true',
+ default=False,
+ help=('Use ImageDiff from DumpRenderTree instead '
+ 'of image_diff for pixel tests.'))
option_parser.add_option('', '--target-platform',
default='chromium',
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index a4a92c7..41aab62 100755
--- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -1619,6 +1619,8 @@ def parse_args(args=None):
help="run all tests in parallel"),
# FIXME: Need --exit-after-n-failures N
# Exit after the first N failures instead of running all tests
+ # FIXME: Need --exit-after-n-crashes N
+ # Exit after the first N crashes instead of running all tests
# FIXME: consider: --iterations n
# Number of times to run the set of tests (e.g. ABCABCABC)
optparse.make_option("--print-last-failures", action="store_true",
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
index fe73a7b..65f8f3a 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
@@ -192,7 +192,7 @@ class ImageDiff(test_type_base.TestTypeBase):
return failures
def diff_files(self, port, file1, file2):
- """Diff two image files.
+ """Diff two image files exactly.
Args:
file1, file2: full paths of the files to compare.
@@ -202,6 +202,6 @@ class ImageDiff(test_type_base.TestTypeBase):
False otherwise.
"""
try:
- return port.diff_image(file1, file2)
+ return port.diff_image(file1, file2, None, 0)
except ValueError, e:
return True
diff --git a/WebKitTools/Scripts/webkitpy/style/optparser.py b/WebKitTools/Scripts/webkitpy/style/optparser.py
index bb4788a..3ba0fae 100644
--- a/WebKitTools/Scripts/webkitpy/style/optparser.py
+++ b/WebKitTools/Scripts/webkitpy/style/optparser.py
@@ -147,8 +147,7 @@ class CommandOptionValues(object):
git_commit=None,
is_verbose=False,
min_confidence=1,
- output_format="emacs",
- squash=False):
+ output_format="emacs"):
if filter_rules is None:
filter_rules = []
@@ -167,7 +166,6 @@ class CommandOptionValues(object):
self.is_verbose = is_verbose
self.min_confidence = min_confidence
self.output_format = output_format
- self.squash = squash
# Useful for unit testing.
def __eq__(self, other):
@@ -182,8 +180,6 @@ class CommandOptionValues(object):
return False
if self.output_format != other.output_format:
return False
- if self.squash != other.squash:
- return False
return True
@@ -218,8 +214,6 @@ class ArgumentPrinter(object):
flags['filter'] = ",".join(filter_rules)
if options.git_commit:
flags['git-commit'] = options.git_commit
- if options.squash:
- flags['squash'] = options.squash
flag_string = ''
# Alphabetizing lets us unit test this method.
@@ -309,7 +303,7 @@ class ArgumentParser(object):
parser.add_option("-f", "--filter-rules", metavar="RULES",
dest="filter_value", help=filter_help)
- git_commit_help = ("check all changes in the given git commit. "
+ git_commit_help = ("check all changes in the given commit. "
"Use 'commit_id..' to check all changes after commmit_id")
parser.add_option("-g", "--git-diff", "--git-commit",
metavar="COMMIT", dest="git_commit", help=git_commit_help,)
@@ -330,14 +324,6 @@ class ArgumentParser(object):
dest="output_format", default=default_output_format,
help=output_format_help)
- squash_help = ("All diffs from the remote branch are checked."
- "If excluded, prompts whether to squash when there are multiple commits.")
- parser.add_option("-s", "--squash", action="store_true", dest="squash", help=squash_help)
-
- squash_help = ("Only working copy diffs are checked."
- "If excluded, prompts whether to squash when there are multiple commits.")
- parser.add_option("--no-squash", action="store_false", dest="squash", help=squash_help)
-
verbose_help = "enable verbose logging."
parser.add_option("-v", "--verbose", dest="is_verbose", default=False,
action="store_true", help=verbose_help)
@@ -458,8 +444,7 @@ class ArgumentParser(object):
git_commit=git_commit,
is_verbose=is_verbose,
min_confidence=min_confidence,
- output_format=output_format,
- squash=options.squash)
+ output_format=output_format)
return (paths, options)
diff --git a/WebKitTools/Scripts/webkitpy/style_references.py b/WebKitTools/Scripts/webkitpy/style_references.py
index bab30ca..a42b69d 100644
--- a/WebKitTools/Scripts/webkitpy/style_references.py
+++ b/WebKitTools/Scripts/webkitpy/style_references.py
@@ -67,6 +67,6 @@ class WebKitCheckout(object):
"""Return the checkout root as an absolute path."""
return self._scm.checkout_root
- def create_patch(self, git_commit, squash):
- return self._scm.create_patch(git_commit, squash)
+ def create_patch(self, git_commit):
+ return self._scm.create_patch(git_commit)
diff --git a/WebKitTools/Scripts/webkitpy/thirdparty/__init__.py b/WebKitTools/Scripts/webkitpy/thirdparty/__init__.py
index e1fa673..3321293 100644
--- a/WebKitTools/Scripts/webkitpy/thirdparty/__init__.py
+++ b/WebKitTools/Scripts/webkitpy/thirdparty/__init__.py
@@ -42,6 +42,9 @@ from webkitpy.common.system.autoinstall import AutoInstaller
# perhaps be done using Python's import hooks as the original
# autoinstall implementation did.
+# FIXME: If any of these servers is offline, webkit-patch breaks (and maybe
+# other scripts do, too). See <http://webkit.org/b/42080>.
+
# We put auto-installed third-party modules in this directory--
#
# webkitpy/thirdparty/autoinstalled
@@ -85,9 +88,9 @@ installer.install(url="http://webkit-rietveld.googlecode.com/svn/trunk/static/up
# organization purposes.
irc_dir = os.path.join(autoinstalled_dir, "irc")
installer = AutoInstaller(target_dir=irc_dir)
-installer.install(url="http://hivelocity.dl.sourceforge.net/project/python-irclib/python-irclib/0.4.8/python-irclib-0.4.8.zip",
+installer.install(url="http://surfnet.dl.sourceforge.net/project/python-irclib/python-irclib/0.4.8/python-irclib-0.4.8.zip",
url_subpath="irclib.py")
-installer.install(url="http://hivelocity.dl.sourceforge.net/project/python-irclib/python-irclib/0.4.8/python-irclib-0.4.8.zip",
+installer.install(url="http://surfnet.dl.sourceforge.net/project/python-irclib/python-irclib/0.4.8/python-irclib-0.4.8.zip",
url_subpath="ircbot.py")
pywebsocket_dir = os.path.join(autoinstalled_dir, "pywebsocket")
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/commandtest.py b/WebKitTools/Scripts/webkitpy/tool/commands/commandtest.py
index 887802c..de92cd3 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/commandtest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/commandtest.py
@@ -29,10 +29,9 @@
import unittest
from webkitpy.common.system.outputcapture import OutputCapture
-from webkitpy.tool.mocktool import MockTool
-from webkitpy.thirdparty.mock import Mock
+from webkitpy.tool.mocktool import MockOptions, MockTool
class CommandsTest(unittest.TestCase):
- def assert_execute_outputs(self, command, args, expected_stdout="", expected_stderr="", options=Mock(), tool=MockTool()):
+ def assert_execute_outputs(self, command, args, expected_stdout="", expected_stderr="", options=MockOptions(), tool=MockTool()):
command.bind_to_tool(tool)
OutputCapture().assert_outputs(self, command.execute, [options, args, tool], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/download.py b/WebKitTools/Scripts/webkitpy/tool/commands/download.py
index 59af16a..d27ab0e 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/download.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/download.py
@@ -93,7 +93,7 @@ If a bug id is provided, or one can be found in the ChangeLog land will update t
def _prepare_state(self, options, args, tool):
return {
- "bug_id": (args and args[0]) or tool.checkout().bug_id_for_this_commit(options.git_commit, options.squash),
+ "bug_id": (args and args[0]) or tool.checkout().bug_id_for_this_commit(options.git_commit),
}
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py b/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py
index 958620a..75cd0f3 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py
@@ -32,7 +32,7 @@ from webkitpy.common.system.outputcapture import OutputCapture
from webkitpy.thirdparty.mock import Mock
from webkitpy.tool.commands.commandtest import CommandsTest
from webkitpy.tool.commands.download import *
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
class AbstractRolloutPrepCommandTest(unittest.TestCase):
@@ -56,7 +56,7 @@ class AbstractRolloutPrepCommandTest(unittest.TestCase):
class DownloadCommandsTest(CommandsTest):
def _default_options(self):
- options = Mock()
+ options = MockOptions()
options.force_clean = False
options.clean = True
options.check_builders = True
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/queues.py b/WebKitTools/Scripts/webkitpy/tool/commands/queues.py
index 5ff390c..97c3ddb 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/queues.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/queues.py
@@ -42,7 +42,7 @@ from webkitpy.tool.commands.stepsequence import StepSequenceErrorHandler
from webkitpy.tool.bot.patchcollection import PersistentPatchCollection, PersistentPatchCollectionDelegate
from webkitpy.tool.bot.queueengine import QueueEngine, QueueEngineDelegate
from webkitpy.tool.grammar import pluralize
-from webkitpy.tool.multicommandtool import Command
+from webkitpy.tool.multicommandtool import Command, TryAgain
class AbstractQueue(Command, QueueEngineDelegate):
watchers = [
@@ -279,6 +279,17 @@ class CommitQueue(AbstractPatchQueue, StepSequenceErrorHandler):
validator = CommitterValidator(tool.bugs)
validator.reject_patch_from_commit_queue(state["patch"].id(), cls._error_message_for_bug(tool, status_id, script_error))
+ @classmethod
+ def handle_checkout_needs_update(cls, tool, state, options, error):
+ # The only time when we find out that out checkout needs update is
+ # when we were ready to actually pull the trigger and land the patch.
+ # Rather than spinning in the master process, we retry without
+ # building or testing, which is much faster.
+ options.build = False
+ options.test = False
+ options.update = True
+ raise TryAgain()
+
class RietveldUploadQueue(AbstractPatchQueue, StepSequenceErrorHandler):
name = "rietveld-upload-queue"
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py b/WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py
index c6de79f..be2ed4c 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py
@@ -39,6 +39,10 @@ class StepSequenceErrorHandler():
def handle_script_error(cls, tool, patch, script_error):
raise NotImplementedError, "subclasses must implement"
+ @classmethod
+ def handle_checkout_needs_update(cls, tool, state, options, error):
+ raise NotImplementedError, "subclasses must implement"
+
class StepSequence(object):
def __init__(self, steps):
@@ -66,6 +70,9 @@ class StepSequence(object):
self._run(tool, options, state)
except CheckoutNeedsUpdate, e:
log("Commit failed because the checkout is out of date. Please update and try again.")
+ if options.parent_command:
+ command = tool.command_by_name(options.parent_command)
+ command.handle_checkout_needs_update(tool, state, options, e)
QueueEngine.exit_after_handled_error(e)
except ScriptError, e:
if not options.quiet:
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/upload.py b/WebKitTools/Scripts/webkitpy/tool/commands/upload.py
index 9c935e8..4a15ed6 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/upload.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/upload.py
@@ -53,7 +53,6 @@ class CommitMessageForCurrentDiff(AbstractDeclarativeCommand):
def __init__(self):
options = [
- steps.Options.squash,
steps.Options.git_commit,
]
AbstractDeclarativeCommand.__init__(self, options=options)
@@ -61,7 +60,7 @@ class CommitMessageForCurrentDiff(AbstractDeclarativeCommand):
def execute(self, options, args, tool):
# This command is a useful test to make sure commit_message_for_this_commit
# always returns the right value regardless of the current working directory.
- print "%s" % tool.checkout().commit_message_for_this_commit(options.git_commit, options.squash).message()
+ print "%s" % tool.checkout().commit_message_for_this_commit(options.git_commit).message()
class CleanPendingCommit(AbstractDeclarativeCommand):
@@ -153,7 +152,7 @@ class AbstractPatchUploadingCommand(AbstractSequencedCommand):
# Perfer a bug id passed as an argument over a bug url in the diff (i.e. ChangeLogs).
bug_id = args and args[0]
if not bug_id:
- bug_id = tool.checkout().bug_id_for_this_commit(options.git_commit, options.squash)
+ bug_id = tool.checkout().bug_id_for_this_commit(options.git_commit)
return bug_id
def _prepare_state(self, options, args, tool):
@@ -423,11 +422,11 @@ class CreateBug(AbstractDeclarativeCommand):
if options.prompt:
(bug_title, comment_text) = self.prompt_for_bug_title_and_comment()
else:
- commit_message = tool.checkout().commit_message_for_this_commit(options.git_commit, options.squash)
+ commit_message = tool.checkout().commit_message_for_this_commit(options.git_commit)
bug_title = commit_message.description(lstrip=True, strip_url=True)
comment_text = commit_message.body(lstrip=True)
- diff = tool.scm().create_patch(options.git_commit, options.squash)
+ diff = tool.scm().create_patch(options.git_commit)
bug_id = tool.bugs.create_bug(bug_title, comment_text, options.component, diff, "Patch", cc=options.cc, mark_for_review=options.review, mark_for_commit_queue=options.request_commit)
def prompt_for_bug_title_and_comment(self):
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/upload_unittest.py b/WebKitTools/Scripts/webkitpy/tool/commands/upload_unittest.py
index 8fef54a..5f3f400 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/upload_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/upload_unittest.py
@@ -29,7 +29,7 @@
from webkitpy.thirdparty.mock import Mock
from webkitpy.tool.commands.commandtest import CommandsTest
from webkitpy.tool.commands.upload import *
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
class UploadCommandsTest(CommandsTest):
def test_commit_message_for_current_diff(self):
@@ -51,7 +51,7 @@ class UploadCommandsTest(CommandsTest):
self.assert_execute_outputs(ObsoleteAttachments(), [42], expected_stderr=expected_stderr)
def test_post(self):
- options = Mock()
+ options = MockOptions()
options.description = "MOCK description"
options.request_commit = False
options.review = True
@@ -80,7 +80,7 @@ MOCK: user.open_url: http://example.com/42
self.assert_execute_outputs(Prepare(), [], expected_stderr=expected_stderr)
def test_upload(self):
- options = Mock()
+ options = MockOptions()
options.description = "MOCK description"
options.request_commit = False
options.review = True
diff --git a/WebKitTools/Scripts/webkitpy/tool/mocktool.py b/WebKitTools/Scripts/webkitpy/tool/mocktool.py
index d88190f..a467364 100644
--- a/WebKitTools/Scripts/webkitpy/tool/mocktool.py
+++ b/WebKitTools/Scripts/webkitpy/tool/mocktool.py
@@ -397,7 +397,7 @@ class MockSCM(Mock):
# will actually be the root. Since getcwd() is wrong, use a globally fake root for now.
self.checkout_root = self.fake_checkout_root
- def create_patch(self, git_commit, squash):
+ def create_patch(self, git_commit):
return "Patch1"
def commit_ids_from_commitish_arguments(self, args):
@@ -437,12 +437,12 @@ class MockCheckout(object):
def bug_id_for_revision(self, svn_revision):
return 12345
- def modified_changelogs(self, git_commit, squash):
+ def modified_changelogs(self, git_commit):
# Ideally we'd return something more interesting here. The problem is
# that LandDiff will try to actually read the patch from disk!
return []
- def commit_message_for_this_commit(self, git_commit, squash):
+ def commit_message_for_this_commit(self, git_commit):
commit_message = Mock()
commit_message.message = lambda:"This is a fake commit message that is at least 50 characters."
return commit_message
@@ -515,6 +515,7 @@ class MockStatusServer(object):
def results_url_for_status(self, status_id):
return "http://dummy_url"
+
class MockExecute(Mock):
def __init__(self, should_log):
self._should_log = should_log
@@ -537,6 +538,11 @@ class MockExecute(Mock):
return "MOCK output of child process"
+class MockOptions(Mock):
+ no_squash = False
+ squash = False
+
+
class MockRietveld():
def __init__(self, executive, dryrun=False):
diff --git a/WebKitTools/Scripts/webkitpy/tool/multicommandtool.py b/WebKitTools/Scripts/webkitpy/tool/multicommandtool.py
index 7940c06..12ede2e 100644
--- a/WebKitTools/Scripts/webkitpy/tool/multicommandtool.py
+++ b/WebKitTools/Scripts/webkitpy/tool/multicommandtool.py
@@ -39,6 +39,10 @@ from webkitpy.tool.grammar import pluralize
from webkitpy.common.system.deprecated_logging import log
+class TryAgain(Exception):
+ pass
+
+
class Command(object):
name = None
show_in_main_help = False
@@ -299,6 +303,12 @@ class MultiCommandTool(object):
log(failure_reason)
return 0 # FIXME: Should this really be 0?
- result = command.check_arguments_and_execute(options, args, self)
+ while True:
+ try:
+ result = command.check_arguments_and_execute(options, args, self)
+ break
+ except TryAgain, e:
+ pass
+
self.command_completed()
return result
diff --git a/WebKitTools/Scripts/webkitpy/tool/multicommandtool_unittest.py b/WebKitTools/Scripts/webkitpy/tool/multicommandtool_unittest.py
index 268ebf0..c19095c 100644
--- a/WebKitTools/Scripts/webkitpy/tool/multicommandtool_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/multicommandtool_unittest.py
@@ -32,7 +32,7 @@ import unittest
from optparse import make_option
from webkitpy.common.system.outputcapture import OutputCapture
-from webkitpy.tool.multicommandtool import MultiCommandTool, Command
+from webkitpy.tool.multicommandtool import MultiCommandTool, Command, TryAgain
class TrivialCommand(Command):
@@ -44,10 +44,26 @@ class TrivialCommand(Command):
def execute(self, options, args, tool):
pass
+
class UncommonCommand(TrivialCommand):
name = "uncommon"
show_in_main_help = False
+
+class LikesToRetry(Command):
+ name = "likes-to-retry"
+ show_in_main_help = True
+
+ def __init__(self, **kwargs):
+ Command.__init__(self, "help text", **kwargs)
+ self.execute_count = 0
+
+ def execute(self, options, args, tool):
+ self.execute_count += 1
+ if self.execute_count < 2:
+ raise TryAgain()
+
+
class CommandTest(unittest.TestCase):
def test_name_with_arguments(self):
command_with_args = TrivialCommand(argument_names="ARG1 ARG2")
@@ -109,6 +125,12 @@ class MultiCommandToolTest(unittest.TestCase):
exit_code = OutputCapture().assert_outputs(self, tool.main, [main_args], expected_stdout=expected_stdout, expected_stderr=expected_stderr)
self.assertEqual(exit_code, expected_exit_code)
+ def test_retry(self):
+ likes_to_retry = LikesToRetry()
+ tool = TrivialTool(commands=[likes_to_retry])
+ tool.main(["tool", "likes-to-retry"])
+ self.assertEqual(likes_to_retry.execute_count, 2)
+
def test_global_help(self):
tool = TrivialTool(commands=[TrivialCommand(), UncommonCommand()])
expected_common_commands_help = """Usage: trivial-tool [options] COMMAND [ARGS]
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/abstractstep.py b/WebKitTools/Scripts/webkitpy/tool/steps/abstractstep.py
index 20f8bbf..8f0d153 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/abstractstep.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/abstractstep.py
@@ -27,6 +27,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from webkitpy.common.system.deprecated_logging import log
+from webkitpy.common.system.executive import ScriptError
from webkitpy.common.config.ports import WebKitPort
from webkitpy.tool.steps.options import Options
@@ -34,6 +35,10 @@ from webkitpy.tool.steps.options import Options
class AbstractStep(object):
def __init__(self, tool, options):
self._tool = tool
+ if options.no_squash:
+ raise ScriptError('--no-squash has been removed. Use "--git-commit=HEAD.." or "-g HEAD.." to operate on the working copy.')
+ if options.squash:
+ raise ScriptError('--squash has been removed. It is now the default behavior if --git-commit is omitted.')
self._options = options
self._port = None
@@ -53,8 +58,8 @@ class AbstractStep(object):
return self._port
_well_known_keys = {
- "diff": lambda self, state: self._tool.scm().create_patch(self._options.git_commit, self._options.squash),
- "changelogs": lambda self, state: self._tool.checkout().modified_changelogs(self._options.git_commit, self._options.squash),
+ "diff": lambda self, state: self._tool.scm().create_patch(self._options.git_commit),
+ "changelogs": lambda self, state: self._tool.checkout().modified_changelogs(self._options.git_commit),
"bug_title": lambda self, state: self._tool.bugs.fetch_bug(state["bug_id"]).title(),
}
@@ -69,8 +74,9 @@ class AbstractStep(object):
@classmethod
def options(cls):
return [
- # We need these options here because cached_lookup uses them. :(
+ # We need this option here because cached_lookup uses it. :(
Options.git_commit,
+ # FIXME: Get rid of these.
Options.no_squash,
Options.squash,
]
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py b/WebKitTools/Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py
index d6b026d..3dcd8d9 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/applypatchwithlocalcommit.py
@@ -39,5 +39,5 @@ class ApplyPatchWithLocalCommit(ApplyPatch):
def run(self, state):
ApplyPatch.run(self, state)
if self._options.local_commit:
- commit_message = self._tool.checkout().commit_message_for_this_commit(git_commit=None, squash=False)
+ commit_message = self._tool.checkout().commit_message_for_this_commit(git_commit=None)
self._tool.scm().commit_locally_with_message(commit_message.message() or state["patch"].name())
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle.py b/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle.py
index 93e6215..af38214 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle.py
@@ -40,8 +40,6 @@ class CheckStyle(AbstractStep):
Options.non_interactive,
Options.check_style,
Options.git_commit,
- Options.no_squash,
- Options.squash,
]
def run(self, state):
@@ -53,10 +51,6 @@ class CheckStyle(AbstractStep):
if self._options.git_commit:
args.append("--git-commit")
args.append(self._options.git_commit)
- if self._tool.scm().should_squash(self._options.squash):
- args.append("--squash")
- else:
- args.append("--no-squash")
try:
self._run_script("check-webkit-style", args)
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle_unittest.py b/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle_unittest.py
deleted file mode 100644
index a23ea1b..0000000
--- a/WebKitTools/Scripts/webkitpy/tool/steps/checkstyle_unittest.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# 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.
-
-import unittest
-
-from webkitpy.common.system.executive import ScriptError
-from webkitpy.thirdparty.mock import Mock
-from webkitpy.tool.mocktool import MockTool
-from webkitpy.tool.steps.checkstyle import CheckStyle
-
-
-class CheckStyleTest(unittest.TestCase):
- def test_should_squash_error(self):
- """should_squash can throw an error. That error should not be eaten by CheckStyle."""
- def should_squash(squash):
- raise ScriptError(message="Dummy error")
-
- tool = MockTool()
- tool._scm.should_squash = should_squash
- step = CheckStyle(tool, Mock())
- self.assertRaises(ScriptError, step.run, [])
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py b/WebKitTools/Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py
index 4e7f9e6..0a56564 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py
@@ -29,13 +29,12 @@
import unittest
from webkitpy.common.system.outputcapture import OutputCapture
-from webkitpy.thirdparty.mock import Mock
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
from webkitpy.tool.steps.closebugforlanddiff import CloseBugForLandDiff
class CloseBugForLandDiffTest(unittest.TestCase):
def test_empty_state(self):
capture = OutputCapture()
- step = CloseBugForLandDiff(MockTool(), Mock())
+ step = CloseBugForLandDiff(MockTool(), MockOptions())
expected_stderr = "Committed r49824: <http://trac.webkit.org/changeset/49824>\nNo bug id provided.\n"
capture.assert_outputs(self, step.run, [{"commit_text" : "Mock commit text"}], expected_stderr=expected_stderr)
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/commit.py b/WebKitTools/Scripts/webkitpy/tool/steps/commit.py
index 7bf8b8a..9f93120 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/commit.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/commit.py
@@ -26,6 +26,9 @@
# (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.checkout.scm import AuthenticationError, AmbiguousCommitError
+from webkitpy.common.system.executive import ScriptError
+from webkitpy.common.system.user import User
from webkitpy.tool.steps.abstractstep import AbstractStep
from webkitpy.tool.steps.options import Options
@@ -35,13 +38,38 @@ class Commit(AbstractStep):
def options(cls):
return AbstractStep.options() + [
Options.git_commit,
- Options.no_squash,
- Options.squash,
]
+ def _commit_warning(self, error):
+ working_directory_message = "" if error.working_directory_is_clean else " and working copy changes"
+ return ('There are %s local commits%s. Everything will be committed as a single commit. '
+ 'To avoid this prompt, set "git config webkit-patch.squash true".' % (
+ error.num_local_commits, working_directory_message))
+
def run(self, state):
- commit_message = self._tool.checkout().commit_message_for_this_commit(self._options.git_commit, self._options.squash)
- if len(commit_message.message()) < 50:
+ self._commit_message = self._tool.checkout().commit_message_for_this_commit(self._options.git_commit).message()
+ if len(self._commit_message) < 50:
raise Exception("Attempted to commit with a commit message shorter than 50 characters. Either your patch is missing a ChangeLog or webkit-patch may have a bug.")
- state["commit_text"] = self._tool.scm().commit_with_message(commit_message.message(),
- git_commit=self._options.git_commit, squash=self._options.squash)
+
+ self._state = state
+
+ username = None
+ force_squash = False
+
+ num_tries = 0
+ while num_tries < 3:
+ num_tries += 1
+
+ try:
+ self._state["commit_text"] = self._tool.scm().commit_with_message(self._commit_message, git_commit=self._options.git_commit, username=username, force_squash=force_squash)
+ break;
+ except AmbiguousCommitError, e:
+ if self._tool.user.confirm(self._commit_warning(e)):
+ force_squash = True
+ else:
+ # This will correctly interrupt the rest of the commit process.
+ raise ScriptError(message="Did not commit")
+ except AuthenticationError, e:
+ username = self._tool.user.prompt("%s login: " % e.server_host, repeat=5)
+ if not username:
+ raise ScriptError("You need to specify the username on %s to perform the commit as." % self.svn_server_host)
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/createbug.py b/WebKitTools/Scripts/webkitpy/tool/steps/createbug.py
index cd043d6..0ab6f68 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/createbug.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/createbug.py
@@ -36,6 +36,7 @@ class CreateBug(AbstractStep):
return AbstractStep.options() + [
Options.cc,
Options.component,
+ Options.blocks,
]
def run(self, state):
@@ -45,4 +46,7 @@ class CreateBug(AbstractStep):
cc = self._options.cc
if not cc:
cc = state.get("bug_cc")
- state["bug_id"] = self._tool.bugs.create_bug(state["bug_title"], state["bug_description"], blocked=state.get("bug_blocked"), component=self._options.component, cc=cc)
+ blocks = self._options.blocks
+ if not blocks:
+ blocks = state.get("bug_blocked")
+ state["bug_id"] = self._tool.bugs.create_bug(state["bug_title"], state["bug_description"], blocked=blocks, component=self._options.component, cc=cc)
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/options.py b/WebKitTools/Scripts/webkitpy/tool/steps/options.py
index fa36f73..9c73f5a 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/options.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/options.py
@@ -29,6 +29,7 @@
from optparse import make_option
class Options(object):
+ blocks = make_option("--blocks", action="store", dest="blocks", default=None, help="Bug number which the created bug blocks.")
build = make_option("--build", action="store_true", dest="build", default=False, help="Build and run run-webkit-tests before committing.")
build_style = make_option("--build-style", action="store", dest="build_style", default=None, help="Whether to build debug, release, or both.")
cc = make_option("--cc", action="store", type="string", dest="cc", help="Comma-separated list of email addresses to carbon-copy.")
@@ -42,11 +43,11 @@ class Options(object):
description = make_option("-m", "--description", action="store", type="string", dest="description", help="Description string for the attachment (default: \"patch\")")
email = make_option("--email", action="store", type="string", dest="email", help="Email address to use in ChangeLogs.")
force_clean = make_option("--force-clean", action="store_true", dest="force_clean", default=False, help="Clean working directory before applying patches (removes local changes and commits)")
-# FIXME: Make commit ranges treat each commit separately instead of squashing them into one.
- git_commit = make_option("--git-commit", action="store", dest="git_commit", help="Local git commit to upload/land. If a range, the commits are squashed into one.")
+ git_commit = make_option("-g", "--git-commit", action="store", dest="git_commit", help="Operate on a local commit. If a range, the commits are squashed into one. HEAD.. operates on working copy changes only.")
local_commit = make_option("--local-commit", action="store_true", dest="local_commit", default=False, help="Make a local commit for each applied patch")
- no_squash = make_option("--no-squash", action="store_false", dest="squash", help="Don't squash local commits into one on upload/land (git-only).")
non_interactive = make_option("--non-interactive", action="store_true", dest="non_interactive", default=False, help="Never prompt the user, fail as fast as possible.")
+ # FIXME: Remove --no-squash, once people have adjusted to using --git-commit.
+ no_squash = make_option("--no-squash", action="store_true", dest="no_squash", default=False, help="Obsolete. Use --git-commit=HEAD.. instead.")
obsolete_patches = make_option("--no-obsolete", action="store_false", dest="obsolete_patches", default=True, help="Do not obsolete old patches before posting this one.")
open_bug = make_option("--open-bug", action="store_true", dest="open_bug", default=False, help="Opens the associated bug in a browser.")
parent_command = make_option("--parent-command", action="store", dest="parent_command", default=None, help="(Internal) The command that spawned this instance.")
@@ -55,6 +56,7 @@ class Options(object):
request_commit = make_option("--request-commit", action="store_true", dest="request_commit", default=False, help="Mark the patch as needing auto-commit after review.")
review = make_option("--no-review", action="store_false", dest="review", default=True, help="Do not mark the patch for review.")
reviewer = make_option("-r", "--reviewer", action="store", type="string", dest="reviewer", help="Update ChangeLogs to say Reviewed by REVIEWER.")
- squash = make_option("-s", "--squash", action="store_true", dest="squash", help="Squash all local commits into one on upload/land (git-only).")
+ # FIXME: Remove --squash, once people have adjusted to using --git-commit.
+ squash = make_option("-s", "--squash", action="store_true", dest="squash", default=False, help="Obsolete. This is now the default behavior.")
test = make_option("--test", action="store_true", dest="test", default=False, help="Run run-webkit-tests before committing.")
update = make_option("--no-update", action="store_false", dest="update", default=True, help="Don't update the working directory.")
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py b/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py
index 7f0c1a8..ce04024 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog.py
@@ -43,8 +43,6 @@ class PrepareChangeLog(AbstractStep):
Options.quiet,
Options.email,
Options.git_commit,
- Options.no_squash,
- Options.squash,
]
def _ensure_bug_url(self, state):
@@ -69,10 +67,9 @@ class PrepareChangeLog(AbstractStep):
args.append("--bug=%s" % state["bug_id"])
if self._options.email:
args.append("--email=%s" % self._options.email)
- if self._tool.scm().should_squash(self._options.squash):
- args.append("--merge-base=%s" % self._tool.scm().remote_merge_base())
- if self._options.git_commit:
- args.append("--git-commit=%s" % self._options.git_commit)
+
+ if self._tool.scm().supports_local_commits():
+ args.append("--merge-base=%s" % self._tool.scm().merge_base(self._options.git_commit))
try:
self._tool.executive.run_and_throw_if_fail(args, self._options.quiet)
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog_unittest.py b/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog_unittest.py
index 1d0db75..eceffdf 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelog_unittest.py
@@ -31,15 +31,14 @@ import unittest
from webkitpy.common.checkout.changelog_unittest import ChangeLogTest
from webkitpy.common.system.outputcapture import OutputCapture
-from webkitpy.thirdparty.mock import Mock
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
from webkitpy.tool.steps.preparechangelog import PrepareChangeLog
class PrepareChangeLogTest(ChangeLogTest):
def test_ensure_bug_url(self):
capture = OutputCapture()
- step = PrepareChangeLog(MockTool(), Mock())
+ step = PrepareChangeLog(MockTool(), MockOptions())
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"))
state = {
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py b/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py
index 4d299fa..0e78bc2 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/preparechangelogforrevert.py
@@ -36,7 +36,7 @@ class PrepareChangeLogForRevert(AbstractStep):
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, squash=False)
+ 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
for changelog_path in changelog_paths:
# FIXME: Seems we should prepare the message outside of changelogs.py and then just pass in
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/steps_unittest.py b/WebKitTools/Scripts/webkitpy/tool/steps/steps_unittest.py
index 1fd2bad..766801b 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/steps_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/steps_unittest.py
@@ -30,8 +30,7 @@ import unittest
from webkitpy.common.system.outputcapture import OutputCapture
from webkitpy.common.config.ports import WebKitPort
-from webkitpy.thirdparty.mock import Mock
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
from webkitpy.tool.steps.update import Update
from webkitpy.tool.steps.runtests import RunTests
from webkitpy.tool.steps.promptforbugortitle import PromptForBugOrTitle
@@ -42,13 +41,13 @@ class StepsTest(unittest.TestCase):
if not tool:
tool = MockTool()
if not options:
- options = Mock()
+ options = MockOptions()
if not state:
state = {}
step(tool, options).run(state)
def test_update_step(self):
- options = Mock()
+ options = MockOptions()
options.update = True
expected_stderr = "Updating working directory\n"
OutputCapture().assert_outputs(self, self._run_step, [Update, options], expected_stderr=expected_stderr)
@@ -63,7 +62,7 @@ class StepsTest(unittest.TestCase):
OutputCapture().assert_outputs(self, self._run_step, [RunTests], expected_stderr=expected_stderr)
def test_runtests_leopard_commit_queue_hack(self):
- mock_options = Mock()
+ mock_options = MockOptions()
mock_options.non_interactive = True
step = RunTests(MockTool(log_executive=True), mock_options)
# FIXME: We shouldn't use a real port-object here, but there is too much to mock at the moment.
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py b/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py
index 0534718..a037422 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py
@@ -29,18 +29,17 @@
import unittest
from webkitpy.common.system.outputcapture import OutputCapture
-from webkitpy.thirdparty.mock import Mock
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
from webkitpy.tool.steps.updatechangelogswithreviewer import UpdateChangeLogsWithReviewer
class UpdateChangeLogsWithReviewerTest(unittest.TestCase):
def test_guess_reviewer_from_bug(self):
capture = OutputCapture()
- step = UpdateChangeLogsWithReviewer(MockTool(), Mock())
+ step = UpdateChangeLogsWithReviewer(MockTool(), MockOptions())
expected_stderr = "0 reviewed patches on bug 75, cannot infer reviewer.\n"
capture.assert_outputs(self, step._guess_reviewer_from_bug, [75], expected_stderr=expected_stderr)
def test_empty_state(self):
capture = OutputCapture()
- step = UpdateChangeLogsWithReviewer(MockTool(), Mock())
+ step = UpdateChangeLogsWithReviewer(MockTool(), MockOptions())
capture.assert_outputs(self, step.run, [{}])
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py b/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py
index ef4baa2..e46b790 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py
@@ -40,8 +40,6 @@ class UpdateChangeLogsWithReviewer(AbstractStep):
return AbstractStep.options() + [
Options.git_commit,
Options.reviewer,
- Options.no_squash,
- Options.squash,
]
def _guess_reviewer_from_bug(self, bug_id):
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer.py b/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer.py
index 9f4d44e..bdf729e 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer.py
@@ -41,8 +41,6 @@ class ValidateReviewer(AbstractStep):
def options(cls):
return AbstractStep.options() + [
Options.git_commit,
- Options.no_squash,
- Options.squash,
]
# FIXME: This should probably move onto ChangeLogEntry
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer_unittest.py b/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer_unittest.py
index 9105102..d9b856a 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/validatereviewer_unittest.py
@@ -30,8 +30,7 @@ import unittest
from webkitpy.common.checkout.changelog import ChangeLogEntry
from webkitpy.common.system.outputcapture import OutputCapture
-from webkitpy.thirdparty.mock import Mock
-from webkitpy.tool.mocktool import MockTool
+from webkitpy.tool.mocktool import MockOptions, MockTool
from webkitpy.tool.steps.validatereviewer import ValidateReviewer
class ValidateReviewerTest(unittest.TestCase):
@@ -48,7 +47,7 @@ class ValidateReviewerTest(unittest.TestCase):
self.assertEqual(step._has_valid_reviewer(entry), expected)
def test_has_valid_reviewer(self):
- step = ValidateReviewer(MockTool(), Mock())
+ step = ValidateReviewer(MockTool(), MockOptions())
self._test_review_text(step, "Reviewed by Eric Seidel.", True)
self._test_review_text(step, "Reviewed by Eric Seidel", True) # Not picky about the '.'
self._test_review_text(step, "Reviewed by Eric.", False)
diff --git a/WebKitTools/WebKitAPITest/TestsController.cpp b/WebKitTools/WebKitAPITest/TestsController.cpp
index 52ceabf..08b193a 100644
--- a/WebKitTools/WebKitAPITest/TestsController.cpp
+++ b/WebKitTools/WebKitAPITest/TestsController.cpp
@@ -71,7 +71,7 @@ bool TestsController::runAllTests()
void TestsController::addTest(PassOwnPtr<Test> test)
{
- m_tests.append(test.release());
+ m_tests.append(test.leakPtr());
runNextTestSoon();
}
diff --git a/WebKitTools/WebKitAPITest/WebKitAPITest.vcproj b/WebKitTools/WebKitAPITest/WebKitAPITest.vcproj
index 9984389..12a46be 100644
--- a/WebKitTools/WebKitAPITest/WebKitAPITest.vcproj
+++ b/WebKitTools/WebKitAPITest/WebKitAPITest.vcproj
@@ -49,6 +49,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
/>
<Tool
Name="VCALinkTool"
@@ -110,6 +111,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
/>
<Tool
Name="VCALinkTool"
@@ -171,6 +173,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
/>
<Tool
Name="VCALinkTool"
@@ -234,6 +237,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
/>
<Tool
Name="VCALinkTool"
diff --git a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
index 63013fb..9eea3e2 100644
--- a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
+++ b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
@@ -43,7 +43,6 @@ InjectedBundle& InjectedBundle::shared()
InjectedBundle::InjectedBundle()
: m_bundle(0)
- , m_layoutTestController(LayoutTestController::create(std::string("")))
{
}
@@ -86,7 +85,9 @@ void InjectedBundle::done()
void InjectedBundle::didCreatePage(WKBundlePageRef page)
{
- m_pages.add(page, new InjectedBundlePage(page));
+ // FIXME: we really need the main page ref to be sent over from the ui process
+ m_mainPage = new InjectedBundlePage(page);
+ m_pages.add(page, m_mainPage);
}
void InjectedBundle::willDestroyPage(WKBundlePageRef page)
@@ -112,6 +113,7 @@ void InjectedBundle::didRecieveMessage(WKStringRef message)
void InjectedBundle::reset()
{
m_outputStream.str("");
+ m_layoutTestController = LayoutTestController::create(std::string(""));
}
} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.h b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
index 33934cf..1581ebc 100644
--- a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
+++ b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
@@ -48,6 +48,7 @@ public:
void done();
LayoutTestController* layoutTestController() { return m_layoutTestController.get(); }
+ InjectedBundlePage* page() { return m_mainPage; }
std::ostringstream& os() { return m_outputStream; }
@@ -67,6 +68,7 @@ private:
WKBundleRef m_bundle;
HashMap<WKBundlePageRef, InjectedBundlePage*> m_pages;
+ InjectedBundlePage* m_mainPage;
RefPtr<LayoutTestController> m_layoutTestController;
diff --git a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
index cabb90d..b254405 100644
--- a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
+++ b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
@@ -31,6 +31,7 @@
#include <WebKit2/WKRetainPtr.h>
#include <WebKit2/WKString.h>
#include <WebKit2/WKStringCF.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RetainPtr.h>
#include <wtf/Vector.h>
@@ -38,8 +39,9 @@ namespace WTR {
InjectedBundlePage::InjectedBundlePage(WKBundlePageRef page)
: m_page(page)
+ , m_isLoading(false)
{
- WKBundlePageClient client = {
+ WKBundlePageLoaderClient loaderClient = {
0,
this,
_didStartProvisionalLoadForFrame,
@@ -51,13 +53,23 @@ InjectedBundlePage::InjectedBundlePage(WKBundlePageRef page)
_didReceiveTitleForFrame,
_didClearWindowForFrame
};
- WKBundlePageSetClient(m_page, &client);
+ WKBundlePageSetLoaderClient(m_page, &loaderClient);
+
+ WKBundlePageUIClient uiClient = {
+ 0,
+ this,
+ _addMessageToConsole
+ };
+ WKBundlePageSetUIClient(m_page, &uiClient);
+
}
InjectedBundlePage::~InjectedBundlePage()
{
}
+// Loader Client Callbacks
+
void InjectedBundlePage::_didStartProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
{
static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->didStartProvisionalLoadForFrame(frame);
@@ -100,6 +112,8 @@ void InjectedBundlePage::_didClearWindowForFrame(WKBundlePageRef page, WKBundleF
void InjectedBundlePage::didStartProvisionalLoadForFrame(WKBundleFrameRef frame)
{
+ if (frame == WKBundlePageGetMainFrame(m_page))
+ m_isLoading = true;
}
void InjectedBundlePage::didReceiveServerRedirectForProvisionalLoadForFrame(WKBundleFrameRef frame)
@@ -114,17 +128,34 @@ void InjectedBundlePage::didCommitLoadForFrame(WKBundleFrameRef frame)
{
}
-static std::auto_ptr<Vector<char> > WKStringToUTF8(WKStringRef wkStringRef)
+static PassOwnPtr<Vector<char> > WKStringToUTF8(WKStringRef wkStringRef)
{
RetainPtr<CFStringRef> cfString(AdoptCF, WKStringCopyCFString(0, wkStringRef));
CFIndex bufferLength = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfString.get()), kCFStringEncodingUTF8) + 1;
- std::auto_ptr<Vector<char> > buffer(new Vector<char>(bufferLength));
+ OwnPtr<Vector<char> > buffer(new Vector<char>(bufferLength));
if (!CFStringGetCString(cfString.get(), buffer->data(), bufferLength, kCFStringEncodingUTF8)) {
buffer->shrink(1);
(*buffer)[0] = 0;
} else
buffer->shrink(strlen(buffer->data()) + 1);
- return buffer;
+ return buffer.release();
+}
+
+void InjectedBundlePage::dump()
+{
+ InjectedBundle::shared().layoutTestController()->invalidateWaitToDumpWatchdog();
+
+ if (InjectedBundle::shared().layoutTestController()->dumpAsText()) {
+ // FIXME: Support dumping subframes when layoutTestController()->dumpChildFramesAsText() is true.
+ WKRetainPtr<WKStringRef> innerText(AdoptWK, WKBundleFrameCopyInnerText(WKBundlePageGetMainFrame(m_page)));
+ OwnPtr<Vector<char> > utf8InnerText = WKStringToUTF8(innerText.get());
+ InjectedBundle::shared().os() << utf8InnerText->data() << "\n";
+ } else {
+ WKRetainPtr<WKStringRef> externalRepresentation(AdoptWK, WKBundlePageCopyRenderTreeExternalRepresentation(m_page));
+ OwnPtr<Vector<char> > utf8externalRepresentation = WKStringToUTF8(externalRepresentation.get());
+ InjectedBundle::shared().os() << utf8externalRepresentation->data();
+ }
+ InjectedBundle::shared().done();
}
void InjectedBundlePage::didFinishLoadForFrame(WKBundleFrameRef frame)
@@ -132,11 +163,12 @@ void InjectedBundlePage::didFinishLoadForFrame(WKBundleFrameRef frame)
if (!WKBundleFrameIsMainFrame(frame))
return;
- WKRetainPtr<WKStringRef> externalRepresentation(AdoptWK, WKBundlePageCopyRenderTreeExternalRepresentation(m_page));
- std::auto_ptr<Vector<char> > utf8String = WKStringToUTF8(externalRepresentation.get());
+ m_isLoading = false;
- InjectedBundle::shared().os() << utf8String->data();
- InjectedBundle::shared().done();
+ if (InjectedBundle::shared().layoutTestController()->waitToDump())
+ return;
+
+ dump();
}
void InjectedBundlePage::didFailLoadWithErrorForFrame(WKBundleFrameRef frame)
@@ -144,6 +176,8 @@ void InjectedBundlePage::didFailLoadWithErrorForFrame(WKBundleFrameRef frame)
if (!WKBundleFrameIsMainFrame(frame))
return;
+ m_isLoading = false;
+
InjectedBundle::shared().done();
}
@@ -157,4 +191,18 @@ void InjectedBundlePage::didClearWindowForFrame(WKBundleFrameRef frame, JSContex
InjectedBundle::shared().layoutTestController()->makeWindowObject(ctx, window, &exception);
}
+// UI Client Callbacks
+
+void InjectedBundlePage::_addMessageToConsole(WKBundlePageRef page, WKStringRef message, uint32_t lineNumber, const void *clientInfo)
+{
+ static_cast<InjectedBundlePage*>(const_cast<void*>(clientInfo))->addMessageToConsole(message, lineNumber);
+}
+
+void InjectedBundlePage::addMessageToConsole(WKStringRef message, uint32_t lineNumber)
+{
+ // FIXME: Strip file: urls.
+ OwnPtr<Vector<char> > utf8Message = WKStringToUTF8(message);
+ InjectedBundle::shared().os() << "CONSOLE MESSAGE: line " << lineNumber << ": " << utf8Message->data() << "\n";
+}
+
} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h
index 9782827..79aebb7 100644
--- a/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h
+++ b/WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h
@@ -36,8 +36,12 @@ public:
~InjectedBundlePage();
WKBundlePageRef page() const { return m_page; }
+ void dump();
+
+ bool isLoading() { return m_isLoading; }
private:
+ // Loader Client
static void _didStartProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
static void _didReceiveServerRedirectForProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
static void _didFailProvisionalLoadWithErrorForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
@@ -46,7 +50,6 @@ private:
static void _didFailLoadWithErrorForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
static void _didReceiveTitleForFrame(WKBundlePageRef page, WKStringRef title, WKBundleFrameRef frame, const void *clientInfo);
static void _didClearWindowForFrame(WKBundlePageRef page, WKBundleFrameRef frame, JSContextRef ctx, JSObjectRef window, const void *clientInfo);
-
void didStartProvisionalLoadForFrame(WKBundleFrameRef frame);
void didReceiveServerRedirectForProvisionalLoadForFrame(WKBundleFrameRef frame);
void didFailProvisionalLoadWithErrorForFrame(WKBundleFrameRef frame);
@@ -56,7 +59,12 @@ private:
void didReceiveTitleForFrame(WKStringRef title, WKBundleFrameRef frame);
void didClearWindowForFrame(WKBundleFrameRef frame, JSContextRef ctx, JSObjectRef window);
+ // UI Client
+ static void _addMessageToConsole(WKBundlePageRef page, WKStringRef message, uint32_t lineNumber, const void *clientInfo);
+ void addMessageToConsole(WKStringRef message, uint32_t lineNumber);
+
WKBundlePageRef m_page;
+ bool m_isLoading;
};
} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp b/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
index 014851c..cf3e0fb 100644
--- a/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
+++ b/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp
@@ -24,8 +24,14 @@
*/
#include "LayoutTestController.h"
+#include "InjectedBundle.h"
+#include "InjectedBundlePage.h"
#include <JavaScriptCore/JSRetainPtr.h>
+#include <WebKit2/WKBundleFrame.h>
+#include <WebKit2/WKRetainPtr.h>
+#include <WebKit2/WKStringCF.h>
+#include <WebKit2/WebKit2.h>
namespace WTR {
@@ -36,6 +42,7 @@ PassRefPtr<LayoutTestController> LayoutTestController::create(const std::string&
LayoutTestController::LayoutTestController(const std::string& testPathOrURL)
: m_dumpAsText(false)
+ , m_waitToDump(false)
, m_testPathOrURL(testPathOrURL)
{
}
@@ -44,6 +51,64 @@ LayoutTestController::~LayoutTestController()
{
}
+static const CFTimeInterval waitToDumpWatchdogInterval = 30.0;
+
+
+void LayoutTestController::invalidateWaitToDumpWatchdog()
+{
+ if (m_waitToDumpWatchdog) {
+ CFRunLoopTimerInvalidate(m_waitToDumpWatchdog.get());
+ m_waitToDumpWatchdog = 0;
+ }
+}
+
+static void waitUntilDoneWatchdogFired(CFRunLoopTimerRef timer, void* info)
+{
+ InjectedBundle::shared().layoutTestController()->waitToDumpWatchdogTimerFired();
+}
+
+void LayoutTestController::setWaitToDump()
+{
+ m_waitToDump = true;
+ if (!m_waitToDumpWatchdog) {
+ m_waitToDumpWatchdog.adoptCF(CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + waitToDumpWatchdogInterval,
+ 0, 0, 0, waitUntilDoneWatchdogFired, NULL));
+ CFRunLoopAddTimer(CFRunLoopGetCurrent(), m_waitToDumpWatchdog.get(), kCFRunLoopCommonModes);
+ }
+}
+
+void LayoutTestController::waitToDumpWatchdogTimerFired()
+{
+ invalidateWaitToDumpWatchdog();
+ const char* message = "FAIL: Timed out waiting for notifyDone to be called\n";
+ InjectedBundle::shared().os() << message << "\n";
+ InjectedBundle::shared().done();
+}
+
+void LayoutTestController::notifyDone()
+{
+ if (m_waitToDump && !InjectedBundle::shared().page()->isLoading())
+ InjectedBundle::shared().page()->dump();
+ m_waitToDump = false;
+}
+
+unsigned LayoutTestController::numberOfActiveAnimations() const
+{
+ WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(InjectedBundle::shared().page()->page());
+ return WKBundleFrameGetNumberOfActiveAnimations(mainFrame);
+}
+
+bool LayoutTestController::pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId)
+{
+ RetainPtr<CFStringRef> idCF(AdoptCF, JSStringCopyCFString(kCFAllocatorDefault, elementId));
+ WKRetainPtr<WKStringRef> idWK(AdoptWK, WKStringCreateWithCFString(idCF.get()));
+ RetainPtr<CFStringRef> nameCF(AdoptCF, JSStringCopyCFString(kCFAllocatorDefault, animationName));
+ WKRetainPtr<WKStringRef> nameWK(AdoptWK, WKStringCreateWithCFString(nameCF.get()));
+
+ WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(InjectedBundle::shared().page()->page());
+ return WKBundleFramePauseAnimationOnElementWithId(mainFrame, nameWK.get(), idWK.get(), time);
+}
+
static JSValueRef dumpAsTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
@@ -51,6 +116,45 @@ static JSValueRef dumpAsTextCallback(JSContextRef context, JSObjectRef function,
return JSValueMakeUndefined(context);
}
+static JSValueRef waitUntilDoneCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+ controller->setWaitToDump();
+ return JSValueMakeUndefined(context);
+}
+
+static JSValueRef notifyDoneCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+ controller->notifyDone();
+ return JSValueMakeUndefined(context);
+}
+
+static JSValueRef numberOfActiveAnimationsCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ if (argumentCount)
+ return JSValueMakeUndefined(context);
+
+ LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+ return JSValueMakeNumber(context, controller->numberOfActiveAnimations());
+}
+
+static JSValueRef pauseAnimationAtTimeOnElementWithIdCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+ if (argumentCount != 3)
+ return JSValueMakeUndefined(context);
+
+ JSRetainPtr<JSStringRef> animationName(Adopt, JSValueToStringCopy(context, arguments[0], exception));
+ ASSERT(!*exception);
+ double time = JSValueToNumber(context, arguments[1], exception);
+ ASSERT(!*exception);
+ JSRetainPtr<JSStringRef> elementId(Adopt, JSValueToStringCopy(context, arguments[2], exception));
+ ASSERT(!*exception);
+
+ LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+ return JSValueMakeBoolean(context, controller->pauseAnimationAtTimeOnElementWithId(animationName.get(), time, elementId.get()));
+}
+
// Object Finalization
static void layoutTestControllerObjectFinalize(JSObjectRef object)
@@ -88,6 +192,10 @@ JSStaticFunction* LayoutTestController::staticFunctions()
{
static JSStaticFunction staticFunctions[] = {
{ "dumpAsText", dumpAsTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "notifyDone", notifyDoneCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "numberOfActiveAnimations", numberOfActiveAnimationsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "pauseAnimationAtTimeOnElementWithId", pauseAnimationAtTimeOnElementWithIdCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "waitUntilDone", waitUntilDoneCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ 0, 0, 0 }
};
diff --git a/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.h b/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.h
index 56717c1..203f358 100644
--- a/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.h
+++ b/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.h
@@ -29,6 +29,7 @@
#include <JavaScriptCore/JavaScriptCore.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
+#include <wtf/RetainPtr.h>
#include <string>
namespace WTR {
@@ -43,13 +44,25 @@ public:
bool dumpAsText() const { return m_dumpAsText; }
void setDumpAsText(bool dumpAsText) { m_dumpAsText = dumpAsText; }
+ bool waitToDump() const { return m_waitToDump; }
+ void setWaitToDump();
+ void waitToDumpWatchdogTimerFired();
+ void invalidateWaitToDumpWatchdog();
+ void notifyDone();
+
+ unsigned numberOfActiveAnimations() const;
+ bool pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId);
+
private:
LayoutTestController(const std::string& testPathOrURL);
bool m_dumpAsText;
+ bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
std::string m_testPathOrURL;
+ RetainPtr<CFRunLoopTimerRef> m_waitToDumpWatchdog;
+
static JSClassRef getJSClass();
static JSStaticValue* staticValues();
static JSStaticFunction* staticFunctions();
diff --git a/WebKitTools/WebKitTestRunner/PlatformWebView.h b/WebKitTools/WebKitTestRunner/PlatformWebView.h
index 5506f33..6fc4509 100644
--- a/WebKitTools/WebKitTestRunner/PlatformWebView.h
+++ b/WebKitTools/WebKitTestRunner/PlatformWebView.h
@@ -50,6 +50,7 @@ public:
WKPageRef page();
PlatformWKView platformView() { return m_view; }
+ void resizeTo(unsigned width, unsigned height);
private:
PlatformWKView m_view;
diff --git a/WebKitTools/WebKitTestRunner/TestInvocation.cpp b/WebKitTools/WebKitTestRunner/TestInvocation.cpp
index 72d07ae..d3bb8d2 100644
--- a/WebKitTools/WebKitTestRunner/TestInvocation.cpp
+++ b/WebKitTools/WebKitTestRunner/TestInvocation.cpp
@@ -31,8 +31,9 @@
#include <WebKit2/WKRetainPtr.h>
#include <WebKit2/WKStringCF.h>
#include <WebKit2/WKURLCF.h>
-#include <wtf/Vector.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RetainPtr.h>
+#include <wtf/Vector.h>
using namespace WebKit;
@@ -49,21 +50,22 @@ static WKURLRef createWKURL(const char* pathOrURL)
return WKURLCreateWithCFURL(cfURL.get());
}
-static std::auto_ptr<Vector<char> > WKStringToUTF8(WKStringRef wkStringRef)
+static PassOwnPtr<Vector<char> > WKStringToUTF8(WKStringRef wkStringRef)
{
RetainPtr<CFStringRef> cfString(AdoptCF, WKStringCopyCFString(0, wkStringRef));
CFIndex bufferLength = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfString.get()), kCFStringEncodingUTF8) + 1;
- std::auto_ptr<Vector<char> > buffer(new Vector<char>(bufferLength));
+ OwnPtr<Vector<char> > buffer(new Vector<char>(bufferLength));
if (!CFStringGetCString(cfString.get(), buffer->data(), bufferLength, kCFStringEncodingUTF8)) {
buffer->shrink(1);
(*buffer)[0] = 0;
} else
buffer->shrink(strlen(buffer->data()) + 1);
- return buffer;
+ return buffer.release();
}
TestInvocation::TestInvocation(const char* pathOrURL)
: m_url(AdoptWK, createWKURL(pathOrURL))
+ , m_pathOrURL(fastStrDup(pathOrURL))
, m_gotInitialResponse(false)
, m_gotFinalMessage(false)
, m_error(false)
@@ -72,10 +74,27 @@ TestInvocation::TestInvocation(const char* pathOrURL)
TestInvocation::~TestInvocation()
{
+ fastFree(m_pathOrURL);
+}
+
+static const unsigned w3cSVGWidth = 480;
+static const unsigned w3cSVGHeight = 360;
+static const unsigned normalWidth = 800;
+static const unsigned normalHeight = 600;
+
+static void sizeWebViewForCurrentTest(char* pathOrURL)
+{
+ bool isSVGW3CTest = strstr(pathOrURL, "svg/W3C-SVG-1.1");
+
+ if (isSVGW3CTest)
+ TestController::shared().mainWebView()->resizeTo(w3cSVGWidth, w3cSVGHeight);
+ else
+ TestController::shared().mainWebView()->resizeTo(normalWidth, normalHeight);
}
void TestInvocation::invoke()
{
+ sizeWebViewForCurrentTest(m_pathOrURL);
WKRetainPtr<WKStringRef> message(AdoptWK, WKStringCreateWithCFString(CFSTR("BeginTest")));
WKContextPostMessageToInjectedBundle(TestController::shared().context(), message.get());
@@ -124,7 +143,7 @@ void TestInvocation::didRecieveMessageFromInjectedBundle(WKStringRef message)
return;
}
- std::auto_ptr<Vector<char> > utf8Message = WKStringToUTF8(message);
+ OwnPtr<Vector<char> > utf8Message = WKStringToUTF8(message);
dump(utf8Message->data());
m_gotFinalMessage = true;
diff --git a/WebKitTools/WebKitTestRunner/TestInvocation.h b/WebKitTools/WebKitTestRunner/TestInvocation.h
index fb03150..ea1e840 100644
--- a/WebKitTools/WebKitTestRunner/TestInvocation.h
+++ b/WebKitTools/WebKitTestRunner/TestInvocation.h
@@ -46,6 +46,7 @@ private:
static void runUntil(bool& done);
WKRetainPtr<WKURLRef> m_url;
+ char* m_pathOrURL;
// Invocation state
bool m_gotInitialResponse;
diff --git a/WebKitTools/WebKitTestRunner/WebKitTestRunnerPrefix.h b/WebKitTools/WebKitTestRunner/WebKitTestRunnerPrefix.h
index e8c85a4..ffb6950 100644
--- a/WebKitTools/WebKitTestRunner/WebKitTestRunnerPrefix.h
+++ b/WebKitTools/WebKitTestRunner/WebKitTestRunnerPrefix.h
@@ -27,4 +27,12 @@
#include <Cocoa/Cocoa.h>
#endif
+#include <wtf/Platform.h>
+#if PLATFORM(WIN)
+// If we don't define these, they get defined in windef.h.
+// We want to use std::min and std::max
+#define max max
+#define min min
+#endif
+
#include <WebKit2/WebKit2.h>
diff --git a/WebKitTools/WebKitTestRunner/mac/PlatformWebViewMac.mm b/WebKitTools/WebKitTestRunner/mac/PlatformWebViewMac.mm
index 1a8696d..21db2eb 100644
--- a/WebKitTools/WebKitTestRunner/mac/PlatformWebViewMac.mm
+++ b/WebKitTools/WebKitTestRunner/mac/PlatformWebViewMac.mm
@@ -40,6 +40,11 @@ PlatformWebView::PlatformWebView(WKPageNamespaceRef namespaceRef)
[m_window setAutodisplay:NO];
}
+void PlatformWebView::resizeTo(unsigned width, unsigned height)
+{
+ [m_view setFrame:NSMakeRect(0, 0, width, height)];
+}
+
PlatformWebView::~PlatformWebView()
{
[m_window close];
diff --git a/WebKitTools/WebKitTestRunner/win/PlatformWebViewWin.cpp b/WebKitTools/WebKitTestRunner/win/PlatformWebViewWin.cpp
new file mode 100644
index 0000000..e55bcf7
--- /dev/null
+++ b/WebKitTools/WebKitTestRunner/win/PlatformWebViewWin.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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 "PlatformWebView.h"
+
+namespace WTR {
+
+PlatformWebView::PlatformWebView(WKPageNamespaceRef namespaceRef)
+{
+ // Implement
+}
+
+PlatformWebView::~PlatformWebView()
+{
+ // Implement
+}
+
+void PlatformWebView::resizeTo(unsigned width, unsigned height)
+{
+ // Implement
+}
+
+WKPageRef PlatformWebView::page()
+{
+ // Implement
+ return 0;
+}
+
+} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp b/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp
new file mode 100644
index 0000000..00b2d50
--- /dev/null
+++ b/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp
@@ -0,0 +1,37 @@
+/*
+ * 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 "TestController.h"
+
+#include <WebKit2/WKStringCF.h>
+
+namespace WTR {
+
+void TestController::initializeInjectedBundlePath()
+{
+ // Implement
+}
+
+} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/win/TestInvocationWin.cpp b/WebKitTools/WebKitTestRunner/win/TestInvocationWin.cpp
new file mode 100644
index 0000000..83199bd
--- /dev/null
+++ b/WebKitTools/WebKitTestRunner/win/TestInvocationWin.cpp
@@ -0,0 +1,35 @@
+/*
+ * 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 "TestInvocation.h"
+
+namespace WTR {
+
+void TestInvocation::runUntil(bool& done)
+{
+ // Implement
+}
+
+} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.sln b/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.sln
new file mode 100644
index 0000000..e89e66d
--- /dev/null
+++ b/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebKitTestRunner", "WebKitTestRunner.vcproj", "{3B99669B-1817-443B-BCBE-835580146668}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug_All|Win32 = Debug_All|Win32
+ Debug_Internal|Win32 = Debug_Internal|Win32
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3B99669B-1817-443B-BCBE-835580146668}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Debug_All|Win32.Build.0 = Debug_All|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Debug|Win32.Build.0 = Debug|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Release|Win32.ActiveCfg = Release|Win32
+ {3B99669B-1817-443B-BCBE-835580146668}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj b/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj
new file mode 100644
index 0000000..4885feb
--- /dev/null
+++ b/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj
@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WebKitTestRunner"
+ ProjectGUID="{3B99669B-1817-443B-BCBE-835580146668}"
+ RootNamespace="WebKitTestRunner"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKitTestRunner&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKitTestRunner\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKitTestRunner\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebKitTestRunner\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\cg&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebKitTestRunner\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;"
+ PreprocessorDefinitions="__WIN32__;_CONSOLE"
+ DisableSpecificWarnings="4146"
+ ForcedIncludeFiles="WebKitTestRunnerPrefix.h"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit2$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib getopt$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
+ AdditionalLibraryDirectories=""
+ DelayLoadDLLs=""
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKitTestRunner&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKitTestRunner\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebKitTestRunner\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebKitTestRunner\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\cg&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebKitTestRunner\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;"
+ PreprocessorDefinitions="__WIN32__;_CONSOLE"
+ DisableSpecificWarnings="4146"
+ ForcedIncludeFiles="WebKitTestRunnerPrefix.h"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit2$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib getopt$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
+ AdditionalLibraryDirectories=""
+ DelayLoadDLLs=""
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_Internal|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\cg&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;"
+ PreprocessorDefinitions="__WIN32__;_CONSOLE"
+ DisableSpecificWarnings="4146"
+ ForcedIncludeFiles="Prefix.h"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit2$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib getopt$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
+ AdditionalLibraryDirectories=""
+ DelayLoadDLLs=""
+ SubSystem="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug_All|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_all.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; grep XX$(ProjectName)XX &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;if errorlevel 1 exit 1&#x0D;&#x0A;echo XX$(ProjectName)XX &gt; &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\cg&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;"
+ PreprocessorDefinitions="__WIN32__;_CONSOLE"
+ DisableSpecificWarnings="4146"
+ ForcedIncludeFiles="Prefix.h"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit2$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib getopt$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
+ AdditionalLibraryDirectories=""
+ DelayLoadDLLs=""
+ SubSystem="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not exist &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; exit /b&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreFoundation$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CFNetwork$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CFNetwork.resources&quot; &quot;$(WebKitOutputDir)\bin\CFNetwork.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&quot;&#x0D;&#x0A;xcopy /y /d /e /i &quot;$(WebKitLibrariesDir)\bin\CharacterSets&quot; &quot;$(WebKitOutputDir)\bin\CharacterSets&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\CoreGraphics$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\dnssd.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc40$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42.dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icudt42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuin42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;if exist &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\icuuc42$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxml2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\libxslt$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\pthreadVC2$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\SQLite3$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).dll&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\bin\zlib1$(LibraryConfigSuffix).pdb&quot; &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="win"
+ >
+ <File
+ RelativePath=".\main.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\PlatformWebViewWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\TestControllerWin.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\TestInvocationWin.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="InjectedBundle"
+ >
+ <File
+ RelativePath="..\InjectedBundle\InjectedBundle.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\InjectedBundle\InjectedBundle.h"
+ >
+ </File>
+ <File
+ RelativePath="..\InjectedBundle\InjectedBundleMain.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\InjectedBundle\InjectedBundlePage.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\InjectedBundle\InjectedBundlePage.h"
+ >
+ </File>
+ <File
+ RelativePath="..\InjectedBundle\LayoutTestController.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\InjectedBundle\LayoutTestController.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\PlatformWebView.h"
+ >
+ </File>
+ <File
+ RelativePath="..\TestController.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\TestController.h"
+ >
+ </File>
+ <File
+ RelativePath="..\TestInvocation.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\TestInvocation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\WebKitTestRunnerPrefix.h"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/WebKitTools/WebKitTestRunner/win/main.cpp b/WebKitTools/WebKitTestRunner/win/main.cpp
new file mode 100644
index 0000000..96e55b4
--- /dev/null
+++ b/WebKitTools/WebKitTestRunner/win/main.cpp
@@ -0,0 +1,34 @@
+/*
+ * 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 "TestController.h"
+
+int main(int argc, const char* argv[])
+{
+ WTR::TestController::shared().initialize(argc, argv);
+ WTR::TestController::shared().run();
+
+ return 0;
+}
diff --git a/WebKitTools/wx/build/settings.py b/WebKitTools/wx/build/settings.py
index aa5ca18..fe0bc9b 100644
--- a/WebKitTools/wx/build/settings.py
+++ b/WebKitTools/wx/build/settings.py
@@ -199,15 +199,22 @@ def common_set_options(opt):
opt.add_option('--wx-compiler-prefix', action='store', default='vc',
help='Specify a different compiler prefix (do this if you used COMPILER_PREFIX when building wx itself)')
opt.add_option('--macosx-version', action='store', default='', help="Version of OS X to build for.")
+ opt.add_option('--msvc-version', action='store', default='', help="MSVC version to use to build. Use 8 for 2005, 9 for 2008")
def common_configure(conf):
"""
Configuration used by all targets, called from the target's configure() step.
"""
- conf.env['MSVC_VERSIONS'] = ['msvc 9.0', 'msvc 8.0']
conf.env['MSVC_TARGETS'] = ['x86']
+ if Options.options.msvc_version and Options.options.msvc_version != '':
+ print "msvc version = %s" % Options.options.msvc_version
+ conf.env['MSVC_VERSIONS'] = ['msvc %s.0' % Options.options.msvc_version]
+ else:
+ print "msvc not set!"
+ conf.env['MSVC_VERSIONS'] = ['msvc 9.0', 'msvc 8.0']
+
if sys.platform.startswith('cygwin'):
print "ERROR: You must use the Win32 Python from python.org, not Cygwin Python, when building on Windows."
sys.exit(1)
@@ -238,10 +245,14 @@ def common_configure(conf):
if building_on_win32:
libprefix = 'lib'
- found_versions = conf.get_msvc_versions()
- if found_versions[0][0] == 'msvc 9.0':
+ found = conf.get_msvc_versions()
+ found_versions = []
+ for version in found:
+ found_versions.append(version[0])
+
+ if 'msvc 9.0' in conf.env['MSVC_VERSIONS'] and 'msvc 9.0' in found_versions:
msvc_version = 'msvc2008'
- elif found_versions[0][0] == 'msvc 8.0':
+ elif 'msvc 8.0' in conf.env['MSVC_VERSIONS'] and 'msvc 8.0' in found_versions:
msvc_version = 'msvc2005'
msvclibs_dir = os.path.join(wklibs_dir, msvc_version, 'win')